Utilisez Azure Pipelines pour construire et déployer une application web Python sur Azure App Service.
Azure DevOps Services
Utilisez Azure Pipelines pour l’intégration et le déploiement continus (CI/CD) afin de construire et de déployer une application web Python sur Azure App Service sur Linux. Votre pipeline construit et déploie automatiquement votre application web Python sur App Service à chaque validation du référentiel.
Dans cet article, vous apprendrez comment :
- Créer une application web dans Azure App Service
- Créez un projet dans Azure DevOps.
- Connectez votre projet DevOps à Azure.
- Créez un pipeline spécifique à Python.
- Lancez le pipeline pour construire et déployer votre application sur votre application web dans App Service.
Prérequis
- Un abonnement Azure. Si vous n’en avez pas, créez un compte gratuit.
- Un compte GitHub. Si vous n’en avez pas, créez-en une gratuitement.
- Une organisation Azure DevOps Services. Créez-en un gratuitement.
- Un abonnement Azure. Si vous n’en avez pas, créez un compte gratuit.
- Un compte GitHub. Si vous n’en avez pas, créez-en une gratuitement.
- Un serveur Azure DevOps.
- Un agent auto-hébergé. Si vous devez créer un agent auto-hébergé, veuillez consulter la section Agents auto-hébergés.
Créer un référentiel pour votre code d’application
Dupliquez (fork) le référentiel d’exemple sur https://github.com/Microsoft/python-sample-vscode-flask-tutorial vers votre compte GitHub.
Sur votre hôte local, clonez votre référentiel GitHub. Utilisez la commande suivante, en remplaçant <repository-url>
par l’URL de votre référentiel dupliqué (fork).
git clone <repository-url>
Testez votre application localement.
Construisez et exécutez l’application localement pour vous assurer qu’elle fonctionne.
Changez vers le dossier du référentiel cloné.
cd python-sample-vscode-flask-tutorial
Générer et exécuter l’application
python -m venv .env source .env/bin/activate pip install --upgrade pip pip install -r ./requirements.txt export set FLASK_APP=hello_app.webapp python3 -m flask run
Pour afficher l’application, ouvrez une fenêtre de navigateur et allez sur http://localhost:5000. Assurez-vous que vous voyez le titre
Visual Studio Flask Tutorial
.Lorsque vous avez terminé, fermez la fenêtre du navigateur et arrêtez le serveur Flask avec Ctrl+C.
Ouvrez une instance Cloud Shell
Connectez-vous au portail Azure à l’adressehttps://portal.azure.com.
Ouvrez le CLI Azure en sélectionnant le bouton Cloud Shell sur la barre d’outils du portail.
Cloud Shell apparaît en bas du navigateur. Sélectionnez Bash dans le menu déroulant.
Pour vous donner plus d’espace pour travailler, sélectionnez le bouton de maximisation.
Créez une application web Azure App Service.
Créez votre application web Azure App Service à partir du Cloud Shell dans le portail Azure.
Conseil
Pour coller dans le Cloud Shell, faites Ctrl+Shift+V ou faites un clic droit et sélectionnez Coller dans le menu contextuel.
Clonez votre référentiel avec la commande suivante, en remplaçant
<repository-url>
par l’URL de votre référentiel dupliqué (fork).git clone <repository-url>
Changez de répertoire vers le dossier du référentiel cloné, afin que la commande
az webapp up
reconnaisse l’application comme une application Python.cd python-sample-vscode-flask-tutorial
Utilisez la commande az webapp up pour provisionner à la fois App Service et effectuer le premier déploiement de votre application. Remplacez
<your-web-app-name>
par un nom unique dans Azure. En règle générale, vous utilisez un nom personnel ou d’entreprise ainsi qu’un identificateur d’application, tel que<your-name>-flaskpipelines
. L’URL de l’application devient <your-appservice>.azurewebsites.net.az webapp up --name <your-web-app-name>
La sortie JSON de la commande
az webapp up
montre :{ "URL": <your-web-app-url>, "appserviceplan": <your-app-service-plan-name>, "location": <your-azure-location>, "name": <your-web-app-name>, "os": "Linux", "resourcegroup": <your-resource-group>, "runtime_version": "python|3.11", "runtime_version_detected": "-", "sku": <sku>, "src_path": <repository-source-path> }
Notez les valeurs
URL
etruntime_version
. Vous utilisez leruntime_version
dans le fichier YAML du pipeline. LeURL
est l’URL de votre application web. Vous pouvez l’utiliser pour vérifier que l’application fonctionne.Remarque
La commande
az webapp up
exécute les actions suivantes :Créer un groupe de ressources par défaut.
Créer un plan App Service par défaut.
Créer une application avec le nom spécifié.
Déployez tous les fichiers du répertoire de travail actuel, avec l’automatisation de la construction activée.
Mettre en cache les paramètres localement dans le fichier .azure/config afin de ne pas avoir à les spécifier à nouveau lors du déploiement ultérieur avec des commandes
az webapp up
ouaz webapp
à partir du dossier de projet. Les valeurs mises en cache sont utilisées automatiquement par défaut.
Vous pouvez remplacer l’action par défaut par vos propres valeurs en utilisant les paramètres de la commande. Pour plus d’informations, consultez az webapp up.
L’application python-sample-vscode-flask-tutorial dispose d’un fichier startup.txt qui contient la commande de démarrage spécifique pour l’application web. Définissez la propriété de configuration
startup-file
de l’application web surstartup.txt
.À partir de la sortie de la commande
az webapp up
, copiez la valeurresourcegroup
.Saisissez la commande suivante, en utilisant le groupe de ressources et le nom de votre application.
az webapp config set --resource-group <your-resource-group> --name <your-web-app-name> --startup-file startup.txt
Lorsque la commande est terminée, elle affiche la sortie JSON qui contient tous les paramètres de configuration de votre application web.
Pour voir l’application en cours d’exécution, ouvrez un navigateur et allez à l’URL
URL
indiquée dans la sortie de la commandeaz webapp up
. Si vous voyez une page générique, attendez quelques secondes que le service App démarre, puis actualisez la page. Assurez-vous que vous voyez le titreVisual Studio Flask Tutorial
.
créer un projet Azure DevOps ;
Créez un nouveau projet Azure DevOps.
- Dans un navigateur, rendez-vous sur dev.azure.com et connectez-vous.
- Sélectionnez votre organisation.
- Créez un nouveau projet en sélectionnant Nouveau projet ou Créer un projet si c’est le premier projet dans l’organisation.
- Entrez un Nom de projet.
- Choisissez la Visibilité de votre projet.
- Sélectionnez Créer.
- Dans un navigateur, rendez-vous sur votre serveur Azure DevOps.
- Sélectionnez votre collection.
- Créez un nouveau projet en sélectionnant Nouveau projet ou Créer un projet si c’est le premier projet dans la collection.
- Entrez un Nom de projet.
- Choisissez la Visibilité de votre projet.
- Sélectionnez Créer.
Créer un principal du service
Un principal de service est une identité créée pour une utilisation avec des applications, des services hébergés et des outils automatisés pour accéder aux ressources Azure. Cet accès est restreint aux rôles attribués au principal de service, ce qui vous donne le contrôle sur les ressources auxquelles vous pouvez accéder et à quel niveau.
Pour créer un principal de service, accédez à l’interpréteur de commandes Cloud (bash) et exécutez la commande suivante. Remplacez <service-principal-name>
par un nom pour votre principal de service, <your-subscription-id>
par votre ID d’abonnement, et <your-resource-group>
par le groupe de ressources de l’application web.
az ad sp create-for-rbac --display-name <service-principal-name> --role contributor --scopes /subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>
La commande renvoie un objet JSON similaire à l’exemple suivant :
{
"clientId": "<client GUID>",
"clientSecret": "<string-value>",
"subscriptionId": "<subscription GUID>",
"tenantId": "<tenant GUID>",
...
}
Notez les valeurs clientId
, clientSecret
, subscriptionId
et tenantId
. Vous avez besoin de ces valeurs pour créer une connexion de service dans la section suivante.
Créer une connexion de service
Une connexion de service vous permet de créer une connexion pour fournir un accès authentifié depuis Azure Pipelines vers des services externes et distants. Pour déployer sur votre application web Azure App Service, créez une connexion de service vers le groupe de ressources contenant l’application web.
Sur la page du projet, sélectionnez Paramètres du projet.
Sélectionnez Connexions de service dans la section Pipelines du menu.
Sélectionnez Créer une connexion de service.
Sélectionnez Gestionnaire de ressources Azure et sélectionnez Suivant.
Sélectionnez votre méthode d’authentification et sélectionnez Suivant.
Dans la boîte de dialogue Nouvelle connexion de service Azure, saisissez les informations spécifiques à la méthode d’authentification sélectionnée. Pour plus d’informations sur les méthodes d’authentification, veuillez consulter la section Se connecter à Azure en utilisant une connexion de service Gestionnaire de ressources Azure.
Par exemple, si vous utilisez une méthode d’authentification Fédération de l’identité de la charge de travail (automatique) ou Principal de service (automatique), saisissez les informations requises.
Champ Description Niveau de portée Sélectionnez Abonnement. Abonnement Le nom de votre abonnement Azure. Groupe de ressources Le nom du groupe de ressources contenant votre application web. Nom de la connexion de service Un nom descriptif pour la connexion. Accorder des autorisations d’accès à tous les pipelines Sélectionnez cette option pour accorder l’accès à tous les pipelines. Cliquez sur Enregistrer.
La nouvelle connexion apparaît dans la liste Connexions de service, et est prête à être utilisée dans votre Pipeline Azure.
Sur la page du projet, sélectionnez Paramètres du projet.
Sélectionnez Connexions de service dans la section Pipelines du menu.
Sélectionnez Créer une connexion de service.
Sélectionnez Gestionnaire de ressources Azure et sélectionnez Suivant.
Sur Nouvelle connexion de service Azure, sélectionnez Principal de service (manuel) et sélectionnez Suivant
Sur la boîte de dialogue suivante, remplissez les informations requises.
Champ Description Environment Sélectionnez Azure Cloud
.Niveau de portée Sélectionnez Abonnement. ID d’abonnement Votre ID d’abonnement. Nom d’abonnement Le nom de votre abonnement Azure. ID de principal de service La valeur appId
de l’objet JSON retourné par la commandeaz ad sp create-for-rbac
.Clé du principal de service La valeur password
de l’objet JSON retourné par la commandeaz ad sp create-for-rbac
.Identifiant du locataire La valeur tenant
de l’objet JSON retourné par la commandeaz ad sp create-for-rbac
.Sélectionnez Vérifier pour vérifier la connexion.
Saisissez un nom de connexion de service.
Vérifiez que l’option Accorder des autorisations d’accès à tous les pipelines est sélectionnée.
Sélectionnez Vérifier et enregistrer.
La nouvelle connexion apparaît dans la liste Connexions de service et est prête pour l’utilisation d’Azure Pipelines à partir du projet.
Configurez un agent auto-hébergé
Si vous utilisez votre propre agent auto-hébergé, vous devez configurer l’agent pour exécuter Python. Le téléchargement de versions Python n’est pas pris en charge sur les agents auto-hébergés. Vous devez préinstaller la version Python. Utilisez l’installateur complet pour obtenir une version de Python compatible avec pip.
Pour éviter les problèmes d’incompatibilité, vous devriez faire correspondre la version Python avec la version d’exécution sur votre application web Azure App Services. La version d’exécution est indiquée dans la sortie JSON de la commande az webapp up
.
La version Python souhaitée doit être ajoutée au cache d’outils sur l’agent auto-hébergé afin que la tâche puisse l’utiliser. Normalement, le cache d’outils se trouve sous le répertoire _work/_tool de l’agent; alternativement, le chemin peut être remplacé par la variable d’environnement AGENT_TOOLSDIRECTORY. Sous le répertoire des outils, créez la structure de répertoires suivante en fonction de votre version Python :
$AGENT_TOOLSDIRECTORY/
Python/
{version number}/
{platform}/
{tool files}
{platform}.complete
Le numéro de version doit suivre le format 1.2.3. La plate-forme doit être soit x86 ou x64. Les fichiers d’outils doivent être les fichiers de version de Python dézippés. Le {platform}.complete
doit être un fichier de 0 octet qui ressemble à x86.complete
ou x64.complete
et signifie simplement que l’outil est correctement installé dans le cache.
Par exemple, si vous utilisez Python 3.11 sur une machine Windows 64 bits, la structure du répertoire ressemblerait à ceci :
$AGENT_TOOLSDIRECTORY/
Python/
3.11.4/
x64/
{python files}
x64.complete
Si vous avez déjà la version Python que vous voulez utiliser sur la machine hébergeant votre agent, vous pouvez copier les fichiers dans le cache d’outils. Si vous n’avez pas la version Python, vous pouvez la télécharger depuis le site web Python.
Créer un pipeline
Créez un pipeline pour construire et déployer votre application web Python sur Azure App Service. Pour comprendre les concepts de pipeline, regardez :
Sur le menu de navigation de gauche, sélectionnez Pipelines.
Sélectionnez Créer un pipeline.
Dans la boîte de dialogue Où se trouve votre code, sélectionnez GitHub. Vous pourriez être invité à vous connecter à GitHub.
Sur l’écran Sélectionner un référentiel, sélectionnez le référentiel d’exemple dupliqué (fork).
Vous serez peut-être invité à entrer à nouveau votre mot de passe GitHub en guise de confirmation.
Si l’extension Azure Pipelines n’est pas installée sur GitHub, GitHub vous invite à installer l’extension Azure Pipelines.
Sur cette page, faites défiler jusqu’à la section Accès au référentiel, choisissez d’installer l’extension sur tous les référentiels ou uniquement sur certains, puis sélectionnez Approuver et installer.
Dans la boîte de dialogue Configurer votre pipeline, sélectionnez Python vers l’application Web Linux sur Azure.
Sélectionnez votre abonnement Azure et sélectionnez Continuer.
Si vous utilisez votre nom d’utilisateur et votre mot de passe pour vous authentifier, un navigateur s’ouvre pour vous permettre de vous connecter à votre compte Microsoft.
Sélectionnez le nom de votre application web dans la liste déroulante et sélectionnez Valider et configurer.
Azure Pipelines crée un fichier azure-pipelines.yml et l’affiche dans l’éditeur de pipelines YAML. Le fichier de pipeline définit votre pipeline CI/CD comme une série de stades, de Jobs et d’étapes, où chaque étape contient les détails de différentes tâches et scripts. Examinez le pipeline pour voir à quoi il sert. Assurez-vous que toutes les entrées par défaut sont adaptées à votre code.
Dans le menu de navigation, sélectionnez Pipelines.
Sélectionnez Créer un pipeline.
Dans la boîte de dialogue Où se trouve votre code, sélectionnez GitHub Enterprise Server. Vous pourriez être invité à vous connecter à GitHub.
Sur l’onglet Sélectionner un référentiel, sélectionnez le référentiel d’exemple dupliqué (fork).
Vous serez peut-être invité à entrer à nouveau votre mot de passe GitHub en guise de confirmation.
Si l’extension Azure Pipelines n’est pas installée sur GitHub, GitHub vous invite à installer l’extension Azure Pipelines.
Sur cette page, faites défiler jusqu’à la section Accès au référentiel, choisissez d’installer l’extension sur tous les référentiels ou uniquement sur certains, puis sélectionnez Approuver et installer.
Dans la boîte de dialogue Configurer votre pipeline, sélectionnez Pipeline de départ.
Remplacez le contenu du fichier azure-pipelines.yml par le code suivant.
trigger: - main variables: # Azure Resource Manager connection created during pipeline creation azureServiceConnectionId: '<your-service-connection-name>' # Web app name webAppName: '<your-web-app-name>' # Environment name environmentName: '<your-web-app-name>' # Project root folder. projectRoot: $(System.DefaultWorkingDirectory) # Python version: pythonVersion: '<your-python-version>' stages: - stage: Build displayName: Build stage jobs: - job: BuildJob pool: name: '<your-pool-name>' demands: python steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)' - script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install setup pip install -r requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements" - task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: true - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container' - stage: Deploy displayName: 'Deploy Web App' dependsOn: Build condition: succeeded() jobs: - deployment: DeploymentJob pool: name: '<your-pool-name' environment: $(environmentName) strategy: runOnce: deploy: steps: - task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version' - task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip startUpCommand: 'startup.txt'
Remplacez les espaces réservés suivants par vos propres valeurs :
Espace réservé Description <your-service-connection-name>
Le nom de la connexion au service que vous avez créée. <your-web-app-name>
Le nom de votre application web Azure App Service. <your-pool-name>
Le nom du pool d’agents que vous souhaitez utiliser. <your-python-version>
La version de Python utilisée sur votre agent. Il est conseillé de faire correspondre cette version avec la version de Python utilisée sur votre application web. La version de l’application web est affichée dans la sortie JSON de la commande az webapp up
.
Fichier YAML de pipeline
L’explication suivante décrit le fichier YAML de pipeline. Pour en savoir plus sur le schéma du fichier YAML de pipeline, veuillez consulter la référence du schéma YAML.
L’exemple complet de fichier YAML de pipeline est illustré ci-dessous :
trigger:
- main
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'
# Web app name
webAppName: '<your-webapp-name>'
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder. Point to the folder containing manage.py file.
projectRoot: $(System.DefaultWorkingDirectory)
pythonVersion: '3.11'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: BuildJob
pool:
vmImage: $(vmImageName)
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python $(pythonVersion)'
- script: |
python -m venv antenv
source antenv/bin/activate
python -m pip install --upgrade pip
pip install setup
pip install -r requirements.txt
workingDirectory: $(projectRoot)
displayName: "Install requirements"
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(projectRoot)'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
displayName: 'Upload package'
artifact: drop
- stage: Deploy
displayName: 'Deploy Web App'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
strategy:
runOnce:
deploy:
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(pythonVersion)'
displayName: 'Use Python version'
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Variables
La section variables
contient les variables suivantes :
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<GUID>'
# Web app name
webAppName: '<your-webapp-name>'
# Agent VM image name
vmImageName: 'ubuntu-latest'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder.
projectRoot: $(System.DefaultWorkingDirectory)
# Python version: 3.11. Change this to match the Python runtime version running on your web app.
pythonVersion: '3.11'
Variable | Description |
---|---|
azureServiceConnectionId |
L’ID ou le nom de la connexion au service Azure Resource Manager. |
webAppName |
Nom de l’application web Azure App Service. |
vmImageName |
Le nom du système d’exploitation à utiliser pour l’agent de build. |
environmentName |
Le nom de l’environnement utilisé dans l’étape de déploiement. L’environnement est automatiquement créé lorsque le travail de l’étape est exécuté. |
projectRoot |
Le dossier racine contenant le code de l’application. |
pythonVersion |
La version de Python à utiliser sur les agents de build et de déploiement. |
La section variables
contient les variables suivantes :
variables:
# Azure Resource Manager connection created during pipeline creation
azureServiceConnectionId: '<your-service-connection-name>'
# Web app name
webAppName: '<your-webapp-name>'
# Environment name
environmentName: '<your-webapp-name>'
# Project root folder.
projectRoot: $(System.DefaultWorkingDirectory)
# Python version: 3.11. Change this to the version that is running on your agent and web app.
pythonVersion: '3.11'
Variable | Description |
---|---|
azureServiceConnectionId |
Le nom de la connexion au service Azure Resource Manager. |
webAppName |
Nom de l’application web. |
environmentName |
Le nom de l’environnement utilisé dans l’étape de déploiement. |
projectRoot |
Le dossier contenant le code de l’application. La valeur est une variable système automatique. |
pythonVersion |
La version de Python à utiliser sur les agents de build et de déploiement. |
Index de build
L’étape de build contient un seul travail qui s’exécute sur le système d’exploitation défini dans la variable vmImageName.
- job: BuildJob
pool:
vmImage: $(vmImageName)
L’étape de build contient un seul travail qui s’exécute sur un agent dans le pool identifié par le paramètre name. Vous pouvez spécifier les capacités de l’agent avec le mot-clé demands
. Par exemple, demands: python
spécifie que l’agent doit avoir Python installé. Pour spécifier un agent auto-hébergé par nom, vous pouvez utiliser le mot-clé demands: Agent.Name -equals <agent-name>
.
- job: BuildJob
pool:
name: <your-pool-name>
demands: python
Le travail contient plusieurs étapes :
La tâche UsePythonVersion sélectionne la version de Python à utiliser. La version est définie dans la variable
pythonVersion
.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)'
Cette étape utilise un script pour créer un environnement Python virtuel et installer les dépendances de l’application contenues dans le
requirements.txt
paramètre SpécifieworkingDirectory
l’emplacement du code de l’application.- script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install setup pip install -r ./requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements"
La tâche ArchiveFiles crée l’archive .zip contenant l’application web. Le fichier
.zip
est téléchargé dans le pipeline sous forme d’artefact nommédrop
. Le fichier.zip
est utilisé dans l’étape de déploiement pour déployer l’application sur l’application web.- task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: true - upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip displayName: 'Upload package' artifact: drop
Paramètre Description rootFolderOrFile
L’emplacement du code de l’application. includeRootFolder
Indique si le dossier racine doit être inclus dans le fichier .zip. Définissez ce paramètre sur false
sinon, le contenu du fichier .zip est placé dans un dossier nommé s et le conteneur App Service sur Linux ne peut pas trouver le code de l’application.archiveType
Le type d’archive à créer. Réglez sur zip
.archiveFile
L’emplacement du fichier .zip à créer. replaceExistingArchive
Indique si une archive existante doit être remplacée si le fichier existe déjà. Réglez sur true
.upload
L’emplacement du fichier .zip à uploader. artifact
Nom de l’artefact à créer.
Phase de déploiement
L’étape de déploiement est exécutée si l’étape de build se termine avec succès. Les mots-clés suivants définissent ce comportement :
dependsOn: Build
condition: succeeded()
L’étape de déploiement contient un seul travail de déploiement configuré avec les mots-clés suivants :
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
Mot clé | Description |
---|---|
deployment |
Indique que le travail est un travail de déploiement ciblant un environnement. |
pool |
Spécifie le pool d’agents de déploiement. Le pool d’agents par défaut si le nom n’est pas spécifié. Le mot-clé vmImage identifie le système d’exploitation pour l’image de machine virtuelle de l’agent. |
environment |
Spécifie l’environnement sur lequel déployer. L’environnement est automatiquement créé dans votre projet lorsque le travail est exécuté. |
- deployment: DeploymentJob
pool:
name: <your-pool-name>
environment: $(environmentName)
Mot clé | Description |
---|---|
deployment |
Indique que le travail est un travail de déploiement ciblant un environnement. |
pool Spécifie le pool d’agents à utiliser pour le déploiement. Ce pool doit contenir un agent capable d’exécuter la version de Python spécifiée dans le pipeline. |
|
environment |
Spécifie l’environnement sur lequel déployer. L’environnement est automatiquement créé dans votre projet lorsque le travail est exécuté. |
Le mot-clé strategy
est utilisé pour définir la stratégie de déploiement. Le mot-clé runOnce
spécifie que le travail de déploiement s’exécute une fois. Le mot-clé deploy
spécifie les étapes à exécuter dans le travail de déploiement.
strategy:
runOnce:
deploy:
steps:
Les steps
dans le pipeline sont :
Utilisez la tâche UsePythonVersion pour spécifier la version de Python à utiliser sur l’agent. La version est définie dans la variable
pythonVersion
.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version'
Déployez l’application web à l’aide de la tâche AzureWebApp@1. Cette tâche déploie l’artefact de pipeline
drop
sur votre application web.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Paramètre Description azureSubscription
L’ID ou le nom de connexion au service Azure Resource Manager à utiliser. appName
Nom de l’application web. package
L’emplacement du fichier .zip à déployer. De plus, comme le référentiel python-vscode-flask-tutorial contient la même commande de démarrage dans un fichier nommé startup.txt, vous pouvez spécifier ce fichier en ajoutant le paramètre :
startUpCommand: 'startup.txt'
.
Les steps
dans le pipeline sont :
Utilisez la tâche UsePythonVersion pour spécifier la version de Python à utiliser sur l’agent. La version est définie dans la variable
pythonVersion
.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python version'
Déployez l’application web à l’aide de la tâche AzureWebApp@1. Cette tâche déploie l’artefact de pipeline
drop
sur votre application web.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : <your-web-app-name>' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
Paramètre Description azureSubscription
L’ID ou le nom de connexion au service Azure Resource Manager à utiliser. appName
Nom de l’application web. package
L’emplacement du fichier .zip à déployer. De plus, comme le référentiel python-vscode-flask-tutorial contient la même commande de démarrage dans un fichier nommé startup.txt, vous pouvez spécifier ce fichier en ajoutant le paramètre :
startUpCommand: 'startup.txt'
.- task: AzureWebApp@1 displayName: 'Deploy Azure Web App : $(webAppName)' inputs: azureSubscription: $(azureServiceConnectionId) appName: $(webAppName) package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip startUpCommand: 'startup.txt'
Paramètre Description azureSubscription
L’ID ou le nom de connexion au service Azure Resource Manager à utiliser. appName
Nom de l’application web. package
L’emplacement du fichier .zip à déployer. startUpCommand
La commande à exécuter après le déploiement de l’application. L’application d’exemple utilise startup.txt
.
Exécuter le pipeline
Vous êtes maintenant prêt à l’essayer !
Dans l’éditeur, sélectionnez Enregistrer et exécuter.
Dans la boîte de dialogue Enregistrer et exécuter, ajoutez un message de commit puis sélectionnez Enregistrer et exécuter.
Vous pouvez suivre le pipeline pendant son exécution en sélectionnant les étapes ou les travaux dans le résumé de l’exécution du pipeline.
Il y a des coches vertes à côté de chaque étape et travail lorsqu’ils se terminent avec succès. En cas d’erreurs, elles sont affichées dans le résumé ou dans les étapes du travail.
Vous pouvez rapidement retourner à l’éditeur YAML en sélectionnant les points verticaux en haut à droite de la page Résumé et en sélectionnant Modifier le pipeline :
À partir du travail de déploiement, sélectionnez la tâche Déployer Azure Web App pour afficher sa sortie. Pour visiter le site déployé, maintenez enfoncée la touche Ctrl et sélectionnez l’URL après
App Service Application URL
.Si vous utilisez l’application d’exemple, l’application devrait apparaître comme suit :
Important
Si votre application échoue en raison d’une dépendance manquante, votre fichier requirements.txt n’a pas été traité pendant le déploiement. Ce comportement se produit si vous avez créé l’application web directement sur le portail plutôt qu’en utilisant la commande az webapp up
comme indiqué dans cet article.
La commande az webapp up
définit spécifiquement l’action de build SCM_DO_BUILD_DURING_DEPLOYMENT
sur true
. Si vous avez provisionné le service d’application via le portail, cette action n’est pas automatiquement définie.
Les étapes suivantes définissent l’action :
- Ouvrez le Portail Azure, sélectionnez votre App Service, puis sélectionnez Configuration.
- Sous l’onglet Paramètres de l’application, sélectionnez Nouveau paramètre d’application.
- Dans la fenêtre contextuelle qui s’affiche, définissez Nom sur
SCM_DO_BUILD_DURING_DEPLOYMENT
et Valeur surtrue
, puis sélectionnez OK. - Sélectionnez Enregistrer en haut de la page Configuration.
- Exécuter de nouveau le pipeline. Vos dépendances doivent être installées pendant le déploiement.
Déclencher une exécution du pipeline
Pour déclencher l’exécution d’un pipeline, apportez une modification au référentiel. Par exemple, vous pouvez ajouter une nouvelle fonctionnalité à l’application ou mettre à jour les dépendances de l’application.
- Accédez à votre dépôt GitHub.
- Apportez une modification au code, comme changer le titre de l’application.
- Validez la modification dans votre référentiel.
- Rendez-vous dans votre pipeline et vérifiez qu’une nouvelle exécution est créée.
- Lorsque l’exécution est terminée, vérifiez que la nouvelle version est déployée sur votre application web.
- Dans le portail Azure, accédez à votre application web.
- Sélectionnez Centre de déploiement et sélectionnez l’onglet Journaux.
- Vérifiez que le nouveau déploiement est répertorié.
Considérations relatives à Django
Vous pouvez utiliser Azure Pipelines pour déployer des applications Django sur Azure App Service sur Linux si vous utilisez une base de données distincte. Vous ne pouvez pas utiliser une base de données SQLite, car App Service verrouille le fichier db.sqlite3, empêchant les lectures et les écritures. Ce comportement n’affecte pas une base de données externe.
Comme décrit dans Configurer l’application Python sur App Service : Processus de démarrage de conteneur, App Service recherche automatiquement un fichier wsgi.py dans le code de votre application, qui contient généralement l’objet d’application. Si vous souhaitez personnaliser la commande de démarrage de quelque manière que ce soit, utilisez le paramètre startUpCommand
à l’étape AzureWebApp@1
de votre fichier de pipeline YAML, comme décrit dans la section précédente.
Lorsque vous utilisez Django, vous souhaitez généralement migrer les modèles de données en utilisant manage.py migrate
après le déploiement du code d’application. Vous pouvez ajouter startUpCommand
avec un script post-déploiement à cette fin. Par exemple, voici la propriété startUpCommand
dans la tâche AzureWebApp@1.
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
startUpCommand: 'python manage.py migrate'
Exécuter des tests sur l’agent de build
Dans le cadre de votre processus de build, vous voudrez peut-être exécuter des tests sur le code de votre application. Les tests s’exécutent sur l’agent de build, vous devez donc installer vos dépendances dans un environnement virtuel sur l’agent de build. Une fois les tests exécutés, supprimez l’environnement virtuel avant de créer le fichier .zip pour le déploiement. Les éléments de script suivants illustrent ce processus. Placez-les avant la tâche ArchiveFiles@2
dans le fichier azure-pipelines.yml. Pour plus d’informations, consultez Exécuter des scripts multiplateformes.
# The | symbol is a continuation character, indicating a multi-line script.
# A single-line script can immediately follow "- script:".
- script: |
python -m venv .env
source .env/bin/activate
pip install setuptools
pip install -r requirements.txt
# The displayName shows in the pipeline UI when a build runs
displayName: 'Install dependencies on build agent'
- script: |
# Put commands to run tests here
displayName: 'Run tests'
- script: |
echo Deleting .env
deactivate
rm -rf .env
displayName: 'Remove .env before zip'
Vous pouvez également utiliser une tâche comme PublishTestResults@2 pour publier les résultats des tests dans votre pipeline. Pour plus d’informations, consultez Générer des applications Python : Exécuter des tests.
Nettoyer les ressources
Pour éviter de payer des frais sur les ressources Azure créées dans ce tutoriel :
Supprimez le projet que vous avez créé. La suppression du projet supprime le pipeline et la connexion au service.
Supprimez le groupe de ressources Azure contenant le service d’application et le plan du service d’application. Dans le portail Azure, accédez au groupe de ressources, sélectionnez Supprimer le groupe de ressources et suivez les invites.
Supprimez le compte de stockage qui maintient le système de fichiers pour Cloud Shell. Fermez Cloud Shell puis accédez au groupe de ressources commençant par cloud-shell-storage-, sélectionnez Supprimer le groupe de ressources et suivez les invites.