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 – Konfigurieren der Authentifizierung für GitHub-Pakete

In diesem Lernprogramm werden die von GitHub Actions bereitgestellten integrierten GITHUB_TOKEN Aktionen verwendet. Um den Lese- und Schreibzugriff auf GitHub-Pakete zu aktivieren, fügen Sie ihrem Workflow den folgenden permissions Block hinzu:

permissions:
  packages: write

Dadurch werden die GITHUB_TOKEN erforderlichen packages:write Berechtigungen gewährt packages:read . Die Verwendung GITHUB_TOKEN hat mehrere Vorteile:

  • Es ist nicht erforderlich, zusätzliche geheime Schlüssel zu erstellen oder zu verwalten.
  • Funktioniert automatisch für Pullanforderungen von Forks (mit schreibgeschütztem Zugriff)
  • Bereich für das spezifische Repository und die Ausführung des Workflows

Hinweis

Alternativ können Sie ein klassisches persönliches Zugriffstoken (PERSONAL Access Token, PAT) verwenden, wenn Sie repositoryübergreifenden Zugriff oder andere erweiterte Szenarien benötigen. Folgen Sie den Anweisungen von GitHub, um ein klassisches persönliches Zugriffstoken (PERSONAL Access Token, PAT) mit packages:write und packages:read Berechtigungen zu generieren, und fügen Sie es dann als geheimen Schlüssel in Ihrem Repository hinzu und verwenden Sie ${{ secrets.YOUR_PAT_NAME }} es anstelle ${{ secrets.GITHUB_TOKEN }} der folgenden Beispiele.

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 der Workflowdatei den folgenden Schritt hinzu, um die NuGet-Quelle mit Ihrem GITHUB_TOKEN:

permissions:
  packages: write

jobs:
  build:
    runs-on: windows-latest
    steps:
    # ... other steps ...
    - 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.GITHUB_TOKEN }}"
        .$(${{ env.VCPKG_EXE }} fetch nuget) `
          setapikey "${{ secrets.GITHUB_TOKEN }}" `
          -Source "${{ env.FEED_URL }}"

Unter Linux müssen mono Sie ausgeführt werden nuget.exe. Sie können den Systempaket-Manager Ihrer Verteilung installieren mono :

apt install mono-complete

Beachten Sie, dass ubuntu-22.04 GitHub Actions-Runner mit mono vorinstallierten, aber beginnend mit ubuntu-24.04 (derzeit ubuntu-latest verweist) mono nicht mehr vorinstalliert sind.

permissions:
  packages: write

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    # ... other steps ...
    - 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.GITHUB_TOKEN }}"
        mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
          setapikey "${{ secrets.GITHUB_TOKEN }}" \
          -Source "${{ env.FEED_URL }}"

Hinweis

Die von GitHub-Aktionen bereitgestellte Standardeinstellung GITHUB_TOKEN verfügt nicht über die erforderlichen Berechtigungen zum Hochladen oder Herunterladen zwischengespeicherter Pakete.
Um das Zwischenspeichern von Paketen auf GitHub-Pakete zu aktivieren, verwenden Sie stattdessen ein PERSÖNLICHEs Zugriffstoken (PERSONAL Access Token, PAT), und stellen Sie sicher, dass es die folgenden Bereiche enthält:

  • packages:read
  • packages:write

Speichern Sie den PAT als Repositoryschlüssel (z. B VCPKG_PAT_TOKEN. ) und verweisen Sie darauf in Ihrem Workflow:

-Password: "${{ secrets.VCPKG_PAT_TOKEN }}"
-Source: "${{ env.FEED_URL }}"

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: