Freigeben über


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

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.