Déployer un conteneur personnalisé sur App Service à l’aide d’Azure Pipelines
Azure DevOps vous permet d’héberger, de créer, de planifier et de tester votre code avec des workflows gratuits. L’utilisation d’Azure Pipelines comme l’un de ces workflows vous permet de déployer une application avec CI/CD qui fonctionne avec n’importe quelle plateforme et n’importe quel cloud. Un pipeline est défini en tant que fichier YAML dans le répertoire racine de votre dépôt.
Dans cet article, nous utilisons Azure Pipelines pour déployer une application conteneurisée Windows vers App Service à partir d'un dépôt Git dans Azure DevOps. Il suppose que vous avez déjà une application .NET avec un fichier docker dans Azure DevOps.
Prérequis
- Compte Azure avec un abonnement actif. Créez un compte gratuitement.
- Une organisation Azure DevOps. Créez-en un gratuitement.
- Application Windows opérationnelle avec Dockerfile hébergé sur Azure Repos.
Ajouter une connexion de service
Avant de créer votre pipeline, vous devez créer votre connexion de service puisque vous serez invité à choisir et à vérifier votre connexion lors de la création du modèle. Une connexion de service vous permet de vous connecter au registre de votre choix (ACR ou Docker Hub) lorsque vous utilisez les modèles de tâches. Lors de l'ajout d'une nouvelle connexion de service, choisissez l'option Docker Registry. Le formulaire suivant vous demande de choisir Docker Hub ou Azure Container Registry et de fournir les informations nécessaires. Pour suivre ce tutoriel, utilisez Azure Container Registry. Vous pouvez créer une connexion de service en suivant les instructions fournies ici.
Sécuriser vos secrets
Comme nous utilisons des informations sensibles auxquelles vous ne voulez pas que d'autres personnes aient accès, nous utilisons des variables pour protéger nos informations. Créez une variable en suivant les instructions ici.
Pour ajouter une variable, cliquez sur le bouton Variables en regard du bouton Enregistrer en haut à droite de l’affichage d’édition de votre pipeline. Sélectionnez le bouton Nouvelle variable et entrez vos informations. Ajoutez les variables ci-dessous avec vos propres secrets appropriés à chaque ressource.
- vmImageName : « windows-latest »
- imageRepository : « your-image-repo-name »
- dockerfilePath : « $(Build.SourcesDirectory)/path/to/Dockerfile »
- dockerRegistryServiceConnection : « your-service-connection-number »
Créer un pipeline
Une fois que votre dépôt est créé avec votre application .NET et le fichier docker correspondant, vous pouvez créer votre pipeline en suivant ces étapes.
- Accédez à Pipelines dans la barre de menus de gauche, puis cliquez sur le bouton Créer un pipeline
- Dans l’écran suivant, sélectionnez Git Azure Repos comme option de dépôt et sélectionnez le référentiel où se trouve votre code
- Sous l’onglet Configurer, choisissez l’option Pipeline de démarrage
- Sous l’onglet Révision suivante, cliquez sur le bouton Enregistrer
Générer et envoyer (push) une image sur Azure container registry
Une fois votre pipeline créé et sauvegardé, vous devrez le modifier pour exécuter les étapes de construction du conteneur, de poussée vers un registre et de déploiement de l'image vers App Service. Pour démarrer, accédez au menu Pipelines, choisissez votre pipeline que vous avez créé, puis cliquez sur le bouton Modifier.
Tout d'abord, vous devez ajouter la tâche docker afin de pouvoir construire l'image. Ajoutez le code suivant et remplacez le Dockerfile : app/Dockerfile par le chemin de votre Dockerfile.
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
vmImageName: 'windows-latest'
imageRepository: 'your-image-repo-name'
dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
dockerRegistryServiceConnection: 'your-service-connection-number'
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
Ajouter la tâche Déployer App Service
Ensuite, vous devez configurer la tâche de déploiement. Vous devez pour cela indiquer le nom de l'abonnement, le nom de l'application et le registre du conteneur. Ajoutez une nouvelle étape au fichier yaml en collant le code ci-dessous.
- stage: Deploy
displayName: Deploy to App Service
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
Ensuite, accédez à l’onglet Afficher l’assistant dans le coin supérieur droit et recherchez la tâche Déployer Azure App Service et remplissez le formulaire suivant :
- Type de connexion : Azure Resource Manager
- Abonnement Azure : nom de votre abonnement
- Type App Service : Web App pour conteneurs (Windows)
- Nom App Service : nom de votre application
- Registre ou espace de noms : your-azure-container-registry-namespace
- Image : your-azure-container-registry-image-name
Une fois ces éléments renseignés, cliquez sur le bouton Ajouter pour ajouter la tâche ci-dessous :
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'my-subscription-name'
appType: 'webAppHyperVContainer'
WebAppName: 'my-app-name'
DockerNamespace: 'myregsitry.azurecr.io'
DockerRepository: 'dotnetframework:12'
Une fois la tâche ajoutée, le pipeline est prêt à fonctionner. Cliquez sur le bouton Valider et enregistrer, puis exécutez le pipeline. Le pipeline suit les étapes pour construire et pousser l'image du conteneur Windows vers Azure Container Registry et déployer l'image vers App Service.
Voici un exemple de fichier yaml complet :
trigger:
- main
pool:
vmImage: 'windows-latest'
variables:
vmImageName: 'windows-latest'
imageRepository: 'your-image-repo-name'
dockerfilePath: '$(Build.SourcesDirectory)/path/to/Dockerfile'
dockerRegistryServiceConnection: 'your-service-connection-number'
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build job
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
- stage: Deploy
displayName: Deploy to App Service
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'my-subscription-name'
appType: 'webAppHyperVContainer'
WebAppName: 'my-app-name'
DockerNamespace: 'myregsitry.azurecr.io'
DockerRepository: 'dotnetframework:12'