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
- Compte Azure avec un abonnement actif. Créez un compte gratuitement.
- Un compte GitHub. Si vous n’en avez pas, inscrivez-vous gratuitement. Vous devez disposer du code dans un référentiel GitHub pour le déployer sur Azure App Service.
- Un registre de conteneurs fonctionnel et l’application Azure App Service pour les conteneurs. Cet exemple utilise Azure Container Registry. Veillez à effectuer le déploiement complet sur Azure App Service pour les conteneurs. Contrairement aux applications web standard, les applications web pour conteneurs n’ont pas de page d’arrivée par défaut. Publiez le conteneur pour avoir un exemple fonctionnel.
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.
Accédez à votre service d’application dans le portail Azure.
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 surtrue
avant 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.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.
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.
Définissez un nouveau secret pour le nom d’utilisateur du registre nommé
REGISTRY_USERNAME
.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.