Baca dalam bahasa Inggris

Bagikan melalui


Tutorial: Menyiapkan cache menggunakan Azure Storage dan Azure DevOps

Terminal options

Catatan

Instruksi ini tidak praktis dengan 'CMD', pilih 'PowerShell' atau 'Bash' di atas pesan ini.

vcpkg mendukung penggunaan kontainer Azure Storage untuk mengunggah dan memulihkan aset dan paket biner. Namun, mengonfigurasi token SAS dengan umur panjang yang telah dibagikan sebelumnya untuk tujuan autentikasi memerlukan rotasi rahasia manual yang rentan terhadap kesalahan. Federasi Identitas Beban Kerja menawarkan mekanisme di mana Azure DevOps mengurus rotasi dan manajemen rahasia untuk Anda, yang dapat digunakan dengan vcpkg.

Dalam tutorial ini, Anda akan mempelajari cara:

Peringatan

Instruksi ini memberikan izin untuk bertindak sebagai identitas terkelola di dalam pipeline tempat identitas tersebut digunakan. Selain itu, cache vcpkg menyediakan mekanisme di mana build yang disusupi mungkin dapat menyebabkan build lain menggunakan aset yang disusupi dari cache.

Anda tidak boleh mengizinkan komputer yang menjalankan permintaan build pihak ketiga yang tidak tepercaya untuk menulis ke cache

yang digunakan untuk kompilasi resmi.

Prasyarat

Catatan

Instruksi ini tidak praktis dengan 'CMD', pilih 'PowerShell' atau 'Bash' di bagian atas halaman.

  • Terminal dengan Azure PowerShell terinstal
  • vcpkg
  • Langganan Azure Storage dan kontainer tempat Anda ingin file biner disimpan
  • Terminal dengan Azure CLI terinstal
  • vcpkg
  • Langganan Azure Storage dan kontainer tempat Anda ingin menyimpan biner.

1 - Membuat Identitas Terkelola Entra

Lewati langkah ini jika Anda sudah mengonfigurasi Managed Identity yang ingin Anda gunakan.

Di Portal Microsoft Azure:

  1. Buka halaman untuk Grup Sumber Daya tempat Anda ingin membuat Identitas Terkelola
  2. Klik "+ Buat"
  3. Ketik "Identitas Terkelola yang Ditetapkan Pengguna" di kotak "Cari Markeplace"
  4. Pilih "Identitas Terkelola yang Ditetapkan Pengguna" oleh "Microsoft"
  5. Klik "Buat" di samping paket "Identitas Terkelola yang Ditetapkan Pengguna"
  6. Beri nama identitas, tutorial ini menggunakan nama vcpkg-docs-identity (secara opsional, Anda dapat memilih Wilayah untuk sumber daya)
  7. Clic pada "Tinjau dan Buat"
  8. Tinjau pengaturan Anda dan klik "Buat".

Menyebarkan sumber daya mungkin memakan waktu beberapa menit.

2 - Menyiapkan Federasi Identitas Beban Kerja dengan Azure DevOps

Catatan

Instruksi ini harus identik dengan instruksi dalam dokumentasi Azure DevOps. Jika instruksi ini menjadi kedaluarsa, silakan ikuti yang disediakan oleh tim Azure DevOps.

Di portal Azure DevOps untuk proyek tempat Anda ingin menjalankan Alur, pilih "Pengaturan Proyek" di sudut kiri bawah. Lalu pilih "Koneksi Layanan" di sebelah kiri. Kemudian pilih "Koneksi Layanan Baru" di sebelah kanan. Pilih tombol radio "Azure Resource Manager", dan tekan Berikutnya. Pilih "Federasi identitas beban kerja (manual)" dan tekan berikutnya. Beri nama koneksi layanan dan tekan berikutnya. Untuk tujuan dokumentasi ini, koneksi layanan diberi nama vcpkg-docs-identity-connection. Pada titik ini, Azure DevOps harus menampilkan pengeluar sertifikat dan pengidentifikasi subjek.

Di tab lain, buka Portal Microsoft Azure navigasikan ke identitas terkelola yang dibuat di langkah 1. Di sebelah kiri pilih Pengaturan/Kredensial Federasi, dan pilih 'Tambahkan Kredensial'. Di menu drop-down, pilih 'Lainnya'. Salin 'URL Penerbit' dan 'Pengidentifikasi Subjek' dari Azure DevOps ke dalam formulir. Beri nama kredensial federasi, dan tekan 'Tambahkan'. Untuk tujuan dokumentasi ini, nama yang digunakan azure-devops-credential.

3 - Tetapkan Izin Identitas Terkelola pada Kontainer Akun Penyimpanan

Lewati langkah ini jika Anda telah memberikan izin identitas terkelola ke Kontainer Akun Penyimpanan Anda.

Di Portal Microsoft Azure, buka halaman untuk akun penyimpanan yang akan digunakan. Di sebelah kiri, pilih Penyimpanan Data/Kontainer, dan pilih kontainer yang ingin Anda gunakan. Ini harus membuka Portal Microsoft Azure ke properti untuk kontainer tertentu tersebut. Di sebelah kiri pilih "Kontrol Akses (IAM)", dan pilih "Tambahkan -> Tambahkan Penetapan Peran". Pilih "Pembaca Data Azure Blob" untuk akses baca saja, atau "Kontributor Data Azure Blob" untuk akses baca/tulis, dan tekan Berikutnya. Kemudian, pilih tombol radio "Identitas Terkelola" dan klik "+ Pilih Anggota". Pilih identitas terkelola yang Anda buat di langkah 1. Lalu pilih "Tinjau dan Tetapkan" dua kali.

Kemudian, kembali ke halaman untuk kontainer akun penyimpanan, dan sekali lagi di sebelah kiri pilih "Kontrol Akses (IAM)", dan pilih "Tambahkan -> Tambahkan Penetapan Peran". Pilih "Delegator Blob Penyimpanan" dan tekan Berikutnya. Kemudian, pilih tombol radio "Identitas Terkelola" dan klik "+ Pilih Anggota". Pilih identitas terkelola yang Anda buat di langkah 1. Kemudian pilih "Tinjau dan Tetapkan" sebanyak dua kali.

4 - Buat token SAS, dan gunakan dengan Cache

Catatan

Instruksi ini tidak praktis dengan 'CMD', pilih 'PowerShell' atau 'Bash' di bagian atas halaman.

Di yml tempat Anda ingin memanggil vcpkg di Azure DevOps, gunakan tugas AzureCLI@2 untuk mem-mint token SAS dan memanggil vcpkg, misalnya:

steps:
- task: AzureCLI@2
  displayName: 'Build with vcpkg'
  inputs:
    azureSubscription: 'vcpkg-docs-identity-connection' # This is the name of the service connection
    scriptType: 'pscore'                                # you set up in Step 2.
    scriptLocation: 'inlineScript'
    inlineScript: |
      # Determine an end date for the SAS token. This should be based on the maximum length of
      # time you expect your pipeline to take.
      $current = Get-Date -AsUtc
      $end = $current.AddHours(2)
      # Replace container-name and storage-account-name with the values from step 3.
      # Replace 'rcl' permissions with 'rc' or 'rclw' as appropriate for the permissions you wish to use.
      # See https://learn.microsoft.com/rest/api/storageservices/create-service-sas#permissions-for-a-directory-container-or-blob
      # for a list of acceptable permissions.
      $ctx = New-AzStorageContext -StorageAccountName storage-account-name -UseConnectedAccount
      $sas = New-AzStorageContainerSASToken -Context $ctx -Name container-name -Permission rclw -ExpiryTime $end
      # Azure PowerShell changed whether it emits a ? at the beginning of the SAS token in different versions:
      if ($sas.StartsWith("?")) {
        $sas = sas.Substring(1)
      }
      # Now use the SAS token for asset caching; make sure to replace storage-account-name and container-name again:
      $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://storage-account-name.blob.core.windows.net/container-name,$sas,readwrite"
      # ... or for binary caching:
      vcpkg install --binarysource "clear;x-azblob,https://storage-account-name.blob.core.windows.net/container-name,$sas,readwrite"
steps:
- task: AzureCLI@2
  displayName: 'Build with vcpkg'
  inputs:
    azureSubscription: 'vcpkg-docs-identity-connection' # This is the name of the service connection
    scriptType: 'bash'                                  # you set up in Step 2.
    scriptLocation: 'inlineScript'
    inlineScript: |
      # Determine an end date for the SAS token. This should be based on the maximum length of
      # time you expect your pipeline to take.
      export end=`date -u -d "2 hours" '+%Y-%m-%dT%H:%MZ'
      # Replace container-name and storage-account-name with the values from step 3.
      # Replace 'rcl' permissions with 'rc' or 'rclw' as appropriate for the permissions you wish to use.
      # See https://learn.microsoft.com/cli/azure/storage/container?view=azure-cli-latest#az-storage-container-generate-sas-optional-parameters
      # for a list of acceptable permissions.
      # The important arguments that trigger workload identity federation here are '--as-user' and '--auth-mode login'
      export sas=`az storage container generate-sas --name container-name --account-name storage-account-name --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv`
      # Now use the SAS token for asset caching; make sure to replace storage-account-name and container-name again:
      export X_VCPKG_ASSET_SOURCES=x-azurl,https://storage-account-name.blob.core.windows.net/container-name,$sas,readwrite
      # ... or for binary caching:
      vcpkg install --binarysource "clear;x-azblob,https://storage-account-name.blob.core.windows.net/container-name,$sas,readwrite"

Langkah berikutnya

Berikut adalah tugas lain untuk dicoba berikutnya: