Aracılığıyla paylaş


Öğretici: GitHub Actions iş akışında GitHub Packages kullanarak vcpkg ikili önbelleği ayarlama

Not

Bu öğreticide GitHub Packages'da barındırılan NuGet akışları kullanılmaktadır ancak aynı yönergeler diğer NuGet akışı sağlayıcıları için de kullanılabilir; örneğin: Azure Artifacts, en az değişiklikle.

GitHub Packages, vcpkg tarafından üretilen NuGet ikili paketleriniz için kullanışlı bir depo sunar. Bu öğreticide, GitHub Actions iş akışınızda uzak depolama alanı olarak GitHub Packages kullanan bir ikili önbelleğin nasıl ayarlanacağı gösterilmektedir.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

Önkoşullar

  • Kod düzenleyicisi
  • GitHub Actions kullanan bir GitHub deposu
  • vcpkg kullanan bir proje

1 - GitHub Paketleri için kimlik doğrulamasını yapılandırma

Bu öğreticide GITHUB_TOKEN GitHub Actions tarafından sağlanan yerleşik bilgiler kullanılmaktadır. GitHub Packages'a hem okuma hem de yazma erişimini etkinleştirmek için iş akışınıza aşağıdaki permissions bloğu ekleyin:

permissions:
  packages: write

Bu, gerekli GITHUB_TOKEN ve packages:write izinleri verirpackages:read. Kullanmanın GITHUB_TOKEN çeşitli avantajları vardır:

  • Ek gizli diziler oluşturmanıza veya yönetmenize gerek yoktur
  • Çatallardan gelen çekme istekleri için otomatik olarak çalışır (salt okunur erişimle)
  • Kapsamı belirli bir depoya ve iş akışı çalıştırmasına göre belirlenmiş

Not

Alternatif olarak, depolar arası erişime veya diğer gelişmiş senaryolara ihtiyacınız varsa klasik kişisel erişim belirteci (PAT) kullanabilirsiniz. ve izinlerine sahip packages:writepackages:read için GitHub'ın yönergelerini izleyin, ardından bunu deponuza gizli dizi olarak ekleyin ve aşağıdaki örneklerde yerine ${{ secrets.YOUR_PAT_NAME }} kullanın${{ secrets.GITHUB_TOKEN }}.

2 - Bootstrap vcpkg

vcpkg, ikili önbelleğe alma işlemleri sırasında kullandığı yürütülebilir dosyanın kendi kopyasını nuget.exe alır. Bu öğreticide vcpkg tarafından alınan nuget.exekullanılır.

İş akışınızda vcpkg'yi önyüklemek için bir adım ekleyin:

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

vcpkg bootstrap betiğinin konumunu iş akışınız için doğru betikle değiştirmeniz gerekebilir. Bu öğreticide vcpkg'nin deponun kökündeki bir vcpkg klasörde yer aldığı varsayılır.

3 - Gerekli ortam değişkenlerini ayarlama

İş akışı dosyanıza aşağıdaki ortam değişkenlerini ekleyin (değerini GitHub'ınızın kullanıcı adı veya kuruluşunuzun adıyla değiştirin <OWNER> ):

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"

değerini VCPKG_EXE bootstrap vcpkg adımında oluşturulan vcpkg yürütülebilir dosyasının konumuyla değiştirmeniz gerekebilir.

Bu adımda GitHub Packages akışınızı ikili önbelleğe alma kaynağı olarak kullanacak şekilde yapılandıracaksınızVCPKG_BINARY_SOURCES. Daha fazla bilgi edinmek için ikili önbelleğe alma başvurusunu okuyun.

4 - GitHub Paketlerini NuGet kaynağı olarak ekleme

vcpkg fetch nuget komutu, vcpkg-acquired nuget.exedosyasının konumunun çıkışını alır ve gerekirse yürütülebilir dosyayı indirir.

NuGet kaynağını ile yapılandırmak için iş akışı dosyanıza GITHUB_TOKENaşağıdaki adımı ekleyin:

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

Linux'ta komutunu yürütmeniz monogerekirnuget.exe. Dağıtımınızın sistem paketi yöneticisini kullanarak yükleyebilirsiniz mono :

apt install mono-complete

ubuntu-22.04 GitHub Actions çalıştırıcılarının önceden yüklenmiş olarak mono geldiğini, ancak ile başlayarak ubuntu-24.04 (şu anda işaret ettiğiubuntu-latest) mono artık önceden yüklenmiş olarak gelmediğini unutmayın.

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

Not

GitHub Actions tarafından sağlanan varsayılan ayar GITHUB_TOKEN , önbelleğe alınmış paketleri karşıya yüklemek veya indirmek için gerekli izinlere sahip değildir .
GitHub Packages'ta paket önbelleğe almayı etkinleştirmek için bunun yerine bir Kişisel Erişim Belirteci (PAT) kullanın ve aşağıdaki kapsamları içerdiğinden emin olun:

  • packages:read
  • packages:write

PAT'yi depo gizli dizisi olarak depolayın (örneğin, VCPKG_PAT_TOKEN) ve iş akışınızda bu gizli diziye başvurun:

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

Hepsi bu! vcpkg artık GitHub Actions iş akışınızdaki GitHub Packages üzerinde barındırılan NuGet akışınızdan paketleri karşıya yükler veya geri yükler.

Sonraki adımlar

Deneyebileceğiniz diğer görevler şunlardır: