Share via


Bereitstellen in Azure Container Apps mit GitHub Actions

Mit Azure Container Anwendungen können Sie GitHub-Aktionen verwenden, um Revisionen in Ihrer Container-Anwendung zu veröffentlichen. Wenn Commits per Push an Ihr GitHub-Repository übertragen werden, wird ein Workflow ausgelöst, das das Containerimage in der Containerregistrierung aktualisiert. Azure Container Apps erstellt eine neue Revision basierend auf dem aktualisierten Containerimage.

Änderungen an einem GitHub-Repository lösen eine Aktion zum Erstellen einer neuen Revision aus.

Der GitHub Actions-Workflow wird durch Commits in einen bestimmten Branch in Ihrem Repository ausgelöst. Beim Erstellen des Workflows entscheiden Sie, welcher Branch den Workflow auslöst.

In diesem Artikel erfahren Sie, wie Sie einen vollständig anpassbaren Workflow erstellen. Informationen zum Generieren eines GitHub Actions-Workflow für den Einstieg mit der Azure CLI finden Sie unter Veröffentlichen von Revisionen mit GitHub Actions in Azure Container Apps.

GitHub-Aktion für Azure Container Apps

Um Ihre Container-App zu erstellen und bereitzustellen, fügen Sie die Aktion azure/container-apps-deploy-action zu Ihrem GitHub Actions-Workflow hinzu.

Die Aktion unterstützt die folgenden 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

Anwendungsbeispiele

Hier sind einige verbreitete Szenarien für das Verwenden der Aktion aufgeführt. Weitere Informationen finden Sie auf der GitHub-Marketplace-Seite der Aktion.

Erstellen und Bereitstellen in Container Apps

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

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      appSourcePath: ${{ github.workspace }}/src
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg

Die Aktion verwendete das Dockerfile in appSourcePath, um das Containerimage zu erstellen. Wenn kein Dockerfile gefunden wird, versucht die Aktion, 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.

steps:

  - name: Log in to Azure
    uses: azure/login@v1
    with:
      creds: ${{ secrets.AZURE_CREDENTIALS }}

  - name: Build and deploy Container App
    uses: azure/container-apps-deploy-action@v1
    with:
      acrName: myregistry
      containerAppName: my-container-app
      resourceGroup: my-rg
      imageToDeploy: myregistry.azurecr.io/app:${{ github.sha }}

Wichtig

Wenn Sie ein Containerimage in einem eigenen Schritt erstellen, achten Sie darauf, ein eindeutiges Tag wie den Commit-SHA 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-Aktion 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 Aktion automatisch bei der Containerregistrierung, die in acrName angegeben ist. Dabei werden die Anmeldeinformationen verwendet, die für die Aktion azure/login bereitgestellt wurden.

Zum Pullen von Images verwendet Azure Container Apps eine verwaltete Identität (empfohlen) oder Administratoranmeldeinformationen für die Authentifizierung bei Azure Container Registry. Damit die verwaltete Identität verwendet werden kann, muss die Container-App, die von der Aktion bereitgestellt wird, für die Verwendung der verwalteten Identität konfiguriert werden. Um sich mit den Administratoranmeldeinformationen der Registrierung zu authentifizieren, legen Sie die Eingaben für acrUsername und acrPassword der Aktion fest.

Konfiguration

Sie führen die folgenden Schritte aus, um einen GitHub Actions-Workflow für die Bereitstellung in Azure Container Apps zu konfigurieren.

  • Erstellen eines GitHub-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
  • Konfigurieren von Geheimnissen in Ihrem GitHub-Repository
  • Erstellen eines GitHub Actions-Workflows

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.
GitHub-Konto Registrieren Sie sich kostenlos.
Azure CLI Installieren Sie die Azure CLI.

Erstellen eines GitHub-Repositorys und Klonen des Quellcodes

