Freigeben über


Lernprogramm: Einrichten eines vcpkg-Binärcaches mithilfe von GitHub-Paketen in einem GitHub-Aktionsworkflow

Hinweis

In diesem Lernprogramm werden NuGet-Feeds verwendet, die in GitHub-Paketen gehostet werden, aber die gleichen Anweisungen können für andere NuGet-Feedanbieter verwendet werden, z. B. Azure Artifacts, mit minimalen Änderungen.

GitHub Packages bietet ein bequemes Repository für Ihre NuGet-Binärpakete, die von vcpkg erstellt werden. In diesem Lernprogramm zeigen wir Ihnen, wie Sie einen binären Cache in Ihrem GitHub-Aktionen-Workflow einrichten, der GitHub-Pakete als Remotespeicher verwendet.

In diesem Tutorial lernen Sie Folgendes:

Voraussetzungen

  • Ein Code-Editor
  • Ein GitHub-Repository mit GitHub-Aktionen
  • Ein Projekt mit vcpkg

1 – Bereitstellen eines persönlichen GitHub-Zugriffstokens

Befolgen Sie die Anweisungen von GitHub, um ein klassisches PERSÖNLICHEs Zugriffstoken (PAT) für Ihr Repository zu generieren, und stellen Sie sicher, dass Sie ihm die packages:write berechtigungen erteilenpackages:read.

Fügen Sie dann Ihren GitHub PAT als geheimen Schlüssel hinzu, der in den GitHub Action-Workflows Ihres Repositorys verfügbar ist. In diesem Lernprogramm wird davon ausgegangen, dass Sie Ihren geheimen Schlüssel als GH_PACKAGES_TOKEN.

Der integrierte PAT, der von nur der GITHUB_TOKEN packages:read Berechtigung bereitgestellt wird, können Sie es verwenden, wenn Sie beabsichtigen, einen schreibgeschützten Binärcache in Ihrem Workflow zu haben.

2 – Bootstrap vcpkg

vcpkg erwirbt eine eigene Kopie der ausführbaren Datei, die nuget.exe sie bei binären Zwischenspeicherungsvorgängen verwendet. In diesem Lernprogramm wird das vcpkg-erworbene Lernprogramm verwendet nuget.exe.

Fügen Sie einen Schritt zum Bootstrap vcpkg in Ihrem Workflow hinzu:

- name: Bootstrap vcpkg
  shell: pwsh
  run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.bat
- name: Bootstrap vcpkg
  shell: bash
  run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh

Möglicherweise müssen Sie den Speicherort des vcpkg-Bootstrap-Skripts durch den richtigen für Ihren Workflow ersetzen. In diesem Lernprogramm wird davon ausgegangen, dass sich vcpkg in einem vcpkg Ordner im Stammverzeichnis des Repositorys befindet.

3 – Einrichten erforderlicher Umgebungsvariablen

Fügen Sie ihrer Workflowdatei die folgenden Umgebungsvariablen hinzu (ersetzen Sie <OWNER> sie durch den Benutzernamen oder den Namen Ihrer Organisation von GitHub):

env: 
  USERNAME: <OWNER>
  VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
  FEED_URL: https://nuget.pkg.github.com/<OWNER>/index.json
  VCPKG_BINARY_SOURCES: "clear;nuget,https://nuget.pkg.github.com/<OWNER>/index.json,readwrite"

Möglicherweise müssen Sie den Wert VCPKG_EXE durch den Speicherort der vcpkg-ausführbaren Datei ersetzen, die im Bootstrap vcpkg-Schritt generiert wurde.

In diesem Schritt konfigurieren VCPKG_BINARY_SOURCES Sie die Verwendung Ihres GitHub-Paketfeeds als binäre Zwischenspeicherungsquelle, lesen Sie den Referenz zur binären Zwischenspeicherung, um mehr zu erfahren.

4 – Hinzufügen von GitHub-Paketen als NuGet-Quelle

Der vcpkg fetch nuget Befehl gibt den Speicherort des von vcpkg erworbenen Vcpkg-Pakets nuget.exeaus, wobei die ausführbare Datei bei Bedarf heruntergeladen wird.

Fügen Sie den folgenden Schritt in ihrer GitHub Actions-Workflowdatei hinzu:

- name: Add NuGet sources
  shell: pwsh
  run: |
    .$(${{ env.VCPKG_EXE }} fetch nuget) `
      sources add `
      -Source "${{ env.FEED_URL }}" `
      -StorePasswordInClearText `
      -Name GitHubPackages `
      -UserName "${{ env.USERNAME }}" `
      -Password "${{ secrets.GH_PACKAGES_TOKEN }}"
    .$(${{ env.VCPKG_EXE }} fetch nuget) `
      setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" `
      -Source "${{ env.FEED_URL }}"

Unter Linux müssen mono Sie ausgeführt werden nuget.exe. GitHub Actions-Läufer mit Ubuntu sind mono vorinstalliert. Andernfalls können Sie den Systempaket-Manager Ihrer Verteilung verwenden mono .

- name: Add NuGet sources
  shell: bash
  env: 
    VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
    USERNAME: <OWNER>
    FEED_URL: https://nuget.pkg.github.com/<OWNER>/index.json
  run: |
    mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
      sources add \
      -Source "${{ env.FEED_URL }}" \
      -StorePasswordInClearText \
      -Name GitHubPackages \
      -UserName "${{ env.USERNAME }}" \
      -Password "${{ secrets.GH_PACKAGES_TOKEN }}"
    mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
      setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" \
      -Source "${{ env.FEED_URL }}"

Möglicherweise müssen Sie durch den richtigen geheimen Namen ersetzen GH_PACKAGES_TOKEN , den Sie dem PAT gegeben haben, der im Schritt "GitHub Personal Access Token" generiert wurde.

Das war’s! vcpkg lädt jetzt Pakete aus Ihrem NuGet-Feed hoch oder stellt sie wieder her, der in GitHub-Paketen in Ihrem GitHub Actions-Workflow gehostet wird.

Nächste Schritte

Hier sind weitere Aufgaben, die Sie als Nächstes ausprobieren können: