Freigeben über


Anleitung: Einrichten des Cache mithilfe von Azure Storage und Azure DevOps

Anmerkung

Diese Anweisungen sind mit "CMD" unpraktisch, wählen Sie bitte "PowerShell" oder "Bash" oberhalb dieser Nachricht aus.

vcpkg unterstützt die Verwendung von Azure Storage-Containern zum Hochladen und Wiederherstellen von Ressourcen und Binärpaketen. Das Konfigurieren von vorab freigegebenen, langlebigen SAS-Tokens für Authentifizierungszwecke erfordert jedoch eine fehleranfällige manuelle Rotation der Geheimnisse. Workload-Identitätsverbund bietet einen Mechanismus, bei dem Azure DevOps die Rotation und Verwaltung von Geheimnissen für Sie übernimmt, die mit vcpkg verwendet werden können.

In diesem Tutorial lernen Sie Folgendes:

Warnung

Diese Anweisungen erteilen die Berechtigung, als verwaltete Identität für die Pipelines zu fungieren, in denen sie verwendet wird. Darüber hinaus stellen vcpkg-Caches einen Mechanismus bereit, bei dem ein kompromittierter Build möglicherweise dazu führen kann, dass andere Builds kompromittierte Ressourcen aus Caches verwenden.

Sie sollten nicht erlauben, dass Computer, die nicht vertrauenswürdige Build-Anfragen von Drittanbietern ausführen, in Caches schreiben.

die für offizielle Builds verwendet werden.

Voraussetzungen

Anmerkung

Diese Anweisungen sind mit "CMD" unpraktisch, wählen Sie bitte "PowerShell" oder "Bash" oben auf der Seite aus.

  • Ein Terminal mit Installiertem Azure PowerShell
  • vcpkg
  • Ein Azure Storage-Abonnement und ein Container, in dem Binärdateien gespeichert werden sollen
  • Ein Terminal mit installiertem Azure CLI
  • vcpkg
  • Ein Azure Storage-Abonnement und ein Container, in dem Binärdateien gespeichert werden sollen

1 – Erstellen einer verwalteten Entra-Identität

Überspringen Sie diesen Schritt, wenn Sie bereits eine verwaltete Identität konfiguriert haben, die Sie verwenden möchten.

Im Azure-Portal:

  1. Öffnen Sie die Seite für die Ressourcengruppe, für die Sie die verwaltete Identität erstellen möchten.
  2. Klicken Sie auf "+ Erstellen".
  3. Geben Sie "Vom Benutzer zugewiesene verwaltete Identität" in das Feld "Markeplace durchsuchen" ein.
  4. Wählen Sie "Vom Benutzer zugewiesene verwaltete Identität" von "Microsoft" aus.
  5. Klicken Sie auf "Erstellen" neben dem Plan "Vom Benutzer zugewiesene verwaltete Identität"
  6. Benennen Sie die Identität. In diesem Lernprogramm wird der Name vcpkg-docs-identity verwendet (optional können Sie eine Region für die Ressource auswählen).
  7. Klicken Sie auf "Überprüfen und Erstellen"
  8. Überprüfen Sie Ihre Einstellungen, und klicken Sie auf "Erstellen".

Die Bereitstellung der Ressource kann einige Minuten dauern.

2 – Einrichten des Workload-Identitätsverbunds mit Azure DevOps

Anmerkung

Die Anweisungen sollten identisch mit den Anweisungen in der Dokumentation von Azure DevOps sein. Wenn diese Anweisungen veraltet werden, folgen Sie den Anweisungen des Azure DevOps-Teams.

Wählen Sie im Azure DevOps-Portal für das Projekt, in dem Sie Pipelines ausführen möchten, in der unteren linken Ecke "Projekteinstellungen" aus. Wählen Sie dann links "Dienstverbindungen" aus. Wählen Sie dann rechts "Neue Dienstverbindung" aus. Wählen Sie die Schaltfläche "Azure Resource Manager" aus und klicken Sie auf "Weiter". Wählen Sie "Workload-Identitätsverbund (manuell)" und dann Weiter. Benennen Sie die Dienstverbindung, und drücken Sie die nächste Taste. Für die Zwecke dieser Dokumentation wurde die Dienstverbindung vcpkg-docs-identity-connectiongenannt. Zu diesem Zeitpunkt sollte Azure DevOps einen Aussteller- und einen Betreffidentifikator anzeigen.

Öffnen Sie in einem anderen Tab das Azure-Portal und navigieren Sie zur verwalteten Identität, die in Schritt 1 erstellt wurde. Wählen Sie auf der linken Seite "Einstellungen/Verbundanmeldeinformationen" und dann "Anmeldeinformationen hinzufügen" aus. Wählen Sie in der Dropdownliste "Andere" aus. Kopieren Sie die "Aussteller-URL" und den "Subjektkennzeichner" aus Azure DevOps in das Formular. Geben Sie den Verbundanmeldeinformationen einen Namen, und drücken Sie "Hinzufügen". Für Zwecke dieser Dokumentation wurde der Name azure-devops-credentialverwendet.

3 - Zuweisen von Berechtigungen für verwaltete Identitäten zum Speicherkontocontainer

Überspringen Sie diesen Schritt, wenn Sie Ihrer verwalteten Identität bereits Berechtigungen für Ihren Speicherkontocontainer erteilt haben.

Wechseln Sie im Azure-Portal zur Seite des Speicherkontos, das Sie verwenden möchten. Wählen Sie auf der linken Seite "Datenspeicher/Container" und dann den Container aus, den Sie verwenden möchten. Dadurch sollte das Azure-Portal für die Eigenschaften dieses bestimmten Containers geöffnet werden. Wählen Sie links "Access Control (IAM)" und dann "Hinzufügen –> Rollenzuweisung hinzufügen" aus. Wählen Sie "Azure Blob Data Reader" für schreibgeschützten Zugriff oder "Azure Blob Data Contributor" für Lese-/Schreibzugriff aus, und klicken Sie auf "Weiter". Wählen Sie dann die Option "Verwaltete Identität" aus und klicken Sie auf "+ Mitglieder auswählen". Wählen Sie die verwaltete Identität aus, die Sie in Schritt 1 erstellt haben. Wählen Sie dann zweimal "Überprüfen und Zuweisen" aus.

Kehren Sie dann zur Seite für den Speicherkontocontainer zurück, und wählen Sie dann erneut auf der linken Seite "Zugriffssteuerung (IAM)" aus, und wählen Sie "Hinzufügen –> Rollenzuweisung hinzufügen" aus. Wählen Sie "Speicher-BLOB-Delegator" aus, und drücken Sie "Weiter". Wählen Sie dann die Option "Verwaltete Identität" aus und klicken Sie auf "+ Mitglieder auswählen". Wählen Sie die verwaltete Identität aus, die Sie in Schritt 1 erstellen. Wählen Sie dann zweimal "Überprüfen und Zuweisen" aus.

4 – Generieren eines SAS-Tokens und Verwenden mit Caching

Anmerkung

Diese Anweisungen sind mit "CMD" unpraktisch, wählen Sie bitte "PowerShell" oder "Bash" oben auf der Seite aus.

Verwenden Sie in der YML, in der Sie vcpkg in Azure DevOps aufrufen möchten, die Aufgabe AzureCLI@2, um ein SAS-Token zu prägen und vcpkg aufzurufen, zum Beispiel:

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"

Nächste Schritte

Hier sind weitere Aufgaben, die Sie als Nächstes ausprobieren können: