Partager via


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

Vous pouvez utiliser GitHub Actions pour créer un workflow de développement logiciel automatisé. Vous pouvez utiliser l’action Azure Web Deploy pour automatiser votre flux de travail et déployer des conteneurs personnalisés sur Azure App Service.

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 flux de travail de conteneur 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 conteneur.
Déployer 1. Déployez l’image conteneur.

Prérequis

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

Nous vous recommandons de vous authentifier auprès d’Azure App Services pour GitHub Actions à l’aide d’OpenID Connect. Vous pouvez également vous authentifier avec un principal de service ou un profil de publication.

Pour vous authentifier auprès d’Azure, enregistrez les informations d’identification de votre profil de publication ou votre principal de service comme secret GitHub. Vous accédez au secret dans votre flux de travail.

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 à App Service dans le portail Azure.

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

    Remarque

    À compter d’octobre 2020, les utilisateurs doivent définir le paramètre d’application pour les applications WEBSITE_WEBDEPLOY_USE_SCMtrue web Linux avant de télécharger le fichier. Pour savoir comment configurer les paramètres courants de l’application web, accédez à Configurer une application App Service dans le portail Azure.

  3. Enregistrez le fichier téléchargé. Vous utilisez 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.

Lorsque vous configurez votre flux de travail GitHub, utilisez le AZURE_WEBAPP_PUBLISH_PROFILE secret dans l’action déployer Azure Web App. 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 cet article 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 flux de travail 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 }}     

L’exemple suivant montre une partie du flux de travail qui crée une image Windows Docker. 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: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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: Windows Container Workflow
on: [push]
jobs:
  build:
    runs-on: windows-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 (Obligatoire) Nom de l’application App Service.
publish-profile (Facultatif) Utilisé avec des applications web (Windows et Linux) et des conteneurs d’applications web (Linux). Scénario multiconteneur non pris en charge. Publiez les contenus du fichier de profil \*.publishsettings avec des secrets de Web Deploy.
slot-name (Facultatif) Entrez un emplacement existant autre que l’emplacement de production.
package (Facultatif) Utilisé uniquement avec les applications web : chemin d’accès au package ou au dossier. \*.zip, \*.war, ou \*.jar, un dossier à déployer.
images (Obligatoire) Utilisé uniquement avec les conteneurs d’applications web : spécifiez le nom complet de l’image conteneur. Par exemple, myregistry.azurecr.io/nginx:latest ou python:3.12.12-alpine/. Pour une application multiconteneur, plusieurs noms d’images conteneur peuvent être fournis (séparés par plusieurs lignes).
configuration-file (Facultatif) Utilisé uniquement avec les conteneurs d’applications web : chemin d’accès du 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 }}'
name: Windows_Container_Workflow

on: [push]

jobs:
  build:
    runs-on: windows-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 }}'

Vous trouverez notre ensemble d’actions regroupées dans différents référentiels sur GitHub. Chaque référentiel contient de la documentation et des exemples pour vous aider à utiliser GitHub pour CI/CD et à déployer vos applications sur Azure.