Konfigurieren einer GitHub-Aktion zum Erstellen einer Containerinstanz

Bei GitHub Actions handelt es sich um eine Featuresammlung in GitHub, mit der sich Ihre Softwareentwicklungsworkflows am selben Ort automatisieren lassen, an dem Sie auch den Code speichern und gemeinsam an Pull Requests und Problemen arbeiten.

Mit der GitHub Actions-Aktion In Azure Container Instances bereitstellen können Sie die Bereitstellung eines einzelnen Containers in Azure Container Instances automatisieren. Die Aktion ermöglicht es Ihnen, Eigenschaften für eine Containerinstanz festzulegen, ähnlich wie der Befehl „az container create“.

In diesem Artikel erfahren Sie, wie Sie einen Workflow in einem GitHub-Repository einrichten, der die folgenden Aktionen ausführt:

  • Erstellen eines Images auf der Grundlage eines Dockerfile
  • Pushen des Images an eine Azure-Containerregistrierung
  • Bereitstellen des Containerimages in einer Azure-Containerinstanz

In diesem Artikel werden zwei Möglichkeiten für die Einrichtung des Workflows vorgestellt:

Wichtig

GitHub Actions für Azure Container Instances befinden sich derzeit in der Vorschau. Vorschauversionen werden Ihnen zur Verfügung gestellt, wenn Sie die zusätzlichen Nutzungsbedingungen akzeptieren. Einige Aspekte dieses Features werden bis zur allgemeinen Verfügbarkeit unter Umständen noch geändert.

Voraussetzungen

  • Ein GitHub-Konto: Falls Sie noch keins besitzen, erstellen Sie ein Konto unter https://github.com.
  • Azure CLI: Sie können Azure Cloud Shell oder eine lokale Installation der Azure CLI für diese Azure CLI-Schritte verwenden. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.
  • Azure-Containerregistrierung: Wenn Sie noch keine haben, erstellen Sie eine Azure-Containerregistrierung im Basic-Tarif mithilfe der Azure CLI, des Azure-Portals oder mithilfe einer anderen Methode. Notieren Sie sich die Ressourcengruppe, die für die Bereitstellung verwendet wurde, die für den GitHub-Workflow verwendet wird.

Einrichten des Repositorys

  • Verwenden Sie GitHub für die Beispiele in diesem Artikel, um das folgende Repository zu forken: https://github.com/Azure-Samples/acr-build-helloworld-node.

    Dieses Repository enthält ein Dockerfile und Quelldateien, um ein Containerimage einer kleinen Web-App zu erstellen.

    Screenshot der Schaltfläche zum Forken (hervorgehoben) in GitHub

  • Vergewissern Sie sich, dass GitHub Actions für Ihr Repository aktiviert ist. Navigieren Sie zum geforkten Repository, und klicken Sie auf Einstellungen>Aktionen. Stellen Sie unter Aktionsberechtigungen sicher, dass Alle Aktionen zulassen ausgewählt ist.

Konfigurieren des GitHub-Workflows

Erstellen von Anmeldeinformationen für die Azure-Authentifizierung

Im GitHub-Workflow müssen Sie die Azure-Anmeldeinformationen bereitstellen, um sich in der Azure CLI zu authentifizieren. Im folgenden Beispiel wird ein Dienstprinzipal erstellt, der für die Ressourcengruppe Ihrer Containerregistrierung die Rolle „Mitwirkender“ innehat.

Rufen Sie zunächst die Ressourcen-ID Ihrer Ressourcengruppe ab: Ersetzen Sie den Namen Ihrer Gruppe im folgenden az group show-Befehl:

groupId=$(az group show \
  --name <resource-group-name> \
  --query id --output tsv)

Verwenden Sie az ad sp create-for-rbac, um den Dienstprinzipal zu erstellen:

az ad sp create-for-rbac \
  --scope $groupId \
  --role Contributor \
  --json-auth

Die Ausgabe Die Ausgabe lautet in etwa wie folgt:

