Bereitstellen in Azure Container Apps über Azure Pipelines

Mit Azure Container Apps können Sie Azure Pipelines verwenden, um Revisionen in Ihrer Container-App zu veröffentlichen. Wenn Commits in Ihr Azure DevOps-Repository gepusht werden, wird eine Pipeline ausgelöst, die das Containerimage in der Containerregistrierung aktualisiert. Azure Container Apps erstellt 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 aus einem Dockerfile und Bereitstellen in Container Apps
  • Erstellen aus Quellcode ohne Dockerfile und Bereitstellen in Container Apps Zu den unterstützten Sprachen gehören .NET, Java, Node.js, PHP und Python.
  • Bereitstellen eines vorhandenen Containerimages in Container Apps

Beim Produktions-Build ist diese Aufgabe in Azure DevOps enthalten, sodass keine explizite Installation mehr erforderlich ist. Die vollständige Dokumentation finden Sie unter AzureContainerApps@1 – Azure Container Apps Deploy v1-Aufgabe.

Anwendungsbeispiele

Hier sind einige verbreitete Szenarien für das Verwenden 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 verwendete das Dockerfile in appSourcePath, um das Containerimage zu erstellen. Wenn kein Dockerfile gefunden wird, versucht die Aufgabe, das Containerimage aus dem Quellcode in appSourcePath zu erstellen.

Bereitstellen eines vorhandenen Containerimages in Container Apps

Der folgende Codeausschnitt zeigt das Bereitstellen eines vorhandenen Containerimages in Container Apps. Die Aufgabe authentifiziert sich bei der Registrierung über die Dienstverbindung. Wenn die Identität der Dienstverbindung nicht der AcrPush Rolle für die Registrierung zugewiesen ist, müssen die Administratoranmeldeinformationen der Registrierung über die Eingabeparameter acrUsername und acrPassword angegeben werden.

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 eigenen Schritt erstellen, achten Sie darauf, ein eindeutiges Tag wie die Build-ID anstelle eines stabilen Tags wie latest zu verwenden. Weitere Informationen finden Sie unter Bewährte Methoden für Imagetags.

Authentifizieren mit Azure Container Registry

Die Azure Container Apps-Aufgabe muss sich bei Ihrer Azure Container Registry-Instanz authentifizieren, um das Containerimage zu pushen. Die Container-App muss sich ebenfalls bei Ihrer Azure Container Registry-Instanz authentifizieren, um das Containerimage zu pullen.

Zum Pushen von Images authentifiziert sich die Aufgabe automatisch bei der in acrName angegebenen Containerregistrierung und verwendet dazu die in azureSubscription bereitgestellte Dienstverbindung. Wenn die Identität der Dienstverbindung nicht der AcrPush Rolle für die Registrierung zugewiesen ist, müssen die Administratoranmeldeinformationen der Registrierung über acrUsername und acrPassword angegeben werden.

Zum Pullen von Images verwendet Azure Container Apps eine verwaltete Identität (empfohlen) oder Administratoranmeldeinformationen für die Authentifizierung bei Azure Container Registry. 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 der Registrierung zu authentifizieren, legen Sie die Eingaben für acrUsername und acrPassword der Aufgabe fest.

Konfiguration

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

  • Erstellen eines Azure DevOps-Repositorys für Ihre App
  • Erstellen einer Container-App mit aktivierter verwalteter Identität
  • Zuweisen der Rolle AcrPull für die Azure Container Registry-Instanz zur verwalteten Identität der Container-App
  • Installieren der Azure Container Apps-Aufgabe aus dem Azure DevOps Marketplace
  • 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 den Vorgang fortzusetzen. Weitere Einzelheiten finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.
Azure DevOps-Projekt Wechseln Sie zu Azure DevOps, und wählen Sie Kostenlos starten aus. Erstellen Sie dann ein neues Projekt.
Azure CLI Installieren Sie die Azure CLI.

Erstellen eines Azure DevOps-Repositorys und Klonen des Quellcodes

Vor dem Erstellen einer Pipeline muss sich der Quellcode für die App in einem Repository befinden.

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

  2. Öffnen Sie die Seite Repositorys.

  3. Wählen Sie auf der oberen Navigationsleiste das Dropdownmenü „Repositorys“ aus, und wählen Sie Repository importieren aus.

  4. Geben Sie die folgenden Informationen ein, und wählen Sie Importieren aus:

    Feld Wert
    Repository-Typ Git
    Klon-URL https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
    Name my-container-app
  5. Wählen Sie Klonen aus, um die Repository-URL anzuzeigen und zu kopieren.

  6. Öffnen Sie ein Terminal, 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 mithilfe des Befehls az containerapp up über die folgenden Schritte. Mit diesem Befehl werden Azure-Ressourcen erstellt, das Containerimage erstellt, das Image in einer Registrierung gespeichert und die Bereitstellung in einer Container-App durchgeführt.

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 in das Verzeichnis src des geklonten Repositorys.

    cd my-container-app
    cd src
    
  2. Erstellen Sie Azure-Ressourcen, und stellen Sie eine Container-App mit dem Befehl az containerapp up bereit:

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    
  3. Notieren Sie sich in der Befehlsausgabe den Namen der Azure Container Registry-Instanz.

  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 Sie die verwaltete 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 sich die Prinzipal-ID der verwalteten Identität in der Befehlsausgabe.

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

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

    Ersetzen Sie <MANAGED_IDENTITY_PRINCIPAL_ID> durch die Prinzipal-ID der verwalteten Identität und <ACR_RESOURCE_ID> durch die Ressourcen-ID der Azure Container Registry-Instanz.

  7. Konfigurieren Sie die Container-App so, dass die verwaltete Identität zum Abrufen von Images aus Azure Container Registry 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 Container Registry-Instanz.

Erstellen einer Azure DevOps-Dienstverbindung

Zum Bereitstellen in Azure 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 Neue Dienstverbindung aus.

  4. Wählen Sie Azure Resource Manager aus.

  5. Wählen Sie Dienstprinzipal (automatisch) und dann Weiter aus.

  6. Geben Sie die folgenden Informationen ein, und klicken Sie auf Speichern:

    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 Neue Pipeline aus.

  3. Wählen sie Azure Repos Git aus.

  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 <AZURE_SUBSCRIPTION_SERVICE_CONNECTION> durch den Namen der Azure DevOps-Dienstverbindung (my-subscription-service-connection), die Sie im vorherigen Schritt erstellt haben, und <ACR_NAME> durch den Namen Ihrer Azure Container Registry-Instanz.

  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, navigieren Sie zu Pipelines, und wählen Sie die Ausführung aus. Während der ersten Pipelineausführung werden Sie möglicherweise aufgefordert, die Pipeline für die Verwendung Ihrer Dienstverbindung zu autorisieren.

Um eine neue Revision Ihrer App bereitzustellen, pushen Sie einen neuen Commit in den Mainbranch.