Creazione di un'origine di memorizzazione nella cache degli asset x-script per NuGet
Nota
Questa sezione illustra una funzionalità sperimentale di vcpkg che può cambiare o essere rimossa in qualsiasi momento.
In questo esempio verrà configurato un feed NuGet come origine di memorizzazione nella cache degli asset usando uno script per ripristinare ed eseguire il push degli artefatti.
Prerequisiti
- nuget.exe
- Feed di pacchetti NuGet
Passaggio 1: Creare asset-source.nuspec
Creare un modello di specifica del pacchetto NuGet con il contenuto seguente:
<?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>
Passaggio 2: Creare uno script del provider di asset
A questo punto è necessario creare uno script che scarica i pacchetti dal feed NuGet, se disponibile e carica i pacchetti mancanti nel feed, se non lo sono.
Creare asset-provider.bat
con il contenuto fornito di seguito, assicurarsi di sostituire l'URL e il percorso asset-source.nuspec
del feed NuGet con i valori corretti nel sistema.
@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
)
Passaggio 3: Configurare le origini di memorizzazione nella cache degli asset
Dopo aver creato lo script del provider di asset, è necessario indicare a vcpkg di usarlo come origine di memorizzazione nella cache degli asset. A tale scopo, impostare le variabili di ambiente seguenti:
$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"
NOTA: assicurarsi di sostituire i percorsi segnaposto per lo script del provider di asset e nuget.exe con i percorsi corretti nel sistema.
X_VCPKG_ASSET_SOURCES
è la variabile di ambiente usata per impostare le origini di memorizzazione nella cache degli asset da usare per vcpkg. In questo esempio vengono impostati i valori seguenti:
clear
ottiene l'eliminazione della posizione di memorizzazione nella cache degli asset predefinita.x-script
aggiunge lo script come origine di memorizzazione nella cache degli asset, il primo parametro indica che la riga di comando vcpkg deve richiamare, in questo esempio viene chiamato loasset-provider.bat
script e vengono inoltrati alcuni parametri obbligatori.x-block-origin
forza tutti i download a provenire dalle origini di memorizzazione nella cache degli asset configurate.
VCPKG_KEEP_ENV_VARS
viene usato per inoltrare le variabili di ambiente all'ambiente di compilazione di vcpkg. Durante le compilazioni vcpkg crea un ambiente pulito, aggiungendo NUGET
per VCPKG_KEEP_ENV_VARS
assicurarsi che il percorso eseguibile NuGet venga inoltrato durante le compilazioni.
Dopo che tutto è stato configurato correttamente, ogni volta che vcpkg scarica un asset, lo caricherà nel feed NuGet da usare nei download futuri. Si noterà che gli asset memorizzati nella cache sono denominati in base al file SHA512 e alla versione specificata in asset-source.nuspec
. Se si vogliono avere nomi più mediosi per i pacchetti, è possibile modificare il modello di pacchetto e lo script del provider di asset con la propria logica.