{
  "clientId": "xxxx6ddc-xxxx-xxxx-xxx-ef78a99dxxxx",
  "clientSecret": "xxxx79dc-xxxx-xxxx-xxxx-aaaaaec5xxxx",
  "subscriptionId": "xxxx251c-xxxx-xxxx-xxxx-bf99a306xxxx",
  "tenantId": "xxxx88bf-xxxx-xxxx-xxxx-2d7cd011xxxx",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

Speichern Sie die JSON-Ausgabe, da sie in einem späteren Schritt verwendet wird. Beachten Sie außerdem clientId. Sie benötigen diesen Wert, um den Dienstprinzipal im nächsten Abschnitt zu aktualisieren.

Aktualisieren für die Authentifizierung mit einer Registrierung

Aktualisieren Sie die Azure-Anmeldeinformationen für den Dienstprinzipal, um Push- und Pullzugriff für Ihre Containerregistrierung zu erlauben. Dieser Schritt ermöglicht dem GitHub-Workflow, den Dienstprinzipal zum Authentifizieren bei Ihrer Containerregistrierung zu verwenden und ein Docker-Image zu pushen und zu pullen.

Rufen Sie die Ressourcen-ID Ihrer Containerregistrierung ab. Fügen Sie im folgenden az acr show-Befehl den Namen Ihrer Registrierung ein:

registryId=$(az acr show \
  --name <registry-name> \
  --resource-group <resource-group-name> \
  --query id --output tsv)

Weisen Sie mit az role assignment create die Rolle „AcrPush“ zu, wodurch die Registrierung Push- und Pull-Zugriff erhält. Fügen Sie die Client-ID Ihres Dienstprinzipals ein:

az role assignment create \
  --assignee <ClientId> \
  --scope $registryId \
  --role AcrPush

Speichern der Anmeldeinformationen im GitHub-Repository

  1. Navigieren Sie auf der GitHub-Benutzeroberfläche zu Ihrem geforkten Repository, und wählen Sie Sicherheit > Geheimnisse und Variablen > Aktionen aus.

  2. Klicken Sie auf New repository secret (Neues Repository-Geheimnis), um die folgenden Geheimnisse hinzuzufügen:

`Secret` Wert
AZURE_CREDENTIALS Die gesamte JSON-Ausgabe des Schritts zur Dienstprinzipalerstellung
REGISTRY_LOGIN_SERVER Der Name des Anmeldeservers Ihrer Registrierung (nur Kleinbuchstaben), Beispiel: myregistry.azurecr.io
REGISTRY_USERNAME Der Wert von clientId aus der JSON-Ausgabe der Dienstprinzipalerstellung
REGISTRY_PASSWORD Der Wert von clientSecret aus der JSON-Ausgabe der Dienstprinzipalerstellung
RESOURCE_GROUP Der Name der Ressourcengruppe, die Sie für die Festlegung der Berechtigungen des Dienstprinzipals verwendet haben

Erstellen der Workflowdatei

  1. Klicken Sie in der GitHub-Benutzeroberfläche auf Aktionen.
  2. Klicken Sie auf set up a workflow yourself (Workflow selbst einrichten).
  3. Fügen Sie unter Edit new file (Neue Datei bearbeiten) die folgenden YAML-Inhalte ein, um den Beispielcode zu überschreiben. Akzeptieren Sie den Standarddateinamen main.yml, oder geben Sie einen benutzerdefinierten Dateinamen an.
  4. Klicken Sie auf Start commit (Commit starten), geben Sie optional kurze und erweiterte Beschreibungen Ihres Commits an, und klicken Sie auf Commit new file (Neue Datei committen).
on: [push]
name: Linux_Container_Workflow

jobs:
    build-and-deploy:
        runs-on: ubuntu-latest
        steps:
        # checkout the repo
        - name: 'Checkout GitHub Action'
          uses: actions/checkout@main

        - name: 'Login via Azure CLI'
          uses: azure/login@v1
          with:
            creds: ${{ secrets.AZURE_CREDENTIALS }}

        - name: 'Build and push image'
          uses: docker/login-action@v3
          with:
            registry: $({ secrets.REGISTRY_LOGIN_SERVER })
            username: ${{ secrets.AZURE_CLIENT_ID }}
            password: ${{ secrets.AZURE_CLIENT_SECRET }}
        - run: |
            docker build . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}

        - name: 'Deploy to Azure Container Instances'
          uses: 'azure/aci-deploy@v1'
          with:
            resource-group: ${{ secrets.RESOURCE_GROUP }}
            dns-name-label: ${{ secrets.RESOURCE_GROUP }}${{ github.run_number }}
            image: ${{ secrets.REGISTRY_LOGIN_SERVER }}/sampleapp:${{ github.sha }}
            registry-login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }}
            registry-username: ${{ secrets.REGISTRY_USERNAME }}
            registry-password: ${{ secrets.REGISTRY_PASSWORD }}
            name: aci-sampleapp
            location: 'west us'

Überprüfen des Workflows

Nachdem Sie die Workflowdatei committet haben, wird der Workflow ausgelöst. Wenn Sie sich den Fortschritt des Workflows ansehen möchten, navigieren Sie zu Aktionen>Workflows.

Aufrufen des Workflowfortschritts

Weitere Informationen zum Anzeigen des Status und der Ergebnisse der einzelnen Workflowschritte finden Sie unter Viewing workflow run history (Anzeigen eines Workflowausführungsverlaufs). Wenn der Workflow nicht abgeschlossen wird, lesen Sie Viewing logs to diagnose failures (Anzeigen von Protokollen zur Diagnose von Fehlern).

Nach erfolgreicher Beendigung des Workflows müssen Sie die Informationen zur Containerinstanz namens aci-sampleapp abrufen, indem Sie den Befehl az container show ausführen. Ersetzen Sie den Namen Ihrer Ressourcengruppe:

az container show \
  --resource-group <resource-group-name> \
  --name aci-sampleapp \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

Die Ausgabe Die Ausgabe lautet in etwa wie folgt:

