Udostępnij za pośrednictwem


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łamy asset-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.