Distribuera till Azure Container Apps från Azure Pipelines
Med Azure Container Apps kan du använda Azure Pipelines för att publicera revisioner till din containerapp. När incheckningar skickas till din Azure DevOps-lagringsplats utlöses en pipeline som uppdaterar containeravbildningen i containerregistret. Azure Container Apps skapar en ny revision baserat på den uppdaterade containeravbildningen.
Incheckningar till en specifik gren i lagringsplatsen utlöser pipelinen. När du skapar pipelinen bestämmer du vilken gren som är utlösaren.
Azure Pipelines-uppgift för Container Apps
Uppgiften stöder följande scenarier:
- Skapa från en Dockerfile och distribuera till Container Apps
- Skapa från källkod utan en Dockerfile och distribuera till Container Apps. Språk som stöds är .NET, Java, Node.js, PHP och Python
- Distribuera en befintlig containeravbildning till Container Apps
Med produktionsversionen levereras den här uppgiften med Azure DevOps och kräver inte längre explicit installation. Den fullständiga dokumentationen finns i AzureContainerApps@1 – Azure Container Apps Deploy v1 task (Distribuera v1-uppgift i Azure Container Apps).
Exempel på användning
Här följer några vanliga scenarier för att använda uppgiften. Mer information finns i dokumentationen för uppgiften.
Skapa och distribuera till Container Apps
Följande kodfragment visar hur du skapar en containeravbildning från källkoden och distribuerar den till Container Apps.
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'
Uppgiften använder Dockerfile i appSourcePath
för att skapa containeravbildningen. Om ingen Dockerfile hittas försöker uppgiften skapa containeravbildningen från källkoden i appSourcePath
.
Distribuera en befintlig containeravbildning till Container Apps
Följande kodfragment visar hur du distribuerar en befintlig containeravbildning till Container Apps. Uppgiften autentiseras med registret med hjälp av tjänstanslutningen. Om tjänstanslutningens identitet inte har tilldelats AcrPush
rollen för registret anger du registrets administratörsautentiseringsuppgifter med hjälp av parametrarna acrUsername
och acrPassword
indata.
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)'
Viktigt!
Om du skapar en containeravbildning i ett separat steg kontrollerar du att du använder en unik tagg, till exempel bygg-ID:t i stället för en stabil tagg som latest
. Mer information finns i Metodtips för bildtaggen.
Autentisera med Azure Container Registry
Azure Container Apps-uppgiften måste autentiseras med Azure Container Registry för att skicka containeravbildningen. Containerappen måste också autentiseras med Azure Container Registry för att hämta containeravbildningen.
För att skicka avbildningar autentiseras uppgiften automatiskt med containerregistret som anges i acrName
med hjälp av tjänstanslutningen som anges i azureSubscription
. Om tjänstanslutningens identitet inte har tilldelats AcrPush
rollen för registret anger du registrets administratörsautentiseringsuppgifter med och acrUsername
acrPassword
.
För att hämta avbildningar använder Azure Container Apps antingen hanterad identitet (rekommenderas) eller administratörsautentiseringsuppgifter för att autentisera med Azure Container Registry. Om du vill använda hanterad identitet måste målcontainerappen för uppgiften konfigureras för att använda hanterad identitet. Om du vill autentisera med registrets administratörsautentiseringsuppgifter anger du uppgiftens acrUsername
och acrPassword
indata.
Konfiguration
Utför följande steg för att konfigurera en Azure DevOps-pipeline för distribution till Azure Container Apps.
- Skapa en Azure DevOps-lagringsplats för din app
- Skapa en containerapp med hanterad identitet aktiverad
AcrPull
Tilldela rollen för Azure Container Registry till containerappens hanterade identitet- Installera Azure Container Apps-uppgiften från Azure DevOps Marketplace
- Konfigurera en Azure DevOps-tjänstanslutning för din Azure-prenumeration
- Skapa en Azure DevOps-pipeline
Förutsättningar
Krav | Instruktioner |
---|---|
Azure-konto | Om du inte har något skapar du ett konto kostnadsfritt. Du behöver behörigheten Deltagare eller Ägare för Azure-prenumerationen för att kunna fortsätta. Mer information finns i Tilldela Azure-roller med hjälp av Azure Portal. |
Azure DevOps-projekt | Gå till Azure DevOps och välj Starta kostnadsfritt. Skapa sedan ett nytt projekt. |
Azure CLI | Installera Azure CLI. |
Skapa en Azure DevOps-lagringsplats och klona källkoden
Innan du skapar en pipeline måste källkoden för din app finnas på en lagringsplats.
Logga in på Azure DevOps och navigera till projektet.
Öppna sidan Lagringsplatser.
I det övre navigeringsfältet väljer du listrutan lagringsplatser och väljer Importera lagringsplats.
Ange följande information och välj Importera:
Fält Värde Lagringsplatstyp Git Klona URL https://github.com/Azure-Samples/containerapps-albumapi-csharp.git
Namn my-container-app
Välj Klona för att visa lagringsplatsens URL och kopiera den.
Öppna en terminal och kör följande kommando:
git clone <REPOSITORY_URL> my-container-app
Ersätt
<REPOSITORY_URL>
med den URL som du kopierade.
Skapa en containerapp och konfigurera hanterad identitet
Skapa containerappen az containerapp up
med kommandot med följande steg. Det här kommandot skapar Azure-resurser, skapar containeravbildningen, lagrar avbildningen i ett register och distribuerar till en containerapp.
När appen har skapats kan du lägga till en hanterad identitet i appen och tilldela identiteten AcrPull
rollen så att identiteten kan hämta avbildningar från registret.
Ändra till mappen src för den klonade lagringsplatsen.
cd my-container-app cd src
Skapa Azure-resurser och distribuera en containerapp med
az containerapp up
kommandot .az containerapp up \ --name my-container-app \ --source . \ --ingress external
Anteckna namnet på Azure Container Registry i kommandots utdata.
Hämta det fullständiga resurs-ID:t för containerregistret.
az acr show --name <ACR_NAME> --query id --output tsv
Byt ut
<ACR_NAME>
mot namnet på ditt register.Aktivera hanterad identitet för containerappen.
az containerapp identity assign \ --name my-container-app \ --resource-group my-container-app-rg \ --system-assigned
Observera huvud-ID:t för den hanterade identiteten i kommandoutdata.
AcrPull
Tilldela rollen för Azure Container Registry till containerappens hanterade identitet.az role assignment create \ --assignee <MANAGED_IDENTITY_PRINCIPAL_ID> \ --role AcrPull \ --scope <ACR_RESOURCE_ID>
Ersätt
<MANAGED_IDENTITY_PRINCIPAL_ID>
med huvud-ID:t för den hanterade identiteten och<ACR_RESOURCE_ID>
med resurs-ID:t för Azure Container Registry.Konfigurera containerappen så att den använder den hanterade identiteten för att hämta avbildningar från Azure Container Registry.
az containerapp registry set \ --name my-container-app \ --resource-group my-container-app-rg \ --server <ACR_NAME>.azurecr.io \ --identity system
Ersätt
<ACR_NAME>
med namnet på ditt Azure Container Registry.
Skapa en Azure DevOps-tjänstanslutning
Om du vill distribuera till Azure Container Apps måste du skapa en Azure DevOps-tjänstanslutning för din Azure-prenumeration.
I Azure DevOps välj Projektinställningar.
Välj Tjänstanslutningar.
Välj Ny tjänstanslutning.
Välj Azure Resource Manager.
Välj Tjänstens huvudnamn (automatiskt) och välj Nästa.
Ange följande information och välj Spara:
Fält Värde Abonnemang Välj din Azure-prenumerationen. Resursgrupp Välj den resursgrupp ( my-container-app-rg
) som innehåller containerappen och containerregistret.Namn på tjänstanslutning my-subscription-service-connection
Mer information om tjänstanslutningar finns i Ansluta till Microsoft Azure.
Skapa en Azure DevOps YAML-pipeline
I ditt Azure DevOps-projekt väljer du Pipelines.
Välj Ny pipeline.
Välj Azure Repos Git.
Välj den lagringsplats som innehåller källkoden (
my-container-app
).Välj Startpipeline.
I redigeraren ersätter du innehållet i filen med följande YAML:
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'
Ersätt
<AZURE_SUBSCRIPTION_SERVICE_CONNECTION>
med namnet på Azure DevOps-tjänstanslutningen (my-subscription-service-connection
) som du skapade i föregående steg och<ACR_NAME>
med namnet på ditt Azure Container Registry.Välj Spara och kör.
En Azure Pipelines-körning börjar skapa och distribuera din containerapp. Om du vill kontrollera förloppet går du till Pipelines och väljer körningen. Under den första pipelinekörningen kan du uppmanas att auktorisera pipelinen att använda tjänstanslutningen.
Om du vill distribuera en ny revision av din app skickar du en ny incheckning till huvudgrenen.