Freigeben über


Bereitstellen in Azure Container Apps über Azure Pipelines

Mit Azure-Container-Apps können Sie Azure-Pipelines verwenden, um Überarbeitungen in Ihrer Container-App zu veröffentlichen. Wenn Commits an Ihr Azure DevOps-Repository übertragen werden, wird eine Pipeline ausgelöst, die das Containerimage in der Containerregistrierung aktualisiert. Container-Apps erstellen eine neue Revision basierend auf dem aktualisierten Containerimage.

Commits für einen bestimmten Branch in Ihrem Repository lösen die Pipeline aus. Beim Erstellen der Pipeline entscheiden Sie, welcher Branch den Trigger darstellt.

Azure Pipelines-Aufgabe für Container Apps

Die Aufgabe unterstützt folgende Szenarien:

  • Erstellen Sie ein Dockerfile und stellen Sie es in Container-Apps bereit.
  • Erstellen aus Quellcode ohne Dockerfile und Bereitstellen in Container Apps Unterstützte Sprachen sind .NET, Java, Node.js, PHP und Python.
  • Stellen Sie ein vorhandenes Containerimage für Container-Apps bereit.

Mit der Produktionsversion ist diese Aufgabe im Lieferumfang von Azure DevOps und erfordert keine explizite Installation. Die vollständige Dokumentation finden Sie unter AzureContainerApps@1 – Azure Container Apps Deploy v1-Aufgabe.

Anwendungsbeispiele

Im Folgenden finden Sie einige häufige Szenarien für die Verwendung der Aufgabe. Weitere Informationen finden Sie in der Dokumentation zur Aufgabe.

Erstellen und Bereitstellen in Container Apps

Der folgende Codeausschnitt zeigt, wie Sie ein Containerimage aus einem Quellcode erstellen und in Container Apps bereitstellen.

steps:
- task: AzureContainerApps@1
  inputs:
    appSourcePath: '$(Build.SourcesDirectory)/src'
    azureSubscription: 'my-subscription-service-connection'
    acrName: 'myregistry'
    containerAppName: 'my-container-app'
    resourceGroup: 'my-container-app-rg'

Die Aufgabe verwendet das Dockerfile unter appSourcePath zum Erstellen des Containerimages. Wenn kein Dockerfile gefunden wird, versucht die Aufgabe, das Containerimage aus dem Quellcode in appSourcePath zu erstellen.

Bereitstellen eines vorhandenen Container-Images in Container Apps

Der folgende Codeausschnitt zeigt das Bereitstellen eines vorhandenen Containerimages in Container Apps. Die Aufgabe authentifiziert sich mit der Registrierung mithilfe der Dienstverbindung. Wenn die Identität der Dienstverbindung nicht der AcrPush Rolle für die Registrierung zugewiesen ist, geben Sie die Administratoranmeldeinformationen der Registrierung mithilfe der acrUsername Parameter und acrPassword Eingabeparameter der Registrierung an.

steps:
  - task: AzureContainerApps@1
    inputs:
      azureSubscription: 'my-subscription-service-connection'
      containerAppName: 'my-container-app'
      resourceGroup: 'my-container-app-rg'
      imageToDeploy: 'myregistry.azurecr.io/my-container-app:$(Build.BuildId)'

Wichtig

Wenn Sie ein Containerimage in einem separaten Schritt erstellen, müssen Sie unbedingt ein eindeutiges Tag wie die Build-ID anstelle eines stabilen Tags latestwie z. B. verwenden. Weitere Informationen finden Sie unter Bewährte Methoden für Imagetags.

Authentifizieren mit Azure Container Registry

Die Aufgabe "Container Apps" muss sich an Ihrer Azure-Containerregistrierung authentifizieren, um das Container-Image zu pushen. Die Container-App muss sich auch bei Ihrer Containerregistrierung authentifizieren, um das Containerimage abzurufen.

Um Bilder zu pushen, authentifiziert sich die Aufgabe automatisch mit der in acrName angegebenen Containerregistrierung, indem die in azureSubscription bereitgestellte Dienstverbindung verwendet wird. Wenn der Identität der Dienstverbindung nicht die AcrPush Rolle für das Registry zugewiesen ist, geben Sie die Administratoranmeldeinformationen des Registry mithilfe von acrUsername und acrPassword an.

