Testen Ihrer benutzerdefinierten Registrierungsports mit vcpkg mit Azure DevOps
Nachdem Sie eine benutzerdefinierte Registrierung von vcpkg-Ports eingerichtet haben, können Sie eine fortlaufende Integration hinzufügen, um zu überprüfen, ob alle Abhängigkeiten erfolgreich erstellt werden können.
Die Standard vcpkg-Registrierung bei Microsoft/vcpkg wird vom vcpkg-Team mithilfe einer CI-Pipeline (Continuous Integration) mit Azure DevOps getestet. Dadurch wird sichergestellt, dass das Hinzufügen neuer Pakete oder das Aktualisieren vorhandener Pakete die Verbraucher nicht unterbrechen.
In diesem Artikel erfahren Sie, wie Sie eine CI-Umgebung einrichten, um die vcpkg-Ports in Ihrer eigenen Registrierung zu testen.
In diesem Artikel lernen Sie Folgendes:
- Einrichten eines binären Caches und eines Objektcaches für Ihre Azure DevOps-Pipeline
- Einrichten einer Pipeline zum Testen der Ports Ihrer Registrierung
Voraussetzungen
- Azure DevOps-Konto
- Ihre eigene vcpkg Git-Registrierung
- Abschluss der Lernprogramme für binäre Zwischenspeicherung und Ressourcenzwischenspeicherung.
- Wissen über ADO-Pipelines
Einrichten eines binären Caches und eines Objektcaches für Ihre Azure DevOps-Pipelines
Das Erstellen einer großen Sammlung von Ports ist eine teure Aufgabe sowohl in Bezug auf Zeit als auch Rechenleistung. Es wird dringend empfohlen, dass Sie vor der Einbindung von CI für Ihre Ports in das Einrichten eines binären Caches und einen Objektcache für Ihre Azure DevOps-Pipelines investieren.
Ein Binärer Cache bietet den größten Vorteil für CI-Szenarien, indem sichergestellt wird, dass nicht geänderte Pakete nicht auf jeder CI-Ausführung neu erstellt werden. Ein Objektcache Spiegel Artefakte, die während einer Ausführung für Ihre Pakete heruntergeladen wurden, und verwendet die zwischengespeicherten Artefakte in nachfolgenden Ausführungen. Es kann auch helfen, Probleme zu beheben, bei denen das upstream-Repository unzuverlässig ist: z. B. eine fehlerhafte Download-URL.
Ausführliche Anweisungen zum Einrichten dieser Caches finden Sie in unseren Artikeln zur binären Zwischenspeicherung und Zum Zwischenspeichern von Objekten.
Beispiel: Aktivieren der Ressourcen- und binären Zwischenspeicherung in einer Azure DevOps-Pipeline
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"
In diesem Beispiel wird gezeigt, wie Sie einen binären Cache und einen Objektcache in einer Azure DevOps-Pipeline einrichten. Sie sollten diesen Codeausschnitt so anpassen, dass er in der YAML-Datei Ihrer eigenen Pipeline verwendet wird.
Aufschlüsselung dieses Codeausschnitts:
X_VCPKG_ASSET_SOURCES
ist die Umgebungsvariable, die zum Konfigurieren von Objektcaches in vcpkg verwendet wird. In diesem Beispiel ist sie auf x-azurl,https://my.domain.com/container,$(VcpkgAssetCache),readwrite
.
Das x-azurl
Back-End weist vcpkg an, einen Azure Storage-Container als Speicheranbieter zu verwenden. Gefolgt x-azurl
von drei Parametern, die durch Kommas (,
) getrennt sind.
https://my.domain.com/container
ist eine Speichercontainer-URL.$(VcpkgAssetCache)
ist eine Pipelineschlüsselvariable, die ein SAS-Token enthält, um sich beim Speichercontainer zu authentifizieren.readwrite
legt Lese- und Schreibberechtigungen für den Objektcache fest. Dies bedeutet, dass dieser Ressourcencache zum Speichern von Artefakten sowie zum Wiederherstellen von Artefakten verwendet wird.
VCPKG_BINARY_SOURCES
ist die Umgebungsvariable, die zum Konfigurieren von binären Caches in vcpkg verwendet wird. In diesem Beispiel ist sie auf clear;nuget,https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json,readwrite
.
Dadurch wird das NuGet-Back-End für den binären Cache mithilfe des NuGet-Feeds unter https://my.domain.com/vcpkgBinaryCache/nuget/v3/index.json
. Einige zusätzliche Schritte sind möglicherweise erforderlich, um sich bei Ihrem NuGet-Feed zu authentifizieren, lesen Sie das Lernprogramm , um die NuGet-Authentifizierung mit ADO einzurichten.
Die folgende Aufgabe sollte wie in Ihrer Pipeline hinzugefügt werden, um sich bei Ihren Azure Artifacts NuGet-Feeds zu authentifizieren. Diese Aufgabe sollte auch vor jeder Aufgabe ausgeführt werden, die vcpkg umfasst.
- task: NuGetAuthenticate@1
Wenn Sie einen anderen Host für Ihre NuGet-Feeds verwenden, lesen Sie die Dokumentation zum Authentifizieren von NuGet.
Erfahren Sie mehr darüber, wie all diese Arbeiten funktionieren, indem Sie die Dokumentation zu den Features des Objektcaches und binären Caches lesen.
Einrichten einer Pipeline zum Testen der Ports Ihrer Registrierung
Nachdem Sie einen binären Cache und einen Objektcache für Ihre CI-Umgebung eingerichtet haben, besteht der nächste Schritt darin, eine Pipeline einzurichten, um alle Ports Ihrer Registrierung zu testen. Sie können entscheiden, ob diese Pipeline in einem Zeitplan ausgeführt wird oder ob sie durch neue Commits oder Pullanforderungen ausgelöst wird.
Die Standard vcpkg-Registrierung verwendet den vcpkg ci
Befehl, der auf die Anforderungen des vcpkg-Projekts zugeschnitten wurde und nicht für die Erneutes Standard stabil ist oder von Verbrauchern von vcpkg verwendet werden soll. Daher ist es nicht geeignet, ihre eigenen vcpkg-Registrierungen zu testen. Es wird empfohlen, stattdessen die in diesem Artikel beschriebenen Schritte auszuführen.
Verwenden einer Manifestdatei zum Einschließen aller Ports
Anstatt den vcpkg ci
Befehl zu verwenden, empfehlen wir die Verwendung einer Manifestdatei zum Erstellen eines Builds, der von allen Paketen in Ihrer Registrierung abhängt.
Im folgenden Beispiel wird eine Manifestdatei erstellt, um alle Ports in einer hypothetischen vcpkg-Registrierung zu testen. Ersetzen Sie die Liste der Abhängigkeiten, um alle Ports in Ihre Registrierung einzuschließen, und platzieren Sie sie im Stammverzeichnis Ihres Repositorys.
vcpkg.json
{
"dependencies": [
"beicode",
"beison"
]
}
Ihre eigenen Ports verfügen möglicherweise über Abhängigkeiten von der Standard vcpkg-Registrierung oder anderen Drittanbieterregistrierungen, in diesem Fall müssen Sie diese Registrierungen in einer vcpkg-configuration.json
Datei hinzufügen. Während vcpkg Pakete aus der Standard Registrierung ohne zusätzliche Konfiguration auflösen kann, wird dringend empfohlen, sie explizit zur Registrierungsliste für Versionssteuerungszwecke hinzuzufügen.
Dadurch wird sichergestellt, dass Sie die Kontrolle über die Gruppe der zugrunde liegenden Portversionen haben. Sehen Sie sich den vcpkg x-update-baseline
Befehl an, um den Basisplan Ihrer Registrierungen zu verwalten.
vcpkg-configuration.json
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "42bb0d9e8d4cf33485afb9ee2229150f79f61a1f",
"packages": "*"
}
]
}
Lesen Sie die vcpkg.json
Artikel und vcpkg-configuration.json
referenzieren Sie, um mehr zu erfahren. Und in der Manifestmodusdokumentation erfahren Sie, wie diese zusammenarbeiten.
Erwerben von vcpkg in Ihrer Azure DevOps-Pipeline
Wenn Sie vcpkg als Untermodul in Ihrem Projekt verwenden, können Sie das vcpkg-Repository im Schritt abrufen, um Ihr eigenes Projekt wie unten dargestellt auschecken zu können.
steps:
- checkout: self
submodules: true
Andernfalls müssen Sie vcpkg erwerben, um es in Ihrer Pipeline zu verwenden. Fügen Sie die folgenden Schritte hinzu, um das vcpkg-Repository zu klonen.
resources:
repositories:
- repository: vcpkgRepo
type: github
name: Microsoft/vcpkg
endpoint: MyGitHubServiceConnection
steps:
- checkout: vcpkgRepo
Um das vcpkg-Repository zu klonen, müssen Sie eine Repositoryressource für Ihre Pipeline definieren. Der folgende Codeausschnitt zeigt, wie Sie das vcpkg-Repository als Ressource hinzufügen, Sie müssen eine Dienst-Verbinden ion einrichten, um Ihre Pipeline mit GitHub zu verbinden.
Nachdem Sie das vcpkg-Repository entweder als Untermodul oder durch Klonen von GitHub ausgecheckt haben, müssen Sie das Bootstrap-Skript von vcpkg ausführen.
steps:
- script: vcpkg/bootstrap-vcpkg.sh
Nach Abschluss dieser Schritte sollten Sie über eine vcpkg-ausführbare Datei verfügen, mit der sie arbeiten kann.
Ausführen der vcpkg-Installation zum Erstellen Ihrer Ports
Der letzte Schritt besteht darin, vcpkg anweisen, alle Ports zu erstellen. Möglicherweise haben Sie bemerkt, dass Ihre eigene Registrierung bei den vcpkg-configuration.json
oben erstellten Schritten nicht vorhanden ist. Der Grund dafür ist, dass Sie die Version der Ports testen möchten, die sich derzeit im Arbeitsverzeichnis befinden, im Gegensatz zu den versionen, die in Ihrem Repository veröffentlicht wurden.
Zu diesem Zweck müssen Sie die Ports Ihrer Registrierung als Überlagerungsports hinzufügen, indem Sie die VCPKG_OVERLAY_PORTS
Umgebungsvariable auf das ports
Verzeichnis Ihrer Registrierung festlegen.
Der folgende Codeausschnitt zeigt, wie Sie die Ports Ihrer Registrierung als Überlagerungsports einrichten und im Manifestmodus ausgeführt werden vcpkg install
, um alle benutzerdefinierten Ports zu installieren.
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 diesem Beispiel wird davon ausgegangen, dass die vcpkg.json
Datei im Stammverzeichnis des Repositorys Ihrer Registrierung erstellt wird und dass das vcpkg-Repository als Untermodul hinzugefügt wird.
Das Zusammensetzen der YAML-Datei Ihrer Pipelines sollte etwa wie folgt aussehen:
.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"
Dies ist die grundlegende Struktur für eine CI-Pipeline zum Testen der Ports Ihrer Registrierung. Möglicherweise benötigen Sie zusätzliche Arbeit, um sich bei privaten Repositorys oder ihrem NuGet-Feed zu authentifizieren.
Sie können auch Schritte hinzufügen, um die Generierung der vcpkg.json
Datei zu automatisieren, oder einen Schritt, der überprüft, ob die neu zu Ihrer Registrierung hinzugefügten Ports nicht aus den Tests herausgelassen werden.
Nächste Schritte
Die folgenden Artikel können bei der Einrichtung einer CI-Umgebung hilfreich sein.