Déployer un conteneur personnalisé vers Azure App Service avec Azure Pipelines
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
Grâce à Azure Pipelines, vous pouvez créer, tester et déployer automatiquement votre application web dans un conteneur Azure App Service Web App sur Linux. Cet article vous explique comment utiliser des pipelines YAML ou classiques pour :
- Générer une image Docker et la publier dans Azure Container Registry
- Créer une application web Azure
- Déployer un conteneur vers Azure App Service
- Déployer sur des emplacements de déploiement
Prérequis
- Compte Azure avec un abonnement actif. Créez un compte gratuitement.
- Un compte GitHub. Créez un compte GitHub gratuit si vous n’en avez pas déjà un.
- Une organisation Azure DevOps. Créez une organisation si vous n’en avez pas déjà une.
- Un Azure Container Registry. Créez un registre de conteneurs Azure si vous n’en avez pas déjà un.
Obtenir le code
Dupliquez l’exemple d’application suivant sur GitHub.
https://github.com/spring-guides/gs-spring-boot-docker.git
Générer une image Docker et la publier dans Azure Container Registry
Pour suivre cette section efficacement, vous devez disposer d’un registre de conteneurs Azure. Pour obtenir des informations détaillées, reportez-vous à la section des prérequis.
Connectez-vous à votre organisation Azure DevOps et accédez à votre projet.
Sélectionnez Pipelines, puis Nouveau pipeline.
Quand vous êtes invité à indiquer l’emplacement de votre code source, Sélectionnez GitHub, puis sélectionnez votre dépôt.
Sélectionnez le modèle de pipeline Docker : Générer et envoyer (push) une image sur Azure Container Registry.
Sélectionnez votre abonnement Azure, puis sélectionnez Continuer.
Sélectionnez votre registre de conteneurs dans le menu déroulant, puis sélectionnez Valider et configurer.
Vérifiez le modèle YAML du pipeline, puis sélectionnez Enregistrer et exécuter pour générer l’image Docker et la publier dans votre registre de conteneurs Azure.
trigger: - main resources: - repo: self variables: # Container registry service connection established during pipeline creation dockerRegistryServiceConnection: '{{ containerRegistryConnection.Id }}' imageRepository: 'javascriptdocker' containerRegistry: 'sampleappcontainerregistry.azurecr.io' dockerfilePath: '$(Build.SourcesDirectory)/app/Dockerfile' tag: '$(Build.BuildId)' # Agent VM image name vmImageName: 'ubuntu-latest' stages: - stage: Build displayName: Build and push stage jobs: - job: Build displayName: Build 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)
Pour voir l’image Docker publiée après l’exécution de pipeline, accédez à votre registre de conteneurs dans le portail Azure, puis sélectionnez Dépôts.
Pour déployer votre image à partir du registre de conteneurs, vous devez activer le compte d’utilisateur administrateur. Accédez à votre registre de conteneurs dans le portail Azure, puis sélectionnez Clés d’accès. Ensuite, sélectionnez le bouton bascule Utilisateur administrateur pour le positionner sur Activé.
Créer une application Web
Accédez au portail Azure.
Sélectionnez Créer une ressource>Conteneurs, puis choisissez Web App pour conteneurs.
Entrez un nom pour votre nouvelle application web, puis créez un groupe de ressources. Sélectionnez Linux comme Système d’exploitation.
Dans la section Plans tarifaires, choisissez le Plan gratuit F1.
Sélectionnez Examiner et créer. Vérifiez votre configuration, puis sélectionnez Créer quand vous avez terminé.
Déployer sur Web App for Containers
Dans ce code YAML, vous générez et poussez une image Docker sur un registre de conteneurs, puis vous la déployez sur Azure Web App pour conteneurs. Dans la phase de build, vous générez et poussez une image Docker sur un registre de conteneurs Azure avec la tâche Docker@2. La tâche AzureWebAppContainer@1 déploie l’image sur Web App pour conteneurs.
trigger:
- main
resources:
- repo: self
variables:
## Add this under variables section in the pipeline
azureSubscription: <Name of the Azure subscription>
appName: <Name of the Web App>
containerRegistry: <Name of the Azure container registry>
dockerRegistryServiceConnection: '4fa4efbc-59af-4c0b-8637-1d5bf7f268fc'
imageRepository: <Name of image repository>
dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
tag: '$(Build.BuildId)'
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build
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)
## Add the below snippet at the end of your pipeline
- task: AzureWebAppContainer@1
displayName: 'Azure Web App on Container Deploy'
inputs:
azureSubscription: $(azureSubscription)
appName: $(appName)
containers: $(containerRegistry)/$(imageRepository):$(tag)
Déployer sur un emplacement de déploiement
Vous pouvez configurer le conteneur d’application web Azure pour qu’il ait plusieurs emplacements. Les emplacements vous permettent de déployer votre application de manière sécurisée, et de la tester avant de la mettre à la disposition de vos clients. Pour obtenir des informations détaillées, consultez Créer des environnements de préproduction.
L’extrait de code YAML suivant montre comment effectuer un déploiement vers un emplacement de préproduction, puis basculer vers un emplacement de production :
- task: AzureWebAppContainer@1
inputs:
azureSubscription: '<Azure service connection>'
appName: '<Name of the web app>'
containers: $(containerRegistry)/$(imageRepository):$(tag)
deployToSlotOrASE: true
resourceGroupName: '<Name of the resource group>'
slotName: staging
- task: AzureAppServiceManage@0
inputs:
azureSubscription: '<Azure service connection>'
WebAppName: '<name of web app>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
Questions fréquentes (FAQ)
Q : Comment trouver les informations d’identification de mon registre Docker ?
R : Accédez au portail Azure, puis sélectionnez votre application web pour conteneurs. Sélectionnez Configuration>Paramètres d’application, puis cliquez pour voir la valeur.