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.exe
aus, 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: