Exercice - Déployer un conteneur Docker sur Azure
Votre projet est fourni avec un pipeline de mise en production qui génère les projets dans la solution et déploie l’application web sur son App Service. Maintenant, il est temps de mettre à jour la construction du pipeline et de déployer le projet sous forme de conteneur.
Dans cette unité, vous allez :
- Définissez certaines variables de pipeline pour faciliter la maintenance du pipeline de construction.
- Remplacez les tâches de build existantes par une tâche unifiée pour générer et envoyer (push) un conteneur Docker.
- Remplacez la tâche de déploiement existante par une tâche qui met à jour l’application web App Service par la nouvelle image conteneur.
- Enregistrez le pipeline pour déclencher une génération et une mise en production.
Définir des variables à partager dans le pipeline
Ici, vous allez ajouter une nouvelle variable de pipeline à votre pipeline YAML existant défini dans azure-pipelines.yml.
Dans Azure DevOps, accédez à Pipelines.
Sélectionnez le pipeline.
Sélectionnez Modifier. Vérifiez que la branche est définie sur principale en la sélectionnant dans le menu déroulant. Cela affiche votre fichier azure-pipelines.yml .
Ajoutez la ligne mise en surbrillance ci-dessous pour ajouter des variables de pipeline nommées
webRepositoryettag. Celles-ci seront utilisées dans plusieurs tâches pour identifier de manière unique la version spécifique du conteneur référencé. Vous pouvez également supprimer labuildConfigurationvariable ; vous n’en aurez plus besoin.trigger: - '*' variables: buildConfiguration: 'Release' webRepository: 'web' tag: '$(Build.BuildId)'
Remplacer les tâches de la phase de construction
Andy: Je ne pense plus que nous avons besoin de ces tâches de génération, car le fichier Dockerfile dans le dossier de projet définit déjà la build souhaitée. Toutefois, je n’ai pas encore eu la chance de voir ce que nous pouvons utiliser pour générer l’image à l’aide d’un fichier Dockerfile. Vous avez des idées ?
Mara: Je recherchais juste ça. Il semble qu’il soit possible de générer le conteneur et même de le pousser vers le dépôt avec une seule tâche. Ajoutons-le maintenant.
Tâche Docker
Vous pouvez utiliser la tâche Docker pour générer et déployer des images Docker. Remplacez l’étape de build entière par l’extrait de code YAML ci-dessous.
- commande : spécifie la commande Docker à exécuter.
- buildContext : spécifie le chemin d’accès au contexte de build.
- référentiel : spécifie le nom du référentiel.
- dockerfile : spécifie le chemin d’accès au fichier Dockerfile.
- containerRegistry : spécifie le nom de la connexion du service de Registre Docker.
- balises : spécifie une liste d’étiquettes sur des lignes distinctes. Ces balises sont utilisées dans les commandes build, push et buildAndPush.
- stage: 'Build'
displayName: 'Build and push'
jobs:
- job: 'Build'
displayName: 'Build job'
pool:
vmImage: 'ubuntu-20.04'
steps:
- task: Docker@2
displayName: 'Build and push the image to container registry'
inputs:
command: buildAndPush
buildContext: $(Build.Repository.LocalPath)
repository: $(webRepository)
dockerfile: '$(Build.SourcesDirectory)/Tailspin.SpaceGame.Web/Dockerfile'
containerRegistry: 'Container Registry Connection'
tags: |
$(tag)
Remplacer la tâche de phase de déploiement
Andy: Eh bien, ça semble assez simple. Maintenant, nous avons besoin de trouver une tâche qui indiquera à App Service d’utiliser la nouvelle version push de l’image conteneur.
Mara: Je suis déjà sur ça. C’est un peu différent du déploiement d’une build locale sur Azure Pipelines, mais suffisamment direct pour que le travail puisse être effectué à l’aide d’une seule tâche. Ajoutons-le maintenant.
Tâche Azure Web App pour conteneur
La tâche Azure Web App for Container est conçue pour déployer des conteneurs Docker sur Azure App Service. Remplacez l’étape De déploiement entière par l’extrait de code YAML ci-dessous.
- appName : spécifie le nom d’un service Azure App Service existant.
- azureSubscription : spécifie le nom de l’abonnement Azure Resource Manager pour le déploiement.
-
imageName : spécifie le nom complet de l’image conteneur ; par exemple,
myregistry.azurecr.io/nginx:latestoupython:3.7.2-alpine/.
- stage: 'Deploy'
displayName: 'Deploy the container'
dependsOn: Build
jobs:
- job: 'Deploy'
displayName: 'Deploy job'
pool:
vmImage: 'ubuntu-20.04'
variables:
- group: Release
steps:
- task: AzureWebAppContainer@1
inputs:
appName: $(WebAppName)
azureSubscription: 'Resource Manager - Tailspin - Space Game'
imageName: $(RegistryName)/$(webRepository):$(build.buildId)
Enregistrer le pipeline pour déclencher une génération et une mise en production
Sélectionnez Valider et enregistrer dans le coin supérieur droit de la page. Tapez votre message de validation et sélectionnez Enregistrer pour confirmer.
Sélectionnez Exécuter, puis vérifiez que votre branche est définie sur principale. Sélectionnez Exécuter lorsque vous avez terminé.
Sélectionnez votre pipeline pour voir les journaux. Une fois la build réussie, sélectionnez la tâche AzureWebAppContainer , puis sélectionnez l’URL de l’application App Service pour afficher votre application web déployée.
Votre application web doit s’exécuter sur App Service.
Andy : c’est parfait ! Je pense que l’adoption de conteneurs pourrait être une énorme victoire pour notre équipe.