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.

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électionnezParamètresdu Centre> de déploiement.

Sélectionner la source de 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.
  • Sélectionnez 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.

Si vous sélectionnez 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.

Configurer les paramètres du Registre

Configurer les paramètres du Registre

Remarque

Les conteneurs sidecar réussissent à utiliser des applications multiconteneur (Docker Compose) dans App Service. Pour commencer, consultez Didacticiel : 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é.

Remarque

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 Registre privé dans 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 taper la commande de démarrage dans le fichier de démarrage.

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

  • Docker Compose : sélectionnez le registre pour 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.
  • Conteneur unique : sélectionnez les valeurs de l’image et de l’étiquette que vous souhaitez déployer. Vous pouvez taper la commande de démarrage dans le fichier de démarrage.

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

Activer CI/CD

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.

Remarque

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 dépôt publie sur ce webhook chaque fois que vous mettez à jour votre image sélectionnée 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 s’assurer que le webhook fonctionne correctement, activez l’option Identifiants de publication d’authentification de base dans 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 l’option Informations d’identification d’authentification de base est activée, accédez à Configuration>Paramètres généraux dans 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.

Remarque

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 sélectionnez 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 se connecter à votre registre privé. Ensuite, il exécute 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. Il exécute ensuite l’action Azure/webapps-deploy pour configurer l’image 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 déclencher un redémarrage d’une application, le flux de travail doit se terminer par l’action Azure/webapps-deploy . Pour plus d’informations, accédez à la syntaxe de flux de travail pour GitHub Actions.
  • 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 dans une étape distincte. 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>'