Partager via


Déploiement continu avec des conteneurs personnalisés dans Azure App Service

Cet article explique comment configurer l’intégration continue et la livraison continue (CI/CD) pour une image conteneur personnalisée à partir de référentiels Azure Container Registry managés ou de Docker Hub.

1. Accédez au Centre de déploiement

Dans le portail Azure, accédez au volet de gestion de votre application Azure App Service.

Dans le menu de la barre latérale, sous Déploiement, sélectionnez Centre de déploiement. Choisissez l’onglet Paramètres .

2. Sélectionner la source du code

Dans le menu déroulant Source , sélectionnez la source de déploiement en fonction des critères suivants :

  • Container Registry configure CI/CD entre votre registre de conteneurs et App Service.
  • Choisissez l’option GitHub Actions si vous conservez le code source de votre image conteneur dans GitHub. De nouvelles validations dans votre dépôt GitHub déclenchent l’action de déploiement, qui peut s’exécuter docker build et docker push directement dans votre registre de conteneurs. Il met ensuite à jour votre application App Service pour exécuter la nouvelle image. Pour plus d’informations, consultez Fonctionnement de CI/CD avec GitHub Actions.
  • Pour configurer CI/CD avec Azure Pipelines, consultez Déployer un conteneur Azure Web App à partir d’Azure Pipelines.
  • Pour une application Docker Compose, sélectionnez Container Registry.

Si vous choisissez GitHub Actions, sélectionnez Autoriser et suivez les invites d’autorisation. Si vous avez précédemment autorisé gitHub, vous pouvez déployer à partir du référentiel d’un autre utilisateur en sélectionnant Modifier le compte.

Après avoir autorisé votre compte Azure avec GitHub, sélectionnez l’organisation, le référentiel et la branche à partir duquel effectuer le déploiement.

2. Configurer les paramètres du Registre

3. Configurer les paramètres du Registre

Notes

Les conteneurs sidecar réussissent à utiliser des applications multiconteneur (Docker Compose) dans App Service. Pour commencer, consultez Tutoriel : Configurer un conteneur sidecar pour des conteneurs personnalisés dans Azure App Service.

Pour déployer une application à plusieurs conteneurs (Docker Compose), sélectionnez Docker Compose dans le type de conteneur.

Si vous ne voyez pas la liste déroulante Type de conteneur , faites défiler vers la source et sélectionnez Container Registry.

Dans la source du Registre, sélectionnez l’emplacement de votre registre de conteneurs. S’il ne s’agit pas d’Azure Container Registry ou de Docker Hub, sélectionnez Registre privé.

Notes

Si votre application multiconteneur (Docker Compose) utilise plusieurs images privées, vérifiez que les images privées se trouvent dans le même registre privé et sont accessibles avec les mêmes informations d’identification utilisateur. Si votre application multiconteneur utilise uniquement des images publiques, sélectionnez Docker Hub, même si certaines images ne sont pas dans Docker Hub.

Suivez les étapes suivantes en sélectionnant l’onglet correspondant à votre choix.

La liste déroulante Registre affiche les registres dans le même abonnement que votre application. Sélectionnez le Registre souhaité.

Pour effectuer un déploiement à partir d’un registre dans un autre abonnement, sélectionnez Le Registre privé dans la source du Registre à la place.

Pour utiliser des identités managées pour verrouiller l’accès Azure Container Registry, consultez :

Sélectionnez l’image et la balise à déployer. Vous pouvez choisir de taper la commande de démarrage dans le fichier de démarrage.

Suivez l’étape suivante, en fonction de la valeur type de conteneur :

  • Pour Docker Compose, sélectionnez le Registre de vos images privées. Sélectionnez Choisir un fichier pour charger votre fichier Docker Compose ou collez simplement le contenu de votre fichier Docker Compose dans Config.
  • Pour un conteneur unique, sélectionnez l’image et la balise à déployer. Vous pouvez choisir de taper la commande de démarrage dans le fichier de démarrage.

App Service ajoute la chaîne du Fichier de démarrage à la fin de la commande docker run (en tant que segment [COMMAND] [ARG...]) lors du démarrage de votre conteneur.

3. Activer CI/CD

4. Activer CI/CD

App Service prend en charge l’intégration de CI/CD avec Azure Container Registry et Docker Hub. Pour activer l’intégration CI/CD, sélectionnez Activé dans le déploiement continu.

Notes

Si vous sélectionnez GitHub Actions dans la source, vous ne voyez pas cette option, car CI/CD est géré directement par GitHub Actions. Au lieu de cela, vous voyez une section Configuration du flux de travail , dans laquelle vous pouvez sélectionner un fichier d’aperçu pour inspecter le fichier de flux de travail. Azure valide ce fichier dans le référentiel GitHub sélectionné afin de gérer les tâches de génération et de déploiement. Pour plus d’informations, consultez Fonctionnement de CI/CD avec GitHub Actions.

Quand vous activez cette option, App Service ajoute un webhook à votre référentiel dans Azure Container Registry ou Docker Hub. Votre référentiel publie sur ce webhook chaque fois que l’image sélectionnée est mise à jour avec docker push. Le webhook provoque le redémarrage et l’exécution de votre application App Service docker pull pour récupérer l’image mise à jour.

