Continue implementatie met aangepaste containers in Azure App Service

In deze zelfstudie configureert u continue implementatie voor een aangepaste containerafbeelding vanuit beheerde Azure Container Registry of Docker Hub.

1. Ga naar Implementatiecentrum

Navigeer in Azure Portalnaar de beheerpagina voor uw App Service app.

Klik in het linkermenu op Implementatiecentrum > Instellingen.

2. Implementatiebron kiezen

De implementatiebron kiezen is afhankelijk van uw scenario:

  • Container Registry stelt CI/CD in tussen uw containerregister en App Service.
  • De GitHub Actions-optie is voor u als u de broncode voor uw containerafbeelding in de GitHub. De implementatieactie wordt geactiveerd door nieuwe commits naar uw GitHub-opslagplaats en kan rechtstreeks naar uw containerregister worden uitgevoerd en vervolgens uw App Service-app bijwerken om de nieuwe afbeelding uit docker build docker push te voeren. Zie How CI/CD works with GitHub Actions (Hoe CI/CD werkt met GitHub Actions) voor meer informatie.
  • Zie Deploy an Azure Web App Container from Azure Pipelines (Een Azure Web App-container implementeren vanuit Azure Pipelines) voor het instellen van CI/CD met Azure Pipelines.

Notitie

Selecteer voor een Docker Compose-app Container Registry.

Als u acties GitHub, klikt u op Autorisatie en volgt u de autorisatieprompts. Als u al eerder hebt geautoriseerd met GitHub, kunt u implementeren vanuit de opslagplaats van een andere gebruiker door te klikken op Account wijzigen.

Nadat u uw Azure-account hebt geautoriseerd GitHub, selecteert u de organisatie, opslagplaats en vertakking waar u wilt implementeren.

2. Registerinstellingen configureren

3. Registerinstellingen configureren

Als u een app met meerdere containers (Docker Compose) wilt implementeren, selecteert u Docker Compose in Containertype.

Als u de vervolgkeuzebalk Containertype niet ziet, schuift u terug naar Bron en selecteert u Container Registry.

Selecteer in Registerbron waar uw containerregister zich is. Selecteer Privéregister als dit geen Azure Container Registry of Docker Hub is.

Notitie

Als uw app met meerdere containers (Docker Compose) meer dan één privé-afbeelding gebruikt, moet u ervoor zorgen dat de persoonlijke afbeeldingen zich in hetzelfde privéregister en toegankelijk zijn met dezelfde gebruikersreferenties. Als uw app met meerdere containers alleen openbare afbeeldingen gebruikt, selecteert u Docker Hub, zelfs als sommige afbeeldingen zich niet in de Docker Hub.

Volg de volgende stappen door het tabblad te selecteren dat overeenkomt met uw keuze.

In de vervolgkeuzelijst Register worden de registers in hetzelfde abonnement als uw app weergegeven. Selecteer het register dat u wilt.

Notitie

Selecteer de te implementeren afbeelding en tag. Als u wilt, typt u de opstartopdracht in Opstartbestand.

Volg de volgende stap, afhankelijk van het containertype:

  • Selecteer voor Docker Compose het register voor uw persoonlijke afbeeldingen. Klik op Bestand kiezen om uw Docker Compose-bestandte uploaden of plak de inhoud van uw Docker Compose-bestand in Config.
  • Selecteer voor Enkele container de te implementeren afbeelding en tag. Als u wilt, typt u de opstartopdracht in Opstartbestand.

App Service wordt de tekenreeks in Het opstartbestand toegevoegd aan het einde van de opdracht docker run (als [COMMAND] [ARG...] het segment) bij het starten van de container.

3. CI/CD inschakelen

4. CI/CD inschakelen

App Service biedt ondersteuning voor CI/CD-integratie met Azure Container Registry en Docker Hub. Als u dit wilt inschakelen, selecteert u Aan in Doorlopende implementatie.

Notitie

Als u acties GitHub in bron selecteert, krijgt u deze optie niet omdat CI/CD rechtstreeks door GitHub verwerkt. In plaats daarvan ziet u de sectie Werkstroomconfiguratie, waarin u kunt klikken op Preview-bestand om het werkstroombestand te inspecteren. Azure legt dit bestand vast in de geselecteerde GitHub bronopslagplaats om build- en implementatietaken te verwerken. Zie How CI/CD works with GitHub Actions (Hoe CI/CD werkt met GitHub Actions) voor meer informatie.

