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.
Melden Sie sich bei Azure DevOps an, und navigieren Sie zu Ihrem Projekt.
Öffnen Sie die Seite Repositorys.
Wählen Sie auf der oberen Navigationsleiste das Dropdownmenü „Repositorys“ aus, und wählen Sie Repository importieren aus.
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
Wählen Sie Klonen aus, um die Repository-URL anzuzeigen und zu kopieren.
Ö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.
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.
Erstellen einer Azure DevOps-Dienstverbindung
Zum Bereitstellen in Azure Container Apps müssen Sie eine Azure DevOps-Dienstverbindung für Ihr Azure-Abonnement erstellen.
Wählen Sie in Azure DevOps Projekteinstellungen aus.
Wählen Sie Dienstverbindungen aus.
Wählen Sie Neue Dienstverbindung aus.
Wählen Sie Azure Resource Manager aus.
Wählen Sie Dienstprinzipal (automatisch) und dann Weiter aus.
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
Wählen Sie in Ihrem Azure DevOps-Projekt Pipelines aus.
Wählen Sie Neue Pipeline aus.
Wählen sie Azure Repos Git aus.
Wählen Sie das Repository aus, das Ihren Quellcode (
my-container-app
) enthält.Wählen Sie Starterpipeline aus.
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.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.