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.
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.
Melden Sie sich über die Azure-Befehlszeilenschnittstelle bei Azure an.
az login
Installieren Sie als Nächstes die aktuelle Azure Container Apps-Erweiterung für die CLI:
az extension add --name containerapp --upgrade
Wenn Sie kein eigenes GitHub-Repository haben, erstellen Sie eines aus einem Beispiel.
- Navigieren Sie zum folgenden Speicherort, um ein neues Repository zu erstellen:
- Nennen Sie das Repository
my-container-app
.
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.
Wechseln Sie in das Verzeichnis src des geklonten Repositorys.
cd my-container-app cd src
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
Notieren Sie sich in der Befehlsausgabe den Namen der Azure Container Registry-Instanz.
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.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.
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.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.
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.Kopieren Sie die JSON-Ausgabe aus dem Befehl.
Navigieren Sie im GitHub-Repository zu Einstellungen>Geheimnisse>Aktionen, und wählen Sie Neues Repositorygeheimnis aus.
Geben Sie
AZURE_CREDENTIALS
als Namen ein, und fügen Sie den Inhalt der JSON-Ausgabe als Wert ein.Klicken Sie auf Add secret (Geheimnis hinzufügen).
Erstellen eines GitHub Actions-Workflows
Navigieren Sie im GitHub-Repository zu Aktionen, und wählen Sie Neuer Workflow aus.
Klicken Sie auf Set up a workflow yourself (Workflow selbst einrichten).
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 unterbranches
und die Werte fürappSourcePath
,containerAppName
undresourceGroup
mit den Werten für Ihr Repository und Ihre Azure-Ressourcen übereinstimmen.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.