Container-Apps verwenden zum Abrufen von Images entweder eine verwaltete Identität (empfohlen) oder Administratoranmeldeinformationen, um sich bei der Container-Registry zu authentifizieren. Um die verwaltete Identität zu verwenden, muss die Zielcontainer-App für die Aufgabe für die Verwendung der verwalteten Identität konfiguriert sein. Um sich mit den Administratoranmeldeinformationen beim Register zu authentifizieren, legen Sie die Eingaben der Aufgabe für acrUsername und acrPassword fest.

Konfiguration

Führen Sie die folgenden Schritte aus, um eine Azure DevOps-Pipeline für die Bereitstellung in Container-Apps zu konfigurieren.

  • Erstellen eines Azure DevOps-Repositorys für Ihre App
  • Erstellen einer Container-App mit aktivierter verwalteter Identität
  • Zuweisen der AcrPull Rolle für die Containerregistrierung zur verwalteten Identität der Container-App
  • Konfigurieren einer Azure DevOps-Dienstverbindung für Ihr Azure-Abonnement
  • Erstellen einer Azure DevOps-Pipeline

Voraussetzungen

Anforderung Anweisungen
Azure-Konto Erstellen Sie ein kostenloses Konto, falls Sie keines besitzen. Sie benötigen die Berechtigung "Mitwirkender" oder "Besitzer " für das Azure-Abonnement, um die Verfahren in diesem Artikel abzuschließen. Weitere Informationen finden Sie unter Zuweisen von Azure-Rollen mithilfe des Azure-Portals.
Azure DevOps-Projekt Wechseln Sie zu Azure DevOps, und wählen Sie Get started with Azure aus. Erstellen Sie dann ein neues Projekt.
Azure CLI Installieren Sie die Azure CLI.

Erstellen eines Azure DevOps-Repositorys und Klonen des Quellcodes

Bevor Sie eine Pipeline erstellen, muss sich der Quellcode für Ihre App in einem Repository befinden.

  1. Melden Sie sich bei Azure DevOps an, und wechseln Sie zu Ihrem Projekt.

  2. Wählen Sie im linken Bereich " Repos" aus.

  3. Wählen Sie "Repository importieren" aus.

  4. Geben Sie die folgenden Werte ein, und wählen Sie dann "Importieren" aus:

    Feld Wert
    Repository-Typ Git
    Klon-URL https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
  5. Klicken Sie auf Importieren.

  6. Wählen Sie Klonen aus, um die URL des Repositories anzuzeigen und zu kopieren.

  7. Öffnen Sie eine Eingabeaufforderung, und führen Sie den folgenden Befehl aus:

    git clone <REPOSITORY_URL> my-container-app
    

    Ersetzen Sie <REPOSITORY_URL> durch die kopierte URL.

Erstellen einer Container-App und Konfigurieren einer verwalteten Identität

Erstellen Sie Ihre Container-App, indem Sie die folgenden Schritte ausführen. Der az containerapp up Befehl erstellt Azure-Ressourcen, erstellt das Containerimage, speichert das Image in einer Registrierung und stellt eine Container-App bereit.

Nachdem die App erstellt wurde, können Sie Ihrer App eine verwaltete Identität hinzufügen und dieser die Rolle AcrPull zuweisen, sodass sie Images aus der Registrierung abrufen kann.

  1. Wechseln Sie zum src-Ordner des geklonten Repositorys:

    cd my-container-app
    cd src
    
  2. Erstellen Sie Azure-Ressourcen, und stellen Sie eine Container-App mithilfe des az containerapp up Befehls bereit:

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    

    Tipp

    Wenn der Build mit einem Debian-Repositoryfehler fehlschlägt, stellen Sie sicher, dass Sie die neueste Azure CLI-Version und containerapp-Erweiterung verwenden, indem Sie diese ausführen az extension add --name containerapp --upgrade. Alternativ können Sie Ihrem Projekt eine Dockerfile-Datei hinzufügen, um mehr Kontrolle über den Build zu haben.

  3. Notieren Sie sich in der Befehlsausgabe den Namen der Azure-Containerregistrierung.

  4. Rufen Sie die vollständige Ressourcen-ID der Containerregistrierung ab:

    az acr show --name <ACR_NAME> --query id --output tsv
    

    Ersetzen Sie <ACR_NAME> durch den Namen Ihrer Registrierung.

  5. Aktivieren der verwalteten Identität für die Container-App:

    az containerapp identity assign \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --system-assigned
    

    Notieren Sie die Principal-ID der verwalteten Identität in der Kommandoausgabe.

  6. Weisen Sie der verwalteten Identität der Container-App die AcrPull Rolle für die Containerregistrierung zu:

    az role assignment create \
      --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \
      --role AcrPull \
      --scope <ACR_RESOURCE_ID>
    

    Ersetzen Sie durch <MANAGED_IDENTITY_PRINCIPAL_ID> die Prinzipal-ID der verwalteten Identität und <ACR_RESOURCE_ID> durch die Ressourcen-ID der Containerregistrierung.

  7. Konfigurieren Sie die Container-App so, dass die verwaltete Identität zum Abrufen von Images aus der Containerregistrierung verwendet wird:

    az containerapp registry set \
      --name my-container-app \
      --resource-group my-container-app-rg \
      --server <ACR_NAME>.azurecr.io \
      --identity system
    

    Ersetzen Sie <ACR_NAME> durch den Namen Ihrer Azure-Containerregistrierung.

