Dela via


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.

  1. Logga in på Azure DevOps och navigera till projektet.

  2. Öppna sidan Lagringsplatser.

  3. I det övre navigeringsfältet väljer du listrutan lagringsplatser och väljer Importera lagringsplats.

  4. 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
  5. Välj Klona för att visa lagringsplatsens URL och kopiera den.

  6. Ö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.

  1. Ändra till mappen src för den klonade lagringsplatsen.

    cd my-container-app
    cd src
    
  2. Skapa Azure-resurser och distribuera en containerapp med az containerapp up kommandot .

    az containerapp up \
      --name my-container-app \
      --source . \
      --ingress external 
    
  3. Anteckna namnet på Azure Container Registry i kommandots utdata.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  1. I Azure DevOps välj Projektinställningar.

  2. Välj Tjänstanslutningar.

  3. Välj Ny tjänstanslutning.

  4. Välj Azure Resource Manager.

  5. Välj Tjänstens huvudnamn (automatiskt) och välj Nästa.

  6. 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

  1. I ditt Azure DevOps-projekt väljer du Pipelines.

  2. Välj Ny pipeline.

  3. Välj Azure Repos Git.

  4. Välj den lagringsplats som innehåller källkoden (my-container-app).

  5. Välj Startpipeline.

  6. 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.

  7. 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.