Kontinuerlig distribution med anpassade containrar i Azure App Service

I den här självstudien konfigurerar du kontinuerlig distribution för en anpassad containeravbildning från hanterade Azure Container Registry-lagringsplatser eller Docker Hub.

1. Gå till Distributionscenter

I Azure-portalen går du till hanteringssidan för din App Service-app.

På den vänstra menyn klickar du på Distributionscenter> Inställningar.

2. Välj distributionskälla

Välj distributionskälla beror på ditt scenario:

  • Containerregistret konfigurerar CI/CD mellan ditt containerregister och App Service.
  • GitHub Actions-alternativet är till för dig om du underhåller källkoden för containeravbildningen i GitHub. Utlöses av nya incheckningar till din GitHub-lagringsplats, distributionsåtgärden kan köras docker build och docker push direkt till containerregistret och sedan uppdatera App Service-appen för att köra den nya avbildningen. Mer information finns i Så här fungerar CI/CD med GitHub Actions.
  • Information om hur du konfigurerar CI/CD med Azure Pipelines finns i Distribuera en Azure Web App-container från Azure Pipelines.

Kommentar

För en Docker Compose-app väljer du Container Registry.

Om du väljer GitHub Actions klickar du påAuktorisera och följer auktoriseringsanvisningarna. Om du redan har auktoriserat med GitHub tidigare kan du distribuera från en annan användares lagringsplats genom att klicka på Ändra konto.

När du har auktorisera ditt Azure-konto med GitHub väljer du den organisation, lagringsplats och gren som du vill distribuera från.

2. Konfigurera registerinställningar

3. Konfigurera registerinställningar

Kommentar

Sidovagnscontainrar (förhandsversion) lyckas med appar med flera containrar (Docker Compose) i App Service. Kom igång genom att läsa Självstudie: Konfigurera en sidovagnscontainer för anpassad container i Azure App Service (förhandsversion).

Om du vill distribuera en Docker Compose-app (flera containrar) väljer duDocker Compose i ContainerTyp.

Om du inte ser listrutan Containertyp rullar du tillbaka till Källa och väljerContainer Registry.

I Registerkälla väljer du var containerregistret finns. Om det varken är Azure Container Registry eller Docker Hub väljer duPrivat register.

Kommentar

Om appen För flera containrar (Docker Compose) använder mer än en privat avbildning kontrollerar du att de privata avbildningarna finns i samma privata register och är tillgängliga med samma användarautentiseringsuppgifter. Om din app för flera containrar bara använder offentliga avbildningar väljer duDocker Hub, även om vissa avbildningar inte finns i Docker Hub.

Följ nästa steg genom att välja den flik som matchar ditt val.

Listrutan Register visar registren i samma prenumeration som din app. Välj det register som du vill använda.

Kommentar

Välj den avbildning och tagg som ska distribueras. Om du vill skriver du startkommandot i Startfil.

Följ nästa steg beroende på containertyp:

  • För Docker Compose väljer du registret för dina privata avbildningar. Klicka påVälj fil för att ladda upp Docker Compose-filen eller klistra bara in innehållet i Docker Compose-filen i Config.
  • För Enskild container väljer du den avbildning och tagg som ska distribueras. Om du vill skriver du startkommandot i Startfil.

App Service lägger till strängen i Startfil i slutet av docker run kommandot (som [COMMAND] [ARG...] segment) när du startar containern.

3. Aktivera CI/CD

4. Aktivera CI/CD

App Service stöder CI/CD-integrering med Azure Container Registry och Docker Hub. Om du vill aktivera den väljer du i Kontinuerlig distribution.

Kommentar

Om du väljer GitHub Actions i Källa får du inte det här alternativet eftersom CI/CD hanteras direkt av GitHub Actions. I stället visas avsnittet Arbetsflödeskonfiguration , där du kan klicka påFörhandsgranskningsfil för att granska arbetsflödesfilen. Azure checkar in den här filen i din valda GitHub-källlagringsplats för att hantera bygg- och distributionsuppgifter. Mer information finns i Så här fungerar CI/CD med GitHub Actions.

När du aktiverar det här alternativet lägger App Service till en webhook till lagringsplatsen i Azure Container Registry eller Docker Hub. Lagringsplatsen publicerar på den här webhooken när den valda avbildningen uppdateras med docker push. Webhooken gör att App Service-appen startas om och körs docker pull för att hämta den uppdaterade avbildningen.

Kommentar

För att webhooken ska fungera korrekt är det viktigt att aktivera alternativet Grundläggande publiceringsautentiseringsuppgifter för autentiseringsuppgifter i webbappen. Om du inte gör det kan det leda till ett 401-fel utan behörighet för webhooken. Följ dessa steg för att kontrollera om grundläggande autentiseringsuppgifter för autentiseringsuppgifter för autentiseringspublicering är aktiverat:

  • Gå till webbappens allmänna konfiguration > Inställningar.
  • Leta efter avsnittet Plattformsinställning, där du hittar alternativet Grundläggande publiceringsautentiseringsuppgifter för autentiseringsuppgifter.

För andra privata register kan du skicka till webhooken manuellt eller som ett steg i en CI/CD-pipeline. I Webhook-URL klickar du påknappen Kopiera för att hämta webhookens URL.

Kommentar