Pour garantir le bon fonctionnement du webhook, il est essentiel d’activer l’option Informations d’identification d’authentification de base au sein de votre application web. Si ce n’est pas le cas, vous pouvez recevoir une erreur « 401 non autorisé » pour le webhook.

Pour vérifier si Informations d'identification de publication d’authentification de base est activé, accédez à Configuration>Paramètres généraux de votre application web. Recherchez la section Paramètres de plateforme, puis sélectionnez l’option Identifiants de publication d’authentification de base.

Pour d’autres registres privés, vous pouvez publier manuellement sur le webhook ou en tant qu’étape dans un pipeline CI/CD. Dans l’URL du webhook, sélectionnez le bouton Copier pour obtenir l’URL du webhook.

Sélectionnez Enregistrer pour enregistrer vos paramètres.

Notes

La prise en charge des applications à plusieurs conteneurs (Docker Compose) est limitée. Pour Azure Container Registry, App Service crée un webhook dans le registre sélectionné et définit ce dernier comme étendue. Un docker push vers n’importe quel référentiel du registre (y compris ceux qui ne sont pas référencés par votre fichier Docker Compose) déclenche le redémarrage de l’application. Vous souhaiterez peut-être modifier le webhook pour un périmètre plus restreint. Docker Hub ne prend pas en charge les webhooks au niveau du Registre. Vous devez ajouter manuellement les webhooks aux images spécifiées dans votre fichier Docker Compose.

Fonctionnement de CI/CD avec GitHub Actions

Si vous choisissez GitHub Actions dans le menu déroulant Sélectionner une source de code , App Service configure CI/CD de la manière suivante :

  • Il dépose un fichier de flux de travail GitHub Actions dans votre dépôt GitHub pour gérer les tâches de génération et de déploiement dans App Service.
  • Il ajoute les informations d’identification de votre registre privé en tant que secrets GitHub. Le fichier de flux de travail généré exécute l’action Azure/docker-login pour vous connecter à votre registre privé, puis utilise docker push pour le déployer.
  • Il ajoute le profil de publication de votre application en tant que secret GitHub. Le fichier de flux de travail généré utilise ce secret pour s’authentifier auprès d’App Service, puis exécute l’action pour configurer l’image Azure/webapps-deploy mise à jour, ce qui déclenche un redémarrage d’une application pour extraire l’image mise à jour.
  • Il capture des informations à partir des journaux d’exécution du flux de travail et les affiche sous l’onglet Journaux dans le Centre de déploiement de votre application.

Vous pouvez personnaliser le fournisseur de build GitHub Actions comme suit :

  • Personnalisez le fichier de flux de travail après sa génération dans votre dépôt GitHub. Pour plus d’informations, consultez la syntaxe du flux de travail pour GitHub Actions. Le flux de travail doit se terminer par l’action Azure/webapps-deploy pour déclencher un redémarrage de l’application.
  • Si la branche sélectionnée est protégée, vous pouvez toujours afficher un aperçu du fichier de flux de travail sans enregistrer la configuration. Ajoutez-le et les secrets GitHub requis dans votre référentiel manuellement. Cette méthode ne permet pas l’intégration des journaux avec le portail Azure.
  • Au lieu d’un profil de publication, effectuez le déploiement à l’aide d’un principal de service dans Microsoft Entra ID.

S’authentifier avec un principal de service

Cette configuration facultative remplace l’authentification par défaut par les profils de publication dans le fichier de workflow généré.

Générez un principal de service à l’aide de la az ad sp create-for-rbac commande dans Azure CLI. Dans l’exemple suivant, remplacez <subscription-id>, <group-name et app-name><par vos propres valeurs.> Enregistrez l’intégralité de la sortie JSON pour l’étape suivante, y compris le niveau {}supérieur.

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

Important

Pour des raisons de sécurité, accordez l’accès minimal requis au principal du service. L’étendue dans l’exemple précédent est limitée à l’application App Service spécifique, et non à l’ensemble du groupe de ressources.

Dans GitHub, accédez à votre dépôt, puis sélectionnez Paramètres>secrets>Ajouter un nouveau secret. Collez l’intégralité de la sortie JSON de la commande Azure CLI dans le champ de valeur du secret. Donnez au secret un nom tel que AZURE_CREDENTIALS.

Dans le fichier de workflow généré par le Centre de déploiement, modifiez l’étape azure/webapps-deploy avec du code similaire à l’exemple suivant :

- 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

Automatiser avec CLI

Pour configurer le registre de conteneurs et l’image Docker, exécutez 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>'

Pour configurer une application à plusieurs conteneurs (Docker Compose), préparez un fichier Docker Compose localement, puis exécutez-le az webapp config container set avec le --multicontainer-config-file paramètre. Si votre fichier Docker Compose contient des images privées, ajoutez --docker-registry-server-* des paramètres comme indiqué dans l’exemple précédent.

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

Pour configurer CI/CD du registre de conteneurs vers votre application, exécutez az webapp deployment container config avec le paramètre --enable-cd. La commande génère l’URL du webhook, mais vous devez créer manuellement le webhook dans votre registre séparément. L’exemple suivant active CI/CD sur votre application, puis utilise l’URL du webhook dans la sortie pour créer le webhook dans 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>'