Megosztás:


Oktatóanyag: Vcpkg bináris gyorsítótár beállítása GitHub Packages használatával GitHub Actions-munkafolyamatban

Megjegyzés:

Ez az oktatóanyag a GitHub Packagesben üzemeltetett NuGet-hírcsatornákat használja, de ugyanezeket az utasításokat más NuGet-hírcsatornákhoz is használhatja, például: Azure Artifacts, minimális módosításokkal.

A GitHub Packages kényelmes adattárat kínál a vcpkg által létrehozott NuGet bináris csomagokhoz. Ebben az oktatóanyagban bemutatjuk, hogyan állíthat be bináris gyorsítótárat a GitHub Actions-munkafolyamatban, amely a GitHub Packageset használja távoli tárolóként.

Ebben az oktatóanyagban megtanulhatja, hogyan:

Előfeltételek

  • Kódszerkesztő
  • GitHub-adattár a GitHub Actions használatával
  • Projekt vcpkg használatával

1 – Hitelesítés konfigurálása a GitHub Packageshez

Ez az oktatóanyag a GitHub Actions által biztosított beépített GITHUB_TOKEN megoldást használja. A GitHub Packages olvasási és írási hozzáférésének engedélyezéséhez adja hozzá a következő permissions blokkot a munkafolyamathoz:

permissions:
  packages: write

Ez biztosítja a GITHUB_TOKEN szükséges packages:write és packages:read engedélyeket. A használatnak GITHUB_TOKEN számos előnye van:

  • Nincs szükség további titkos kódok létrehozására vagy kezelésére
  • Automatikusan működik az elágazásokból érkező lekéréses kérelmek esetében (írásvédett hozzáféréssel)
  • Hatókör az adott adattárra és munkafolyamat-futtatásra

Megjegyzés:

Alternatív megoldásként használhat klasszikus személyes hozzáférési jogkivonatot (PAT), ha tárházközi hozzáférésre vagy más speciális forgatókönyvekre van szüksége. Kövesse a GitHub utasításait egy klasszikus személyes hozzáférési jogkivonat (PAT) létrehozásához és packages:write engedélyekkel való packages:read létrehozásához, majd adja hozzá titkos kódként az adattárhoz, és használja ${{ secrets.YOUR_PAT_NAME }} az alábbi példák helyett${{ secrets.GITHUB_TOKEN }}.

2 – Bootstrap vcpkg

A vcpkg megszerzi a nuget.exe végrehajtható fájl saját példányát, amelyet bináris gyorsítótárazási műveletek során használ. Ez az oktatóanyag a vcpkg által beszerzett nuget.exe.

Adjon hozzá egy lépést a vcpkg rendszerindításához a munkafolyamatban:

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

Előfordulhat, hogy a vcpkg bootstrap szkript helyét a megfelelőre kell cserélnie a munkafolyamathoz. Ez az oktatóanyag feltételezi, hogy a vcpkg az adattár gyökerében található mappában vcpkg található.

3 – A szükséges környezeti változók beállítása

Adja hozzá a következő környezeti változókat a munkafolyamat-fájlhoz (cserélje le <OWNER> a GitHub felhasználónevét vagy szervezetét):

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"

Előfordulhat, hogy a VCPKG_EXE lépésben létrehozott vcpkg végrehajtható fájl helyével kell helyettesítenie a értékét.

Ebben a lépésben úgy konfigurálja VCPKG_BINARY_SOURCES , hogy a GitHub Packages-hírcsatornát bináris gyorsítótárazási forrásként használja, további információért olvassa el a bináris gyorsítótárazási hivatkozást .

4 – GitHub-csomagok hozzáadása NuGet-forrásként

A vcpkg fetch nuget parancs kimenetként adja ki a vcpkg által beszerzett nuget.exehely helyét, és szükség esetén letölti a végrehajtható fájlt.

Adja hozzá a következő lépést a munkafolyamat-fájlhoz, hogy konfigurálja a NuGet-forrást a következővel 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 }}"

Linuxon használnia kell mono a nuget.exe végrehajtásához. A telepítés mono a disztribúció rendszercsomag-kezelőjével történik:

apt install mono-complete

Vegye figyelembe, hogy a ubuntu-22.04 GitHub Actions-futók előre telepítve vannakmono, de a (ubuntu-24.04jelenleg erre utaló) ubuntu-latest verziótól mono kezdve már nem lesznek előre telepítve.

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 }}"

Megjegyzés:

A GitHub Actions által megadott alapértelmezett GITHUB_TOKEN beállítás nem rendelkezik a gyorsítótárazott csomagok feltöltéséhez vagy letöltéséhez szükséges engedélyekkel.
Ha engedélyezni szeretné a csomag gyorsítótárazását a GitHub Packagesben, használjon helyette egy személyes hozzáférési jogkivonatot (PAT), és győződjön meg arról, hogy az alábbi hatóköröket tartalmazza:

  • packages:read
  • packages:write

Tárolja a PAT-t adattár-titkos kódként (például VCPKG_PAT_TOKEN), és hivatkozzon rá a munkafolyamatban:

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

És ennyi! A vcpkg mostantól feltölt vagy visszaállít csomagokat a GitHub Packagesen üzemeltetett NuGet-hírcsatornából a GitHub Actions munkafolyamatán belül.

Következő lépések

A következő feladatokkal próbálkozhat: