Tworzenie źródła elementu zawartości x-script Buforowanie dla narzędzia NuGet
Uwaga
W tej sekcji opisano eksperymentalną funkcję vcpkg, która może ulec zmianie lub zostać usunięta w dowolnym momencie.
W tym przykładzie skonfigurujemy źródło zawartości NuGet jako źródło buforowania zasobów przy użyciu skryptu w celu przywrócenia i wypychania artefaktów.
Wymagania wstępne
- nuget.exe
- Źródło danych pakietów NuGet
Krok 1. Tworzenie asset-source.nuspec
Utwórz szablon specyfikacji pakietu NuGet z następującą zawartością:
<?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>
Krok 2. Tworzenie skryptu dostawcy zasobów
Teraz musisz utworzyć skrypt, który pobiera pakiety ze źródła danych NuGet, jeśli jest dostępny i przekazuje brakujące pakiety do źródła danych, jeśli nie są.
Utwórz asset-provider.bat
zawartość podaną poniżej, zastąp adres URL kanału informacyjnego NuGet i ścieżką do asset-source.nuspec
jej prawidłowych wartości w systemie.
@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
)
Krok 3. Konfigurowanie źródeł buforowania zasobów
Po utworzeniu skryptu dostawcy zasobów należy poinstruować program vcpkg, aby używał go jako źródła buforowania zasobów. W tym celu ustaw następujące zmienne środowiskowe:
$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"
UWAGA: Pamiętaj, aby zastąpić ścieżki symboli zastępczych do skryptu dostawcy zasobów i pliku nuget.exe poprawnymi ścieżkami w systemie.
X_VCPKG_ASSET_SOURCES
to zmienna środowiskowa używana do ustawiania źródeł buforowania zasobów dla programu vcpkg do użycia. W tym przykładzie ustawiliśmy następujące wartości:
clear
usuwa domyślną lokalizację buforowania zasobów.x-script
Dodaje skrypt jako źródło buforowania zasobów, pierwszy parametr wskazuje, że wiersz polecenia vcpkg powinien zostać wywołany, w tym przykładzie wywołamyasset-provider.bat
skrypt i przekażemy kilka wymaganych parametrów.x-block-origin
wymusza pobranie wszystkich plików ze skonfigurowanych źródeł buforowania zasobów.
VCPKG_KEEP_ENV_VARS
służy do przekazywania zmiennych środowiskowych do środowiska kompilacji vcpkg. Podczas kompilacji narzędzie vcpkg tworzy czyste środowisko, dodając NUGET
, że VCPKG_KEEP_ENV_VARS
lokalizacja pliku wykonywalnego NuGet jest przekazywana podczas kompilacji.
Po poprawnym skonfigurowaniu wszystkich elementów zawartości podczas pobierania elementu zawartości przez program vcpkg przekaże go do kanału informacyjnego NuGet do użycia w przyszłych plikach do pobrania. Zauważysz, że buforowane zasoby są nazwane po ich pliku SHA512 i wersji określonej w pliku asset-source.nuspec
. Jeśli chcesz mieć bardziej średnie nazwy pakietów, możesz zmodyfikować szablon pakietu i skrypt dostawcy zasobów przy użyciu własnej logiki.