Wanneer u deze optie inschakelen, App Service een webhook toegevoegd aan uw opslagplaats in Azure Container Registry of Docker Hub. Uw opslagplaats plaatst deze webhook wanneer de geselecteerde afbeelding wordt bijgewerkt met docker push . De webhook zorgt ervoor dat uw App Service-app opnieuw wordt gestart en uitgevoerd docker pull om de bijgewerkte afbeelding op te halen.

Voor andere privéregisters kunt u handmatig of als stap in een CI/CD-pijplijn een bericht naar de webhook plaatsen. Klik in Webhook-URL op de knop Kopiëren om de webhook-URL 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 naar een opslagplaats in het register (met inbegrip van de opslagplaatsen waarnaar niet wordt verwezen door uw docker push Docker Compose-bestand) activeert het opnieuw starten van de app. Mogelijk wilt u de webhook wijzigen in een kleiner bereik.
  • Docker Hub biedt geen ondersteuning voor webhooks op registerniveau. U moet de webhooks handmatig toevoegen aan de afbeeldingen die zijn opgegeven in uw Docker Compose-bestand.

4. Uw instellingen opslaan

5. Uw instellingen opslaan

Klik op Opslaan.

Hoe CI/CD werkt met GitHub Actions

Als u acties GitHub bron (zie Implementatiebronkiezen), App Service u CI/CD op de volgende manieren in:

  • Zet een werkstroombestand GitHub acties in uw GitHub opslagplaats voor het afhandelen van build- en implementatietaken voor 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 voert vervolgens uit om dit docker push te implementeren.
  • Hiermee wordt het publicatieprofiel voor uw app toegevoegd als GitHub geheim. Het gegenereerde werkstroombestand gebruikt dit geheim om te verifiëren met App Service en voert vervolgens de actie Azure/webapps-deploy uit om de bijgewerkte afbeelding te configureren, waardoor een app opnieuw wordt opgestart om de bijgewerkte afbeelding op te halen.
  • Legt informatie vast uit de werkstroomrunlogboeken en geeft deze weer op het tabblad Logboeken in het Implementatiecentrum van uw app.

U kunt de buildprovider GitHub Acties op de volgende manieren aanpassen:

  • Pas het werkstroombestand aan nadat het is gegenereerd in uw GitHub opslagplaats. Zie Werkstroomsyntaxis voor GitHub Acties voor meer informatie. Zorg ervoor dat de werkstroom eindigt met de actie Azure/webapps-deploy om het opnieuw starten van de 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. Vervolgens kunt u het en de vereiste GitHub in uw opslagplaats handmatig toevoegen. Deze methode geeft u geen logboekintegratie met de Azure Portal.
  • Implementeer in plaats van een publicatieprofiel met behulp van een service-principal in Azure Active Directory.

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 <subscription-id> , en door uw eigen <group-name> <app-name> waarden. Sla de volledige JSON-uitvoer op voor de volgende stap, met inbegrip van 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> \
                            --sdk-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 GitHub naar uw opslagplaats en selecteer vervolgens Instellingen > Geheimen > Een nieuw geheim toevoegen. 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 stap met code zoals in het azure/webapps-deploy 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 setuit om het containerregister en de Docker-afbeelding 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 app met meerdere containers (Docker Compose) wilt configureren, bereidt u een Docker Compose-bestand lokaal voor en voer vervolgens az webapp config container set uit met de parameter --multicontainer-config-file . Als uw Docker Compose-bestand persoonlijke afbeeldingen bevat, voegt u --docker-registry-server-* parameters toe zoals weergegeven in het vorige voorbeeld.

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

Voer az webapp deployment container config uit met de parameter om CI/CD vanuit het containerregister naar uw app te --enable-cd configureren. Met de opdracht wordt de webhook-URL uitgevoerd, maar u moet de webhook in het register handmatig maken in een afzonderlijke stap. In het volgende voorbeeld wordt CI/CD in uw app in staat gemaakt 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>'

Meer bronnen