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 eller Docker Hub.
1. Gå till Distributionscenter
I Azure Portalnavigerar du till hanteringssidan för din App Service appen.
I den vänstra menyn klickar du på Distributionscenter > Inställningar.
2. Välj distributionskälla
Välj distributionskälla beror på ditt scenario:
- Containerregistret uppsättningar CI/CD mellan ditt containerregister och App Service.
- Alternativet GitHub åtgärder är till för dig om du underhåller källkoden för containeravbildningen i GitHub. Utlöst av nya genomföranden till GitHub-lagringsplatsen kan åtgärden distribuera köras och direkt till containerregistret och sedan uppdatera din App Service för att köra
docker builddocker pushden nya avbildningen. Mer information finns i Så här fungerar CI/CD med GitHub Actions. - Om du vill konfigurera CI/CD med Azure Pipelines kan du gå till Distribuera en Azure Web App-container från Azure Pipelines.
Anteckning
För en Docker Compose-app väljer du Container Registry.
Om du väljer GitHub åtgärder 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 auktoriserat ditt Azure-GitHub väljer du den organisation, lagringsplats och gren som du vill distribuera från.
2. Konfigurera registerinställningar
3. Konfigurera registerinställningar
Om du vill distribuera en app med flera containrar (Docker Compose) väljer du Docker Compose i Containertyp.
Om du inte ser listrutan Containertyp bläddrar du tillbaka till Källa och väljer Container Registry.
I Registerkälla väljer du var containerregistret finns. Om det varken är Azure Container Registry eller Docker Hub väljer du Privat register.
Anteckning
Om appen för flera containrar (Docker Compose) använder fler än en privat avbildning kontrollerar du att de privata avbildningarna finns i samma privata register och är tillgängliga med samma autentiseringsuppgifter. Om din app med flera containrar endast använder offentliga avbildningar väljer du Docker 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 register i samma prenumeration som din app. Välj det register som du vill använda.
Anteckning
- Om du vill använda hanterade identiteter för att låsa ACR-åtkomst följer du den här guiden:
- Om du vill distribuera från ett register i en annan prenumeration väljer du Privat register i Registerkälla i stället.
Välj den avbildning och tagg som ska distribueras. Om du vill kan du skriva startkommandot i startfilen.
Följ nästa steg beroende på containertypen:
- 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-fileneller 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 kan du skriva startkommandot i startfilen.
App Service lägger till strängen i startfilen i slutet av kommandot docker run (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 det väljer du På i Kontinuerlig distribution.
Anteckning
Om du GitHub åtgärder i källa får du inte det här alternativet eftersom CI/CD hanteras av GitHub åtgärder direkt. I stället visas avsnittet Arbetsflödeskonfiguration där du kan klicka på Förhandsgranska fil för att granska arbetsflödesfilen. Azure sparar den här filen i den GitHub källlagringsplatsen 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 App Service en webhook till din lagringsplats i Azure Container Registry eller Docker Hub. Din lagringsplats publicerar till den här webhooken när den valda avbildningen uppdateras med docker push . Webhooken gör att din App Service startas om och körs för docker pull att få den uppdaterade avbildningen.
För andra privata register kan du publicera 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 webhook-URL:en.
Anteckning
Stödet för appar med flera containrar (Docker Compose) är begränsat:
- För Azure Container Registry skapar App Service en webhook i det valda registret med registret som omfång. En till en lagringsplats i registret (inklusive de som inte refereras till av
docker pushdocker 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 i avbildningarna som anges i Docker Compose-filen.
4. Spara dina inställningar
5. Spara dina inställningar
Klicka på Spara.
Så här fungerar CI/CD med GitHub Actions
Om du väljer GitHub åtgärder i källa (seVälj distributionskälla) App Service du CI/CD på följande sätt:
- Sätter in en GitHub Actions-arbetsflödesfil i din GitHub 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 sedan
docker pushför att distribuera till den. - 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 i 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. Lägg sedan till den och de nödvändiga GitHub till din lagringsplats manuellt. Den här metoden ger dig inte loggintegrering med Azure Portal.
- I stället för en publiceringsprofil distribuerar du med hjälp av ett huvudnamn för tjänsten Azure Active Directory.
Autentisera med ett huvudnamn för tjänsten
Den här valfria konfigurationen ersätter standardautentisering 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 <subscription-id> du , och med dina egna <group-name> <app-name> 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> \
--sdk-auth
Viktigt
Av säkerhetsskäl beviljar du den lägsta nödvändiga åtkomsten till tjänstens huvudnamn. Omfånget i föregående exempel är begränsat till den App Service appen och inte hela resursgruppen.
I GitHub bläddrar du till lagringsplatsen och väljer sedan Inställningar > Secrets > Add a new secret ( 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 du steget med kod som i azure/webapps-deploy 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 du az 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 app med flera containrar (Docker Compose) förbereder du en Docker Compose-fil lokalt och kör sedan az webapp config container set med --multicontainer-config-file parametern . Om docker Compose-filen innehåller privata avbildningar lägger du till parametrar enligt --docker-registry-server-* 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ör du az webapp deployment container config med --enable-cd parametern . Kommandot matar ut webhook-URL:en, 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 webhook-URL:en 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>'