FQDN                                   ProvisioningState
---------------------------------      -------------------
aci-action01.westus.azurecontainer.io  Succeeded

Nachdem die Instanz bereitgestellt wurde, navigieren Sie in Ihrem Browser zum FQDN des Containers, um sich die laufende Web-App anzeigen zu lassen.

Gerade ausgeführte Web-App im Browser

Verwenden der Erweiterung „Bereitstellung in Azure“

Alternativ können Sie den Workflow mit der Erweiterung „Bereitstellung in Azure“ in der Azure CLI konfigurieren. Der Befehl az container app up in der Erweiterung nimmt zwei Parameter, um einen Workflow einzurichten, der in Azure Container Instances bereitgestellt werden soll.

Der von der Azure CLI erstellte Workflow ähnelt dem Workflow, den Sie manuell mithilfe von GitHub erstellen können.

Zusätzliche Anforderung

Zusätzlich zu den Voraussetzungen und der Einrichtung des Repositorys für dieses Szenario müssen Sie für die Erweiterung „Bereitstellung in Azure“ in der Azure-Befehlszeilenschnittstelle installieren.

Führen Sie den Befehl az extension add aus, um die Erweiterung zu installieren.

az extension add \
  --name deploy-to-azure

Weitere Informationen dazu, wie Sie Erweiterungen finden, installieren und verwalten, finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.

Ausführen von az container app up

Für die Ausführung des Befehls az container app up müssen mindestens folgende Daten angeben:

  • Den Namen Ihrer Azure-Containerregistrierung, z. B. myregistry
  • Die URL zu Ihrem GitHub-Repository, z. B. https://github.com/<your-GitHub-Id>/acr-build-helloworld-node

Beispiel für einen Befehl:

az container app up \
  --acr myregistry \
  --repository https://github.com/myID/acr-build-helloworld-node

Befehlsausführung

  • Stellen Sie bei Aufforderung Ihre GitHub-Anmeldeinformationen oder ein persönliches GitHub-Zugriffstoken bereit, das über den Rollenumfang Repository und Benutzer verfügt, um sich bei Ihrem GitHub-Konto zu authentifizieren. Wenn Sie GitHub-Anmeldeinformationen angeben, erstellt der Befehl ein persönliches Zugriffstoken für Sie. Befolgen Sie weitere Aufforderungen, um den Workflow zu konfigurieren.

  • Der Befehl erstellt Repositorygeheimnisse für den Workflow:

    • Anmeldeinformationen des Dienstprinzipals für die Azure CLI
    • Anmeldeinformationen für den Zugriff auf die Azure-Containerregistrierung
  • Nach dem der Befehl die Workflowdatei für Ihr Repository committet hat, wird der Workflow ausgelöst.

Die Ausgabe Die Ausgabe lautet in etwa wie folgt:

[...]
Checking in file github/workflows/main.yml in the GitHub repository myid/acr-build-helloworld-node
Creating workflow...
GitHub Action Workflow has been created - https://github.com/myid/acr-build-helloworld-node/runs/515192398
GitHub workflow completed.
Workflow succeeded
Your app is deployed at:  http://acr-build-helloworld-node.eastus.azurecontainer.io:8080/

Wie Sie den Workflowstatus und die Ergebnissen der einzelnen Schritte in der GitHub-Benutzeroberfläche aufrufen, erfahren Sie unter Viewing workflow run history (Anzeigen eines Workflowausführungsverlaufs).

Überprüfen des Workflows

Der Workflow stellt eine Azure-Containerinstanz mit dem Basisnamen Ihres GitHub-Repositorys bereit. In diesem Beispiel handelt es sich dabei um acr-build-helloworld-node. Nach erfolgreicher Beendigung des Workflows müssen Sie die Informationen zur Containerinstanz namens acr-build-helloworld-node abrufen, indem Sie den Befehl az container show ausführen. Ersetzen Sie den Namen Ihrer Ressourcengruppe:

az container show \
  --resource-group <resource-group-name> \
  --name acr-build-helloworld-node \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --output table

Die Ausgabe Die Ausgabe lautet in etwa wie folgt:

FQDN                                                   ProvisioningState
---------------------------------                      -------------------
acr-build-helloworld-node.westus.azurecontainer.io     Succeeded

Nachdem die Instanz bereitgestellt wurde, navigieren Sie in Ihrem Browser zum FQDN des Containers, um sich die laufende Web-App anzeigen zu lassen.

Bereinigen von Ressourcen

Beenden Sie die Containerinstanz mithilfe des Befehls az container delete:

az container delete \
  --name <instance-name>
  --resource-group <resource-group-name>

Zum Löschen der Ressourcengruppe und aller enthaltenen Clusterressourcen führen Sie den Befehl az group delete aus.

az group delete \
  --name <resource-group-name>

Nächste Schritte

Navigieren Sie zum GitHub Marketplace. Dort finden Sie weitere Aktionen zum Automatisieren Ihres Bereitstellungsworkflows.