Testare le porte del Registro di sistema personalizzate usando vcpkg con Azure DevOps
Dopo aver configurato un registro personalizzato di porte vcpkg, è possibile aggiungere un'integrazione continua per verificare che tutte le dipendenze possano essere compilate correttamente.
Il registro vcpkg principale in Microsoft/vcpkg viene testato dal team vcpkg usando una pipeline di integrazione continua (CI) con Azure DevOps. Ciò garantisce che l'aggiunta di nuovi pacchetti o l'aggiornamento di quelli esistenti non interrompa i consumer.
In questo articolo viene illustrato come configurare un ambiente CI per testare le porte vcpkg nel proprio registro.
In questo articolo si apprenderà come:
- Configurare una cache binaria e una cache degli asset per la pipeline di Azure DevOps
- Configurare una pipeline per testare le porte del Registro di sistema
Prerequisiti
- Un account Azure DevOps
- Registro Git vcpkg personalizzato
- Completamento delle esercitazioni sulla memorizzazione nella cache binaria e nella memorizzazione nella cache degli asset.
- Informazioni sulle pipeline ADO
Configurare una cache binaria e una cache degli asset per le pipeline di Azure DevOps
La creazione di una grande raccolta di porte è un'attività costosa sia in termini di tempo che di potenza di calcolo. È consigliabile che prima di coinvolgere ci per le porte, si investe nella configurazione di una cache binaria e di una cache di asset per le pipeline di Azure DevOps.
Una cache binaria offre il massimo vantaggio per gli scenari di integrazione continua, assicurandosi che i pacchetti non modificati non vengano ricompilati in ogni esecuzione ci. Una cache degli asset rispecchia gli artefatti scaricati per i pacchetti durante un'esecuzione e usa gli artefatti memorizzati nella cache nelle esecuzioni successive. Può anche aiutare a mitigare i problemi in cui il repository upstream non è affidabile, ad esempio un URL di download interrotto.
Per istruzioni dettagliate su come configurare queste cache, leggere gli articoli sulla memorizzazione nella cache binaria e sulla memorizzazione nella cache degli asset.
Esempio: Abilitare la memorizzazione nella cache di asset e binari in una pipeline di Azure DevOps
steps:
- task: NuGetAuthenticate@1
- script: $(Build.Repository.LocalPath)/vcpkg/vcpkg install --triplet=x64-windows
displayName: some vcpkg task
env:
X_VCPKG_ASSET_SOURCES: "clear;x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite"
VCPKG_BINARY_SOURCES: "clear;nuget,https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json,readwrite"
Questo esempio illustra come configurare una cache binaria e una cache degli asset in una pipeline di Azure DevOps. È consigliabile adattare questo frammento di codice da usare nel file YAML della pipeline.
Suddivisione di questo frammento di codice:
X_VCPKG_ASSET_SOURCES
è la variabile di ambiente usata per configurare le cache degli asset in vcpkg. In questo esempio viene impostato su x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite
.
Il x-azurl
back-end indica a vcpkg di usare un contenitore Archiviazione di Azure come provider di archiviazione. l'oggetto x-azurl
è seguito da tre parametri separati da virgole (,
).
https://my.domain.com/container
è un URL del contenitore di archiviazione.$(VcpkgAssetCache)
è una variabile privata della pipeline che contiene un token di firma di accesso condiviso per l'autenticazione nel contenitore di archiviazione.readwrite
imposta le autorizzazioni di lettura e scrittura per la cache degli asset. Ciò significa che questa cache degli asset viene usata per archiviare gli artefatti e per ripristinare gli artefatti da esso.
VCPKG_BINARY_SOURCES
è la variabile di ambiente usata per configurare le cache binarie in vcpkg. In questo esempio viene impostato su clear;nuget,https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json,readwrite
.
In questo modo viene abilitato il back-end NuGet per la cache binaria usando il feed NuGet in https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json
. Potrebbero essere necessari alcuni passaggi aggiuntivi per eseguire l'autenticazione nel feed NuGet, leggere l'esercitazione per istruzioni per configurare l'autenticazione NuGet con ADO.
L'attività seguente deve essere aggiunta così come è nella pipeline per l'autenticazione ai feed NuGet di Azure Artifacts. Questa attività deve essere eseguita anche prima di qualsiasi attività che coinvolge vcpkg.
- task: NuGetAuthenticate@1
Se si usa un host diverso per i feed NuGet, leggere la documentazione su come autenticare NuGet.
Per altre informazioni sul funzionamento di tutti questi elementi, leggere la documentazione sulle funzionalità della cache degli asset e della cache binaria.
Configurare una pipeline per testare le porte del Registro di sistema
Dopo aver configurato una cache binaria e una cache degli asset per l'ambiente CI, il passaggio successivo consiste nel configurare una pipeline per testare tutte le porte del Registro di sistema. È possibile decidere se questa pipeline viene eseguita in base a una pianificazione o se viene attivata da nuovi commit o richieste pull.
Il registro vcpkg principale usa il vcpkg ci
comando , che è stato personalizzato in base alle esigenze del progetto vcpkg e non è destinato a rimanere stabile o essere usato dai consumer di vcpkg. Di conseguenza, non è adatto per il test dei registri vcpkg personalizzati. È consigliabile seguire invece i passaggi descritti in questo articolo.
Usare un file manifesto per includere tutte le porte
Anziché usare il vcpkg ci
comando , è consigliabile usare un file manifesto per creare una compilazione che dipende da tutti i pacchetti nel Registro di sistema.
Nell'esempio seguente viene creato un file manifesto per testare tutte le porte in un registro vcpkg ipotetico. Sostituire l'elenco delle dipendenze per includere tutte le porte nel Registro di sistema e inserirle nella radice del repository.
vcpkg.json
{
"dependencies": [
"beicode",
"beison"
]
}
Le porte personalizzate possono avere dipendenze dal registro vcpkg principale o da altri registri di terze parti, nel qual caso è necessario aggiungere tali registri in un vcpkg-configuration.json
file. Anche se vcpkg può risolvere i pacchetti dal Registro di sistema principale senza configurazione aggiuntiva, è consigliabile aggiungerlo in modo esplicito all'elenco registri per scopi di controllo della versione.
In questo modo si garantisce il controllo del set di versioni delle porte sottostanti. Consultare il vcpkg x-update-baseline
comando per facilitare la gestione della baseline dei registri.
vcpkg-configuration.json
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "42bb0d9e8d4cf33485afb9ee2229150f79f61a1f",
"packages": "*"
}
]
}
Per altre informazioni, vedere gli vcpkg.json
articoli di riferimento e vcpkg-configuration.json
. E la documentazione relativa alla modalità manifesto per informazioni su come interagiscono.
Acquisire vcpkg nella pipeline di Azure DevOps
Se si usa vcpkg come modulo secondario nel progetto, è possibile ottenere il repository vcpkg nel passaggio per estrarre il proprio progetto, come illustrato di seguito.
steps:
- checkout: self
submodules: true
In caso contrario, è necessario acquisire vcpkg per usarlo nella pipeline. Aggiungere i passaggi seguenti per clonare il repository vcpkg.
resources:
repositories:
- repository: vcpkgRepo
type: github
name: Microsoft/vcpkg
endpoint: MyGitHubServiceConnection
steps:
- checkout: vcpkgRepo
Per clonare il repository vcpkg è necessario definire una risorsa del repository per la pipeline. Il frammento di codice seguente illustra come aggiungere il repository vcpkg come risorsa, è necessario configurare un'Connessione del servizio per connettere la pipeline a GitHub.
Dopo aver estratto il repository vcpkg come modulo secondario o clonandolo da GitHub, è necessario eseguire lo script bootstrap di vcpkg.
steps:
- script: vcpkg/bootstrap-vcpkg.sh
Al termine di questi passaggi, è necessario avere un eseguibile vcpkg da usare.
Eseguire vcpkg install per compilare le porte
L'ultimo passaggio consiste nell'indicare a vcpkg di compilare tutte le porte. Si potrebbe aver notato che il proprio registro è assente dal vcpkg-configuration.json
creato un paio di passaggi precedenti. Il motivo è che si vuole testare la versione delle porte attualmente nella directory di lavoro anziché le versioni pubblicate nel repository.
A tale scopo, è necessario aggiungere le porte del Registro di sistema come porte di sovrapposizione impostando la variabile di ambiente sulla VCPKG_OVERLAY_PORTS
directory del Registro di ports
sistema.
Il frammento di codice seguente illustra come configurare le porte del Registro di sistema come porte di sovrapposizione ed è in esecuzione vcpkg install
in modalità manifesto per installare tutte le porte personalizzate.
steps:
- script: $(Build.Repository.LocalPath)/vcpkg/vcpkg install
env:
X_VCPKG_ASSET_SOURCES: "clear;x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite"
VCPKG_BINARY_SOURCES: "clear;nuget,https://my.domain.com/demoBinaries/nuget/v3/index.json,readwrite"
VCPKG_OVERLAY_PORTS: "$(Build.Repository.LocalPath)/ports"
In questo esempio si presuppone che il vcpkg.json
file venga creato nella radice del repository del Registro di sistema e che il repository vcpkg venga aggiunto come modulo secondario.
L'insieme del file YAML delle pipeline dovrebbe essere simile al seguente:
.azure-pipelines/test-ports.yml
trigger:
- main
pool:
vmImage: windows-latest
steps:
- checkout: self
submodules: true
- task: NuGetAuthenticate@1
- script: $(Build.Repository.LocalPath)/vcpkg/bootstrap-vcpkg.bat
displayName: Bootstrap vcpkg
- script: $(Build.Repository.LocalPath)/vcpkg/vcpkg install --triplet=x64-windows
env:
X_VCPKG_ASSET_SOURCES: "clear;x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite"
VCPKG_BINARY_SOURCES: "clear;nuget,https://my.domain.com/demoBinaries/nuget/v3/index.json,readwrite"
VCPKG_OVERLAY_PORTS: "$(Build.Repository.LocalPath)/ports"
Si tratta della struttura di base per una pipeline CI per testare le porte del Registro di sistema. Potrebbe essere necessario eseguire alcune operazioni aggiuntive per l'autenticazione nei repository privati o nel feed NuGet.
È anche possibile aggiungere passaggi per automatizzare la generazione del vcpkg.json
file o un passaggio che verifica che le porte appena aggiunte al Registro di sistema non vengano interrotte dai test.
Passaggi successivi
Gli articoli seguenti possono essere utili per la configurazione di un ambiente CI.
- Eseguire l'autenticazione in registri Git privati
- Configurare una cache binaria usando la cache NuGet
- Configurare una cache degli asset
- Informazioni di riferimento sulla cache binaria
- Informazioni di riferimento sulla cache degli asset
- Porte sovrapposte
- Modalità manifesto
vcpkg.json
vcpkg-configuration.json
- Variabili di ambiente di configurazione vcpkg