Freigeben über


Erstellen einer X-Script-Objektzwischenspeicherungsquelle für NuGet

Hinweis

In diesem Abschnitt wird ein experimentelles Feature von vcpkg behandelt, das jederzeit geändert oder entfernt werden kann.

In diesem Beispiel richten wir einen NuGet-Feed als Objektzwischenspeicherungsquelle ein, indem ein Skript zum Wiederherstellen und Pushen von Artefakten verwendet wird.

Voraussetzungen

  • nuget.exe
  • Ein NuGet-Paketfeed

Schritt 1: Erstellen asset-source.nuspec

Erstellen Sie eine NuGet-Paketspezifikationsvorlage mit dem folgenden Inhalt:

<?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>

Schritt 2: Erstellen eines Objektanbieterskripts

Jetzt müssen Sie ein Skript erstellen, das Pakete aus dem NuGet-Feed herunterlädt, falls verfügbar, und lädt fehlende Pakete in Ihren Feed hoch, wenn sie nicht vorhanden sind.

Erstellen Sie asset-provider.bat mit den unten angegebenen Inhalten, stellen Sie sicher, dass Sie die NuGet-Feed-URL und den Pfad durch asset-source.nuspec ihre richtigen Werte in Ihrem System ersetzen.

@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
)

Schritt 3: Konfigurieren der Ressourcenzwischenspeicherungsquellen

Nachdem Sie nun das Objektanbieterskript erstellt haben, müssen Sie vcpkg anweisen, es als Ressourcenzwischenspeicherungsquelle zu verwenden. Legen Sie dazu die folgenden Umgebungsvariablen fest:

$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"

HINWEIS: Ersetzen Sie die Platzhalterpfade zum Objektanbieterskript und nuget.exe durch die richtigen Pfade in Ihrem System.

X_VCPKG_ASSET_SOURCES ist die Umgebungsvariable, die zum Festlegen von Ressourcenzwischenspeicherungsquellen für vcpkg verwendet wird. In diesem Beispiel legen wir die folgenden Werte fest:

  • clear entfernt den Speicherort für das Zwischenspeichern von Standardobjekten.
  • x-script fügt Ihr Skript als Zwischenspeicherungsquelle für Ressourcen hinzu, der erste Parameter gibt an, dass die Befehlszeile vcpkg aufgerufen werden soll. In diesem Beispiel rufen wir das asset-provider.bat Skript auf und leiten einige erforderliche Parameter weiter.
  • x-block-origin erzwingt, dass alle Downloads aus den konfigurierten Ressourcenzwischenspeicherungsquellen stammen.

VCPKG_KEEP_ENV_VARS wird verwendet, um Umgebungsvariablen an die Buildumgebung von vcpkg weiterzuleiten. Während der Builds erstellt vcpkg eine sauber Umgebung, indem wir hinzufügen NUGETVCPKG_KEEP_ENV_VARS, dass der ausführbare NuGet-Speicherort während der Builds weitergeleitet wird.

Sobald alles ordnungsgemäß eingerichtet wurde, lädt vcpkg jedes Mal, wenn vcpkg ein Objekt herunterlädt, es in Ihren NuGet-Feed hoch, um es in zukünftigen Downloads zu verwenden. Sie werden feststellen, dass zwischengespeicherte Objekte nach ihrer Datei SHA512 und der in asset-source.nuspecdieser Version angegebenen Version benannt sind. Wenn Sie für Ihre Pakete mehr mittelwertige Namen haben möchten, können Sie das Paketvorlagen- und Objektanbieterskript mit Ihrer eigenen Logik ändern.