Für das Erstellen eines Workflows muss sich der Quellcode für die App in einem GitHub-Repository befinden.

  1. Melden Sie sich über die Azure-Befehlszeilenschnittstelle bei Azure an.

    az login
    
  2. Installieren Sie als Nächstes die aktuelle Azure Container Apps-Erweiterung für die CLI:

    az extension add --name containerapp --upgrade
    
  3. Wenn Sie kein eigenes GitHub-Repository haben, erstellen Sie eines aus einem Beispiel.

    1. Navigieren Sie zum folgenden Speicherort, um ein neues Repository zu erstellen:
    2. Nennen Sie das Repository my-container-app.
  4. Klone das Repository auf deinen lokalen Computer.

    git clone https://github.com/<YOUR_GITHUB_ACCOUNT_NAME>/my-container-app.git
    

Erstellen einer Container-App mit aktivierter verwalteter 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 Sie die App erstellt haben, können Sie der 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 \
      --output tsv
    

    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.

Konfigurieren von Geheimnissen in Ihrem GitHub-Repository

Für den GitHub-Workflow ist ein Geheimnis mit dem Namen erforderlich AZURE_CREDENTIALS, um sich bei Azure zu authentifizieren. Das Geheimnis enthält die Anmeldeinformationen für einen Dienstprinzipal mit der Rolle Mitwirkender in der Ressourcengruppe, die die Container-App und die Containerregistrierung enthält.

  1. Erstellen Sie einen Dienstprinzipal mit der Rolle Mitwirkender in der Ressourcengruppe, die die Container-App und die Containerregistrierung enthält:

    az ad sp create-for-rbac \
      --name my-app-credentials \
      --role contributor \
      --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/my-container-app-rg \
      --json-auth \
      --output json
    

    Ersetzen Sie <SUBSCRIPTION_ID> durch die ID Ihres Azure-Abonnements. Wenn sich Ihre Containerregistrierung in einer anderen Ressourcengruppe befindet, geben Sie beide Ressourcengruppen im Parameter --scopes an.

  2. Kopieren Sie die JSON-Ausgabe aus dem Befehl.

  3. Navigieren Sie im GitHub-Repository zu Einstellungen>Geheimnisse>Aktionen, und wählen Sie Neues Repositorygeheimnis aus.

  4. Geben Sie AZURE_CREDENTIALS als Namen ein, und fügen Sie den Inhalt der JSON-Ausgabe als Wert ein.

  5. Klicken Sie auf Add secret (Geheimnis hinzufügen).

Erstellen eines GitHub Actions-Workflows

  1. Navigieren Sie im GitHub-Repository zu Aktionen, und wählen Sie Neuer Workflow aus.

  2. Klicken Sie auf Set up a workflow yourself (Workflow selbst einrichten).

  3. Fügen Sie den folgenden YAML-Code in den Editor ein:

    name: Azure Container Apps Deploy
    
    on:
      push:
        branches:
          - main
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
          - uses: actions/checkout@v3
    
          - name: Log in to Azure
            uses: azure/login@v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
    
          - name: Build and deploy Container App
            uses: azure/container-apps-deploy-action@v1
            with:
              appSourcePath: ${{ github.workspace }}/src
              acrName: <ACR_NAME>
              containerAppName: my-container-app
              resourceGroup: my-container-app-rg
    

    Ersetzen Sie <ACR_NAME> durch den Namen Ihrer Azure Container Registry-Instanz. Vergewissern Sie sich, dass der Branchname unter branches und die Werte für appSourcePath, containerAppName und resourceGroup mit den Werten für Ihr Repository und Ihre Azure-Ressourcen übereinstimmen.

  4. Committen Sie die Änderungen im Mainbranch.

Eine GitHub Actions-Workflowausführung sollte mit dem Erstellen und Bereitstellen Ihrer Container-App beginnen. Um den Fortschritt zu überprüfen, navigieren Sie zu Aktionen.

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