Stödet för Docker Compose-appar (multicontainer) är begränsat:

  • För Azure Container Registry skapar App Service en webhook i det valda registret med registret som omfång. En docker push till valfri lagringsplats i registret (inklusive de som inte refereras av Docker Compose-filen) utlöser en omstart av appen. Du kanske vill ändra webhooken till ett smalare omfång.
  • Docker Hub stöder inte webhooks på registernivå. Du måste lägga till webhooks manuellt till de avbildningar som anges i Docker Compose-filen.

4. Spara inställningarna

5. Spara inställningarna

Klicka påSpara.

Så här fungerar CI/CD med GitHub Actions

Om du väljer GitHub Actions i Källa (se Välj distributionskälla) konfigurerar App Service CI/CD på följande sätt:

  • Sätter in en GitHub Actions-arbetsflödesfil på din GitHub-lagringsplats för att hantera bygg- och distributionsuppgifter till App Service.
  • Lägger till autentiseringsuppgifterna för ditt privata register som GitHub-hemligheter. Den genererade arbetsflödesfilen kör åtgärden Azure/docker-login för att logga in med ditt privata register och kör docker push sedan för att distribuera till det.
  • Lägger till publiceringsprofilen för din app som en GitHub-hemlighet. Den genererade arbetsflödesfilen använder den här hemligheten för att autentisera med App Service och kör sedan åtgärden Azure/webapps-deploy för att konfigurera den uppdaterade avbildningen, vilket utlöser en omstart av appen för att hämta den uppdaterade avbildningen.
  • Samlar in information från arbetsflödets körningsloggar och visar den på fliken Loggar i appens distributionscenter.

Du kan anpassa GitHub Actions-byggprovidern på följande sätt:

  • Anpassa arbetsflödesfilen när den har genererats på din GitHub-lagringsplats. Mer information finns i Arbetsflödessyntax för GitHub Actions. Se bara till att arbetsflödet slutar med åtgärden Azure/webapps-deploy för att utlösa en omstart av appen.
  • Om den valda grenen är skyddad kan du fortfarande förhandsgranska arbetsflödesfilen utan att spara konfigurationen och sedan lägga till den och nödvändiga GitHub-hemligheter i lagringsplatsen manuellt. Den här metoden ger dig inte loggintegrering med Azure-portalen.
  • I stället för en publiceringsprofil distribuerar du med hjälp av tjänstens huvudnamn i Microsoft Entra-ID.

Autentisera med tjänstens huvudnamn

Den här valfria konfigurationen ersätter standardautentiseringen med publiceringsprofiler i den genererade arbetsflödesfilen.

Generera ett huvudnamn för tjänsten med kommandot az ad sp create-for-rbac i Azure CLI. I följande exempel ersätter du <prenumerations-ID>, <gruppnamn> och <appnamn> med dina egna värden. Spara hela JSON-utdata för nästa steg, inklusive den översta nivån {}.

az ad sp create-for-rbac --name "myAppDeployAuth" --role contributor \
                            --scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
                            --json-auth

Viktigt!

För säkerhet beviljar du den minsta nödvändiga åtkomsten till tjänstens huvudnamn. Omfånget i föregående exempel är begränsat till den specifika App Service-appen och inte hela resursgruppen.

I GitHub bläddrar du till lagringsplatsen och väljer sedan Inställningar > Hemligheter > Lägg till en ny hemlighet. Klistra in hela JSON-utdata från Azure CLI-kommandot i hemlighetens värdefält. Ge hemligheten ett namn som AZURE_CREDENTIALS.

I arbetsflödesfilen som genereras av Distributionscenter ändrar duazure/webapps-deploy steget med kod som i följande exempel:

- name: Sign in to Azure 
# Use the GitHub secret you added
- uses: azure/login@v1
    with:
    creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
# Remove publish-profile
- uses: azure/webapps-deploy@v2
    with:
    app-name: '<app-name>'
    slot-name: 'production'
    images: '<registry-server>/${{ secrets.AzureAppService_ContainerUsername_... }}/<image>:${{ github.sha }}'
    - name: Sign out of Azure
    run: |
    az logout

Automatisera med CLI

Om du vill konfigurera containerregistret och Docker-avbildningen kör duaz webapp config container set.

az webapp config container set --name <app-name> --resource-group <group-name> --docker-custom-image-name '<image>:<tag>' --docker-registry-server-url 'https://<registry-name>.azurecr.io' --docker-registry-server-user '<username>' --docker-registry-server-password '<password>'

Om du vill konfigurera en Docker Compose-app (multi-container) förbereder du en Docker Compose-fil lokalt och körsedan az webapp config container set med parametern --multicontainer-config-file . Om Docker Compose-filen innehåller privata avbildningar lägger du till--docker-registry-server-* parametrar enligt föregående exempel.

az webapp config container set --resource-group <group-name> --name <app-name> --multicontainer-config-file <docker-compose-file>

Om du vill konfigurera CI/CD från containerregistret till din app kördu az webapp deployment container config med parametern --enable-cd . Kommandot matar ut webhookens URL, men du måste skapa webhooken i registret manuellt i ett separat steg. Följande exempel aktiverar CI/CD i din app och använder sedan webhookens URL i utdata för att skapa webhooken i Azure Container Registry.

ci_cd_url=$(az webapp deployment container config --name <app-name> --resource-group <group-name> --enable-cd true --query CI_CD_URL --output tsv)

az acr webhook create --name <webhook-name> --registry <registry-name> --resource-group <group-name> --actions push --uri $ci_cd_url --scope '<image>:<tag>'

Fler resurser