Создание источника кэширования ресурсов x-script для NuGet
Примечание.
В этом разделе рассматривается экспериментальная функция vcpkg, которая может изменяться или удаляться в любое время.
В этом примере мы настроим веб-канал NuGet в качестве источника кэширования ресурсов с помощью скрипта для восстановления и отправки артефактов.
Необходимые компоненты
- nuget.exe
- Веб-канал пакетов NuGet
Шаг 1. Создание asset-source.nuspec
Создайте шаблон спецификации пакета NuGet со следующим содержимым:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>$sha$</id>
<version>1.0.0</version>
<description>vcpkg download asset</description>
<authors>vcpkg</authors>
</metadata>
<files>
<file src="$file$" />
</files>
</package>
Шаг 2. Создание скрипта поставщика ресурсов
Теперь необходимо создать скрипт, который загружает пакеты из веб-канала NuGet, если он доступен и отправляет отсутствующие пакеты в веб-канал, если они отсутствуют.
Создайте asset-provider.bat
содержимое, предоставленное ниже, обязательно замените URL-адрес веб-канала NuGet и путь к asset-source.nuspec
правильным значениям в вашей системе.
@echo off
set url=%1
set sha512=%2
set dst=%3
set "_dst=%dst:/=\%"
set "_sha512=%sha512:~0,90%"
cd /d %~dp3
%NUGET% install %sha512:~0,90% -Source https://your-nuget-feed-url
echo.
if exist %_sha512%.1.0.0 (
echo "Pull from the NuGet feed"
cd %_sha512%.1.0.0
REM Assume both are files not directories
echo "F" | xcopy /f *.part %_dst%
) else (
echo "Fetch from the url"
curl.exe -L %url% --create-dirs --output %dst%
REM Replace with the correct path
%NUGET% pack C:\path\to\asset-source.nuspec -BasePath %~dp3 -Properties "sha=%_sha512%;file=%dst%" -OutputDirectory %TEMP%
%NUGET% push -ApiKey az -SkipDuplicate %TEMP%\%_sha512%.1.0.0.nupkg -Source https://your-nuget-feed-url
)
Шаг 3. Настройка источников кэширования активов
Теперь, когда вы создали скрипт поставщика ресурсов, необходимо указать vcpkg использовать его в качестве источника кэширования активов. Для этого задайте следующие переменные среды:
$env:X_VCPKG_ASSET_SOURCES="clear;x-script,C:/path/to/asset-provider.bat {url} {sha512} {dst};x-block-origin"
$env:NUGET="C:/path/to/nuget.exe"
$env:VCPKG_KEEP_ENV_VARS="NUGET"
ПРИМЕЧАНИЕ. Обязательно замените пути заполнителя скриптом поставщика ресурсов и nuget.exe правильными путями в системе.
X_VCPKG_ASSET_SOURCES
— переменная среды, используемая для задания источников кэширования ресурсов для используемого vcpkg. В этом примере мы задали следующие значения:
clear
получает удаление расположения кэширования ресурсов по умолчанию.x-script
добавляет скрипт в качестве источника кэширования активов, первый параметр указывает, что vcpkg командной строки должен вызываться, в этом примере мы вызываемasset-provider.bat
скрипт и перенаправляем некоторые необходимые параметры.x-block-origin
заставляет все скачивание поступать из настроенных источников кэширования активов.
VCPKG_KEEP_ENV_VARS
используется для пересылки переменных среды в среду сборки vcpkg. Во время сборки vcpkg создает чистую среду, добавив NUGET
, VCPKG_KEEP_ENV_VARS
что во время сборки перенаправляется исполняемое расположение NuGet.
Когда все будет правильно настроено, в любой момент, когда vcpkg скачивает ресурс, который будет отправлять его в веб-канал NuGet для использования в будущих скачиваниях. Вы заметите, что кэшированные ресурсы именуются в честь файла SHA512 и версии, указанной в asset-source.nuspec
. Если вы хотите иметь более средние имена для пакетов, вы можете изменить шаблон пакета и скрипт поставщика активов с помощью собственной логики.