Déployer un conteneur personnalisé sur App Service à l’aide de GitHub Actions

GitHub Actions vous donne la possibilité de créer un workflow de développement logiciel automatisé. Grâce à l’action Azure Web Deploy, vous pouvez automatiser votre workflow pour déployer des conteneurs personnalisés sur App Service à l’aide de GitHub Actions.

Un workflow est défini par un fichier YAML (.yml) situé dans le chemin /.github/workflows/ de votre dépôt. Cette définition contient les étapes et les paramètres définissant le workflow.

Pour un workflow de conteneur Azure App Service, le fichier comporte trois sections :

Section Tâches
Authentification 1. Récupérez un principal de service ou un profil de publication.
2. Créez un secret GitHub.
Créer 1. Créez l’environnement.
2. Générez l’image de conteneur.
Déployer 1. Déployez l’image conteneur.

Prérequis

Générer les informations d’identification du déploiement

La méthode recommandée pour l’authentification auprès d’Azure App Service pour GitHub Actions consiste à utiliser un profil de publication. Vous pouvez également vous authentifier avec un principal de service ou OpenID Connect, mais le processus comporte davantage d’étapes.

Enregistrez les informations d’identification de votre profil de publication ou le principal du service en tant que secret GitHub pour vous authentifier auprès d’Azure. Vous allez accéder au secret dans votre workflow.

Un profil de publication est une information d’identification au niveau de l’application. Configurez votre profil de publication en tant que secret GitHub.

  1. Accédez à votre service d’application dans le portail Azure.

  2. Dans la page Vue d’ensemble, sélectionnez Obtenir le profil de publication.

    Notes

    À compter d’octobre 2020, les applications web Linux ont besoin que le paramètre d’application WEBSITE_WEBDEPLOY_USE_SCM soit défini sur trueavant de télécharger le fichier. Cette condition sera supprimée ultérieurement. Pour savoir comment configurer les paramètres courants d’une application web, consultez Configurer une application App Service dans le portail Azure.

  3. Enregistrez le fichier téléchargé. Vous utiliserez le contenu du fichier pour créer un secret GitHub.

Configurer le secret GitHub pour l’authentification

Dans GitHub, accédez à votre référentiel. Sélectionnez Paramètres > Sécurité > Secrets et variables > Actions > Nouveau secret de référentiel.

Pour utiliser les informations d’identification au niveau de l’application, collez le contenu du fichier de profil de publication téléchargé dans le champ de valeur du secret. Nommez le secret AZURE_WEBAPP_PUBLISH_PROFILE.

Quand vous configurez votre workflow GitHub, vous utilisez AZURE_WEBAPP_PUBLISH_PROFILE dans l’action Déployer l’application web Azure. Par exemple :

- uses: azure/webapps-deploy@v2
  with:
    publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

Configurer des secrets GitHub pour votre registre

Définissez les secrets à utiliser grâce à l’action Docker Login. L’exemple de ce document utilise Azure Container Registry pour le registre de conteneurs.

  1. Accédez à votre conteneur dans le portail Azure ou dans Docker et copiez le nom d’utilisateur et le mot de passe. Vous pouvez trouver le nom d’utilisateur et le mot de passe d’Azure Container Registry sur le portail Azure sous Paramètres>Clés d’accès pour votre registre.

  2. Définissez un nouveau secret pour le nom d’utilisateur du registre nommé REGISTRY_USERNAME.

  3. Définissez un nouveau secret pour le mot de passe du registre nommé REGISTRY_PASSWORD.

Générer l’image de conteneur

L’exemple suivant montre une partie du workflow qui génère une image Docker Node.js. Utilisez Docker Login pour vous connecter à un registre de conteneurs privé. Cet exemple utilise Azure Container Registry, mais la même action fonctionne pour les autres registres.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

Vous pouvez également utiliser la connexion à Docker pour vous connecter à plusieurs registres de conteneurs en même temps. Cet exemple comprend deux nouveaux secrets GitHub pour l’authentification avec docker.io. L’exemple suppose qu’il existe un Dockerfile au niveau racine du registre.

name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    - uses: azure/docker-login@v1
      with:
        login-server: index.docker.io
        username: ${{ secrets.DOCKERIO_USERNAME }}
        password: ${{ secrets.DOCKERIO_PASSWORD }}
    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

Déployer sur un conteneur App Service

Pour déployer votre image sur un conteneur personnalisé dans App Service, utilisez l’action azure/webapps-deploy@v2. Cette action a sept paramètres :

Paramètre Explication
app-name (Requis) Nom de l’application App Service
publish-profile (Facultatif) S’applique aux applications web (Windows et Linux) et aux conteneurs d’applications web (Linux). Les scénarios à plusieurs conteneurs ne sont pas pris en charge. Publier le contenu du fichier de profil (*.publishsettings) avec les secrets Web Deploy
slot-name (Facultatif) Entrer un emplacement existant autre que l’emplacement de production
package (Facultatif) S’applique uniquement à l’application web : Chemin d’accès au package ou dossier. *.zip, *.war, *.jar ou un dossier à déployer
images (Requis) S’applique uniquement aux conteneurs d’applications web : Spécifiez le nom complet de l’image ou des images conteneur. Par exemple, « myregistry.azurecr.io/nginx:latest » or « python:3.7.2-alpine/ ». Pour une application à plusieurs conteneurs, plusieurs noms d’images conteneur peuvent être fournis (séparés par plusieurs lignes)
configuration-file (Facultatif) S’applique uniquement aux conteneurs d’applications web : Chemin d’accès au fichier Docker-Compose. Doit être un chemin d’accès complet ou relatif au répertoire de travail par défaut. Requis pour les applications à plusieurs conteneurs.
startup-command (Facultatif) Entrez la commande de démarrage. Par exemple, dotnet run ou dotnet filename.dll
name: Linux Container Node Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - uses: azure/docker-login@v1
      with:
        login-server: mycontainer.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}

    - run: |
        docker build . -t mycontainer.azurecr.io/myapp:${{ github.sha }}
        docker push mycontainer.azurecr.io/myapp:${{ github.sha }}     

    - uses: azure/webapps-deploy@v2
      with:
        app-name: 'myapp'
        publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
        images: 'mycontainer.azurecr.io/myapp:${{ github.sha }}'

Étapes suivantes

Vous pouvez trouver notre ensemble d’Actions regroupées dans différents référentiels GitHub, chacun contenant de la documentation et des exemples pour vous aider à utiliser GitHub pour les opérations de CI/CD et à déployer vos applications sur Azure.