Erstellen einer Azure DevOps-Dienstverbindung

Zum Bereitstellen in Container-Apps müssen Sie eine Azure DevOps-Dienstverbindung für Ihr Azure-Abonnement erstellen.

  1. Wählen Sie in Azure DevOps Projekteinstellungen aus.

  2. Wählen Sie Dienstverbindungen aus.

  3. Wählen Sie Dienstleistungsverbindung erstellen.

  4. Wählen Sie Azure Resource Manager und dann Weiter aus.

  5. Wählen Sie die App-Registrierung (automatisch) und dann "Weiter" aus.

  6. Geben Sie die folgenden Werte an, und wählen Sie dann "Speichern" aus:

    Feld Wert
    Abonnement Wählen Sie Ihr Azure-Abonnement.
    Ressourcengruppe Wählen Sie die Ressourcengruppe (my-container-app-rg) aus, die Ihre Container-App und Ihre Containerregistrierung enthält.
    Name der Dienstverbindung my-subscription-service-connection

Weitere Informationen zu Dienstverbindungen finden Sie unter Herstellen einer Verbindung mit Microsoft Azure.

Erstellen einer Azure DevOps-YAML-Pipeline

  1. Wählen Sie in Ihrem Azure DevOps-Projekt Pipelines aus.

  2. Wählen Sie "Pipeline erstellen" aus.

  3. Wählen sie Azure Repos Git aus.

    Hinweis

    Wenn Azure Repos Git nicht als Option angezeigt wird, stellen Sie sicher, dass Ihr Quellcode in Ihrem Azure DevOps-Projekt an ein Git-Repository übertragen wird.

  4. Wählen Sie das Repository aus, das Ihren Quellcode (my-container-app) enthält.

  5. Wählen Sie Starterpipeline aus.

  6. Ersetzen Sie im Editor den Inhalt der Datei durch den folgenden YAML-Code:

    trigger:
      branches:
        include:
          - main
    
    pool:
      vmImage: ubuntu-latest
    
    steps:
      - task: AzureContainerApps@1
        inputs:
          appSourcePath: '$(Build.SourcesDirectory)/src'
          azureSubscription: '<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>'
          acrName: '<ACR_NAME>'
          containerAppName: 'my-container-app'
          resourceGroup: 'my-container-app-rg'
    

    Ersetzen Sie den <AZURE_SUBSCRIPTION_SERVICE_CONNECTION> Namen der Azure DevOps-Dienstverbindung (my-subscription-service-connection), die Sie im vorherigen Schritt erstellt haben. Ersetzen Sie <ACR_NAME> durch den Namen Ihrer Azure-Containerregistrierung.

  7. Wählen Sie Speichern und ausführen aus.

Eine Azure Pipelines-Ausführung beginnt mit dem Erstellen und Bereitstellen Ihrer Container-App. Um den Fortschritt zu überprüfen, gehen Sie zu Pipelines und wählen Sie die Ausführung aus. Während der ersten Pipelineausführung werden Sie möglicherweise aufgefordert, die Pipeline zur Nutzung Ihrer Dienstverbindung zu autorisieren.

Um eine neue Revision Ihrer App bereitzustellen, pushen Sie einen neuen Commit zum main-Branch.