Continue implementatie met aangepaste containers in Azure-app Service
In deze zelfstudie configureert u continue implementatie voor een aangepaste containerinstallatiekopieën van beheerde Azure Container Registry-opslagplaatsen of Docker Hub.
1. Ga naar Het Implementatiecentrum
Navigeer in Azure Portal naar de beheerpagina voor uw App Service-app.
Klik in het linkermenu op Instellingen van het Implementatiecentrum>.
2. Implementatiebron kiezen
Kies de implementatiebron, afhankelijk van uw scenario:
- Containerregister stelt CI/CD in tussen uw containerregister en App Service.
- De optie GitHub Actions is geschikt voor u als u de broncode voor uw containerinstallatiekopieën in GitHub onderhoudt. Geactiveerd door nieuwe doorvoeringen in uw GitHub-opslagplaats, kan de implementatieactie worden uitgevoerd
docker build
endocker push
rechtstreeks naar uw containerregister en vervolgens uw App Service-app bijwerken om de nieuwe installatiekopieën uit te voeren. Zie Hoe CI/CD werkt met GitHub Actions voor meer informatie. - Zie Een Azure Web App-container implementeren vanuit Azure Pipelines om CI/CD in te stellen met Azure Pipelines.
Notitie
Selecteer Container Registry voor een Docker Compose-app.
Als u GitHub Actions kiest, klikt u op Autoriseren en volgt u de autorisatieprompts. Als u al eerder bent geautoriseerd met GitHub, kunt u implementeren vanuit de opslagplaats van een andere gebruiker door op Account wijzigen te klikken.
Nadat u uw Azure-account met GitHub hebt geautoriseerd, selecteert u de organisatie, opslagplaats en vertakking waaruit u wilt implementeren.
2. Registerinstellingen configureren
3. Registerinstellingen configureren
Notitie
Sidecar-containers (preview) slagen in apps met meerdere containers (Docker Compose) in App Service. Zie Zelfstudie: Een sidecarcontainer configureren voor aangepaste container in Azure-app Service (preview) om aan de slag te gaan.
Als u een Docker Compose-app met meerdere containers wilt implementeren, selecteert u Docker Compose in containertype.
Als u de vervolgkeuzelijst Containertype niet ziet, schuift u terug naar bron en selecteert u Container Registry.
Selecteer in registerbron waar uw containerregister zich bevindt. Als dit geen Azure Container Registry of Docker Hub is, selecteert u Privéregister.
Notitie
Als uw Docker Compose-app meerdere containers (Docker Compose) meer dan één privé-installatiekopieën gebruikt, moet u ervoor zorgen dat de persoonlijke installatiekopieën zich in hetzelfde privéregister bevinden en toegankelijk zijn met dezelfde gebruikersreferenties. Als uw app met meerdere containers alleen openbare installatiekopieën gebruikt, selecteert u Docker Hub, zelfs als sommige installatiekopieën zich niet in Docker Hub bevinden.
Volg de volgende stappen door het tabblad te selecteren dat overeenkomt met uw keuze.
In de vervolgkeuzelijst Register worden de registers weergegeven in hetzelfde abonnement als uw app. Selecteer het gewenste register.
Notitie
- Als u beheerde identiteiten wilt gebruiken om toegang tot ACR te vergrendelen, volgt u deze handleiding:
- Als u wilt implementeren vanuit een register in een ander abonnement, selecteert u in plaats daarvan Privéregister in registerbron .
Selecteer de installatiekopieën en tags die u wilt implementeren. Typ desgewenst de opstartopdracht in het opstartbestand.
Volg de volgende stap, afhankelijk van het containertype:
- Selecteer voor Docker Compose het register voor uw persoonlijke installatiekopieën. Klik op Bestand kiezen om het Docker Compose-bestand te uploaden of plak de inhoud van het Docker Compose-bestand in de configuratie.
- Voor één container selecteert u de installatiekopieën en tags die u wilt implementeren. Typ desgewenst de opstartopdracht in het opstartbestand.
App Service voegt de tekenreeks in het opstartbestand toe aan het einde van de docker run
opdracht (als het [COMMAND] [ARG...]
segment) bij het starten van de container.
3. CI/CD inschakelen
4. CI/CD inschakelen
App Service ondersteunt CI/CD-integratie met Azure Container Registry en Docker Hub. Als u deze wilt inschakelen, selecteert u Aan in Continue implementatie.
Notitie
Als u GitHub Actions in de bron selecteert, krijgt u deze optie niet omdat CI/CD rechtstreeks wordt verwerkt door GitHub Actions. In plaats daarvan ziet u een sectie Werkstroomconfiguratie, waar u op Voorbeeldbestand kunt klikken om het werkstroombestand te controleren. Azure zet dit bestand door in de geselecteerde GitHub-bronopslagplaats voor het afhandelen van build- en implementatietaken. Zie Hoe CI/CD werkt met GitHub Actions voor meer informatie.
Wanneer u deze optie inschakelt, voegt App Service een webhook toe aan uw opslagplaats in Azure Container Registry of Docker Hub. Uw opslagplaats plaatst berichten op deze webhook wanneer de geselecteerde afbeelding wordt bijgewerkt met docker push
. De webhook zorgt ervoor dat uw App Service-app opnieuw wordt opgestart en uitgevoerd docker pull
om de bijgewerkte installatiekopieën op te halen.
Notitie
Om ervoor te zorgen dat de webhook goed functioneert, is het essentieel om de optie Referenties voor het publiceren van basisverificatie in uw web-app in te schakelen. Als u dit niet doet, kan dit leiden tot een fout van 401 die niet is geautoriseerd voor de webhook. Voer de volgende stappen uit om te controleren of Basic Auth Publishing Credentials is ingeschakeld:
- Navigeer naar de algemene instellingen voor de configuratie > van uw web-app.
- Zoek naar de sectie Platforminstelling , waar u de optie Publicatiereferenties voor basisverificatie vindt.
Voor andere privéregisters kunt u handmatig of als stap in een CI/CD-pijplijn posten naar de webhook. Klik in de WEBhook-URL op de knop Kopiëren om de URL van de webhook op te halen.
Notitie
Ondersteuning voor Apps met meerdere containers (Docker Compose) is beperkt:
- Voor Azure Container Registry maakt App Service een webhook in het geselecteerde register met het register als bereik. Een
docker push
naar een opslagplaats in het register (inclusief de opslagplaatsen waarnaar niet wordt verwezen door uw Docker Compose-bestand) activeert een app opnieuw opstarten. Mogelijk wilt u de webhook wijzigen in een smaller bereik. - Docker Hub biedt geen ondersteuning voor webhooks op registerniveau. U moet de webhooks handmatig toevoegen aan de installatiekopieën die zijn opgegeven in uw Docker Compose-bestand.
4. Sla uw instellingen op
5. Sla uw instellingen op
Klik op Opslaan.
Hoe CI/CD werkt met GitHub Actions
Als u GitHub Actions in Source kiest (zie Implementatiebron kiezen), stelt App Service CI/CD op de volgende manieren in:
- Zet een Werkstroombestand voor GitHub Actions op in uw GitHub-opslagplaats voor het afhandelen van build- en implementatietaken in App Service.
- Voegt de referenties voor uw privéregister toe als GitHub-geheimen. Het gegenereerde werkstroombestand voert de actie Azure/docker-login uit om u aan te melden met uw privéregister en wordt vervolgens uitgevoerd
docker push
om ernaar te implementeren. - Hiermee voegt u het publicatieprofiel voor uw app toe als GitHub-geheim. Het gegenereerde werkstroombestand maakt gebruik van dit geheim voor verificatie met App Service en voert vervolgens de actie Azure/webapps-deploy uit om de bijgewerkte installatiekopie te configureren, waardoor een app opnieuw wordt opgestart om de bijgewerkte installatiekopie op te halen.
- Hiermee worden gegevens uit de logboeken voor werkstroomuitvoering vastgelegd en weergegeven op het tabblad Logboeken in het Implementatiecentrum van uw app.
U kunt de Build-provider voor GitHub Actions op de volgende manieren aanpassen:
- Pas het werkstroombestand aan nadat het is gegenereerd in uw GitHub-opslagplaats. Zie Werkstroomsyntaxis voor GitHub Actions voor meer informatie. Zorg ervoor dat de werkstroom eindigt met de actie Azure/webapps-deploy om het opnieuw opstarten van een app te activeren.
- Als de geselecteerde vertakking is beveiligd, kunt u nog steeds een voorbeeld van het werkstroombestand bekijken zonder de configuratie op te slaan en deze vervolgens handmatig en de vereiste GitHub-geheimen in uw opslagplaats toe te voegen. Met deze methode beschikt u niet over de logboekintegratie met Azure Portal.
- In plaats van een publicatieprofiel implementeert u met behulp van een service-principal in Microsoft Entra-id.
Verifiëren met een service-principal
Deze optionele configuratie vervangt de standaardverificatie door publicatieprofielen in het gegenereerde werkstroombestand.
Genereer een service-principal met de opdracht az ad sp create-for-rbac in de Azure CLI. Vervang in het volgende voorbeeld abonnements-id>, <groepsnaam> en <app-naam> door uw eigen waarden.< Sla de volledige JSON-uitvoer op voor de volgende stap, inclusief het hoogste niveau {}
.
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
Belangrijk
Voor beveiliging verleent u de minimaal vereiste toegang tot de service-principal. Het bereik in het vorige voorbeeld is beperkt tot de specifieke App Service-app en niet de hele resourcegroep.
Blader in GitHub naar uw opslagplaats en selecteer vervolgens Instellingengeheimen > > Toevoegen een nieuw geheim. Plak de volledige JSON-uitvoer van de Azure CLI-opdracht in het waardeveld van het geheim. Geef het geheim een naam zoals AZURE_CREDENTIALS
.
Wijzig in het werkstroombestand dat is gegenereerd door het Implementatiecentrum de azure/webapps-deploy
stap met code, zoals in het volgende voorbeeld:
- 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
Automatiseren met CLI
Voer az webapp config container set uit om het containerregister en de Docker-installatiekopieën te configureren.
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>'
Als u een Docker Compose-app met meerdere containers wilt configureren, bereidt u lokaal een Docker Compose-bestand voor en voert u az webapp config container set uit met de --multicontainer-config-file
parameter. Als uw Docker Compose-bestand persoonlijke installatiekopieën bevat, voegt u parameters toe--docker-registry-server-*
, zoals wordt weergegeven in het vorige voorbeeld.
az webapp config container set --resource-group <group-name> --name <app-name> --multicontainer-config-file <docker-compose-file>
Als u CI/CD vanuit het containerregister naar uw app wilt configureren, voert u az webapp deployment container config uit met de --enable-cd
parameter. De opdracht voert de webhook-URL uit, maar u moet de webhook handmatig in uw register maken in een afzonderlijke stap. In het volgende voorbeeld wordt CI/CD in uw app ingeschakeld en wordt vervolgens de webhook-URL in de uitvoer gebruikt om de webhook te maken in 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>'