Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:readpackages: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: