Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services
Ce tutoriel vous montre comment utiliser Azure Pipelines pour l’intégration continue et la livraison continue (CI/CD) pour générer et déployer une application web Python sur Azure App Service sur Linux. Votre pipeline génère et déploie automatiquement votre application web Python sur App Service chaque fois qu’il existe une validation dans votre référentiel de code d’application.
Dans ce tutoriel, vous allez :
- Créez une application web Python et chargez-la dans Azure App Service.
- Connectez votre projet Azure DevOps à Azure.
- Créez un pipeline de build et de déploiement spécifique à Azure Pipelines Python pour votre application.
- Exécutez le pipeline pour générer, tester et déployer sur votre application web Azure App Service.
- Paramétrez un déclencheur pour exécuter le pipeline à chaque fois que vous validez dans votre référentiel.
Pour en savoir plus sur les concepts d’Azure Pipelines, regardez la vidéo suivante :
Prérequis
| Produit | Exigences |
|---|---|
| Azure DevOps | - Un projet Azure DevOps . - Possibilité d’exécuter des pipelines sur des agents hébergés par Microsoft. Vous pouvez acheter un travail parallèle ou demander un niveau gratuit. - Connaissance de base de YAML et d’Azure Pipelines. Pour plus d’informations, consultez Créer votre premier pipeline. - Autorisations : - Pour créer un pipeline : vous devez être dans le groupe Contributeurs et le groupe doit avoir l'autorisation Créer un pipeline de construction définie sur Autoriser. Les membres du groupe Administrateurs de projet peuvent gérer les pipelines. - Pour créer des connexions de service : vous devez avoir le rôle Administrateur ou Créateur pour les connexions de service. |
| Lien avec GitHub | - Un compte GitHub . - Connexion de service GitHub pour autoriser Azure Pipelines. |
| Microsoft Azure | Un abonnement Azure. |
| Produit | Exigences |
|---|---|
| Azure DevOps | - Un projet Azure DevOps . - Un agent auto-hébergé. Pour en créer un, consultez les agents auto-hébergés. - Connaissance de base de YAML et d’Azure Pipelines. Pour plus d’informations, consultez Créer votre premier pipeline. - Autorisations : - Pour créer un pipeline : vous devez être dans le groupe Contributeurs et le groupe doit avoir l'autorisation Créer un pipeline de construction définie sur Autoriser. Les membres du groupe Administrateurs de projet peuvent gérer les pipelines. - Pour créer des connexions de service : vous devez avoir le rôle Administrateur ou Créateur pour les connexions de service. |
| Lien avec GitHub | - Un compte GitHub . - Connexion de service GitHub pour autoriser Azure Pipelines. |
| Microsoft Azure | Un abonnement Azure. |
Configurez un agent auto-hébergé
Le téléchargement des versions de Python n’est pas pris en charge sur les agents de build auto-hébergés. Pour utiliser votre propre agent auto-hébergé, vous devez configurer l’agent pour exécuter Python.
Pour éviter les problèmes de compatibilité, faites correspondre la version python à la version du runtime dans votre application web Azure App Services, 3.11 dans ce cas. Vous devez préinstaller la version Python. Utilisez l’installateur complet pour obtenir une version de Python compatible avec pip.
La version de Python souhaitée doit être ajoutée au cache d’outils sur l’agent auto-hébergé afin que la tâche de pipeline puisse l’utiliser. Normalement, le cache d’outils se trouve sous le répertoire _work/_tool de l’agent. Vous pouvez également remplacer le chemin 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 de 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, pour utiliser Python 3.11 sur une machine Windows 64 bits, créez la structure de répertoires suivante :
$AGENT_TOOLSDIRECTORY/
Python/
3.11.4/
x64/
{python files}
x64.complete
Si la machine hébergeant votre agent dispose déjà de la version Python que vous souhaitez utiliser, 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.
Préparer l’application d’exemple
Dupliquez (fork) le référentiel d’exemple sur https://github.com/Microsoft/python-sample-vscode-flask-tutorial vers votre compte GitHub.
Clonez votre fork sur votre machine locale en utilisant
git clone <your-forked-repository-url>.git.Accédez à votre clone local à l’aide
cd python-sample-vscode-flask-tutorialde , puis générez et exécutez l’application localement pour vous assurer qu’elle fonctionne.python -m venv .env source .env/Scripts/activate pip install --upgrade pip pip install -r ./requirements.txt export FLASK_APP=hello_app.webapp flask run** Pour tester l’application, accédez à http://localhost:5000 dans une fenêtre de navigateur et vérifiez que vous voyez le titre Didacticiel Flask de Visual Studio.
Fermez la fenêtre du navigateur et arrêtez le serveur Flask à l’aide de Ctrl+C.
Créer et déployer l’application web App Service
Créez votre application web Azure App Service à l’aide de Cloud Shell dans le portail Azure. Pour utiliser Cloud Shell, connectez-vous au portail Azure et sélectionnez le bouton Cloud Shell dans la barre d’outils.
Cloud Shell apparaît en bas du navigateur. Vérifiez que Bash est sélectionné comme environnement dans le menu déroulant. Vous pouvez optimiser la fenêtre Cloud Shell pour vous donner plus de place.
Conseil
Pour coller dans Cloud Shell, utilisez Ctrl+Maj+V ou cliquez avec le bouton droit, puis sélectionnez Coller dans le menu contextuel.
Créer et déployer l’application web
Dans Cloud Shell, clonez votre dépôt forké vers Azure avec la commande suivante, en remplaçant
<your-forked-repository-url>par l'URL de votre dépôt forké.git clone <your-forked-repository-url>Remplacez le répertoire par le dossier de référentiel cloné.
cd python-sample-vscode-flask-tutorialExécutez la commande az webapp up pour provisionner l’application web App Service et effectuer le premier déploiement. Utilisez le
--name <your-web-app-name>paramètre pour affecter un nom unique dans Azure, tel qu’un nom personnel ou d’entreprise, ainsi qu’un identificateur d’application, comme--name <your-name>-flaskpipelines. L’exécutionaz webapp upsans paramètre affecte un nom d’application web généré de manière aléatoire unique dans Azure.az webapp up --name <your-web-app-name>
La az webapp up commande reconnaît l’application en tant qu’application Python et effectue les actions suivantes :
- Crée un groupe de ressources par défaut.
- Crée un plan App Service par défaut.
-
Crée une application web avec le nom attribué. L’application
URLest<your-web-app-name>.azurewebsites.net. - Déploie tous les fichiers du répertoire de travail actuel dans une archive ZIP, avec l’automatisation de build activée.
- Met en cache les paramètres localement dans le fichier .azure/config . Vous n’avez donc pas besoin de les spécifier à nouveau lors du déploiement à partir du dossier du projet avec
az webapp upou d’autresaz webappcommandes. Les commandes utilisent automatiquement les valeurs mises en cache par défaut.
Vous pouvez remplacer les actions par défaut par vos propres valeurs à l’aide des paramètres de commande. Pour plus d’informations, consultez az webapp up.
La az webapp up commande produit la sortie JSON suivante pour l’exemple d’application web :
{
"URL": <your-web-app-url>,
"appserviceplan": <your-app-service-plan-name>,
"location": <your-azure-region>,
"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>
}
Enregistrez les valeurs de URL, resourcegroup, et runtime_version pour les utiliser plus tard dans ce didacticiel.
Définir la commande de démarrage
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 de l'application web startup-file sur startup.txt en entrant la commande suivante, en utilisant vos noms de groupe de ressources et de web app.
az webapp config set --resource-group <your-resource-group> --name <your-web-app-name> --startup-file startup.txt
Une fois la commande terminée, la sortie JSON affiche 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 commande az webapp up. Si vous voyez une page générique, attendez quelques secondes que le service App démarre, puis actualisez la page. Vérifiez que vous voyez le titre du didacticiel Visual Studio Flask.
Connecter votre projet Azure DevOps à votre abonnement Azure
Pour utiliser Azure Pipelines pour effectuer un déploiement sur votre application web Azure App Service, vous devez connecter votre projet Azure DevOps à vos ressources Azure.
Créer un principal de service
Un principal de service est une identité créée pour les applications, les services hébergés et les outils automatisés permettant d’accéder aux ressources Azure. Cet accès est limité aux rôles attribués au principal de service, ce qui vous permet de contrôler les ressources auxquelles vous pouvez accéder à quel niveau.
Pour créer un principal de service, exécutez la commande suivante dans Bash Cloud Shell. Remplacez <service-principal-name> par un nom pour votre principal de service, <your-subscription-id> par votre ID d’abonnement Azure 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 retourne l’objet JSON suivant :
{
"appId": "<client GUID>",
"displayName": "<service-principal-name">,
"password": "<password-string>",
"tenant": "<tenant GUID>"
...
}
Notez les valeurs de appId, password, et tenantId à utiliser pour créer une connexion de service dans la section suivante.
Créer une connexion de service
Une connexion de service fournit un accès authentifié à partir d’Azure Pipelines vers des services externes et distants. Pour effectuer un déploiement sur votre application web Azure App Service, créez une connexion de service au groupe de ressources de votre application web.
Dans la page de votre projet Azure DevOps, sélectionnez Paramètres du projet.
Dans Paramètres du projet, sélectionnezConnexions de service>.
Dans la page Connexions de service, sélectionnez Nouvelle connexion de service ou Créer une connexion de service si cette connexion de service est la première dans le projet.
Dans l’écran Nouvelle connexion de service , sélectionnez Azure Resource Manager , puis sélectionnez Suivant.
Dans l’écran Nouvelle connexion de service Azure , sélectionnez votre type d’identité. Cet exemple utilise l’inscription d’application (automatique) qui est recommandé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.
Pour les informations d’identification, sélectionnez Fédération des identités de charge de travail (automatique).
Renseignez les champs suivants :
- Niveau d’étendue : sélectionnez Abonnement.
- Abonnement: Sélectionnez votre abonnement Azure.
- Groupe de ressources : sélectionnez le groupe de ressources qui contient votre application web.
- Nom de la connexion de service : entrez un nom descriptif pour la connexion.
- Accorder des autorisations d’accès à tous les pipelines : activez cette case à cocher pour accorder l’accès à tous les pipelines du projet.
Cliquez sur Enregistrer.
Dans la page de votre projet Azure DevOps, sélectionnez Paramètres du projet.
Dans Paramètres du projet, sélectionnezConnexions de service>.
Dans la page Connexions de service, sélectionnez Nouvelle connexion de service ou Créer une connexion de service si cette connexion de service est la première dans le projet.
Dans l’écran Nouvelle connexion de service , sélectionnez Azure Resource Manager , puis sélectionnez Suivant.
Sélectionnez Principal de service (manuel), puis sélectionnez Suivant.
Dans l’écran Nouvelle connexion de service Azure , renseignez les champs suivants :
- Environnement : sélectionnez Azure Cloud.
- Niveau d’étendue : sélectionnez l’abonnement.
- ID d’abonnement : entrez votre ID d’abonnement Azure.
- Nom de l’abonnement : entrez le nom de votre abonnement Azure.
Dans la section Authentification , renseignez les champs suivants :
-
ID du principal de service : entrez la
appIdvaleur retournée par laaz ad sp create-for-rbaccommande. - Informations d’identification : sélectionnez la clé du Service principal.
-
Clé du principal de service : entrez la
passwordvaleur retournée par laaz ad sp create-for-rbaccommande. -
ID de locataire : entrez la
tenantvaleur retournée par laaz ad sp create-for-rbaccommande. - Sélectionnez Vérifier pour vérifier la connexion.
-
ID du principal de service : entrez la
Dans la section Détails , sous Nom de connexion de service, entrez un nom pour la connexion de service.
Activez la case à cocher Pour accorder des autorisations d’accès à tous les pipelines.
Sélectionnez Vérifier et enregistrer.
La nouvelle connexion apparaît dans la liste des connexions de service et est prête à être utilisée dans votre pipeline.
Créer une chaîne de traitement
Créez un pipeline pour construire et déployer votre application web Python sur Azure App Service.
Dans le menu de navigation de gauche de votre projet, sélectionnez Pipelines.
Dans la page Pipelines , sélectionnez Nouveau pipeline ou Créez un pipeline si ce pipeline est le premier dans le projet.
Dans l’écran Où se trouve votre code , sélectionnez GitHub. Vous pourriez être invité à vous connecter à GitHub.
Dans l’écran Sélectionner un référentiel, sélectionnez votre référentiel d'exemple bifurqué. GitHub peut vous inviter à entrer à nouveau votre mot de passe GitHub ou à installer l’application GitHub Azure Pipelines . Suivez les instructions à l’écran pour installer l’application. Pour plus d’informations, consultez l’authentification des applications GitHub.
Dans la page Configurer votre pipeline , sélectionnez Python sur Linux Web App sur Azure.
Dans l’écran suivant, sélectionnez votre abonnement Azure et sélectionnez Continuer.
Dans l’écran suivant, sélectionnez votre application web Azure, puis sélectionnez Valider et configurer.
Azure Pipelines crée un fichier azure-pipelines.yml et l’affiche dans l’éditeur de pipeline YAML.
Dans le menu de navigation de gauche de votre projet, sélectionnez Pipelines.
Dans la page Pipelines , sélectionnez Nouveau pipeline ou Créez un pipeline si ce pipeline est le premier dans le projet.
Dans la page Où se trouve votre code , sélectionnez GitHub Enterprise Server. Vous pourriez être invité à vous connecter à GitHub.
Sous l’onglet Sélectionner un référentiel , sélectionnez votre exemple de référentiel forked. GitHub peut vous inviter à entrer à nouveau votre mot de passe GitHub ou à installer l’extension ou l’application GitHub Azure Pipelines . Suivez les instructions à l’écran pour installer l’application. Pour plus d’informations, consultez Accès aux référentiels GitHub.
Dans la page Configurer votre pipeline , sélectionnez Pipeline de démarrage.
Dans la page Vérifier votre yaML de pipeline , remplacez le contenu du fichier de démarrage azure-pipelines.yml par le fichier de pipeline YAML suivant. Dans le fichier YAML :
Remplacez les espaces réservés
<your-service-connection-name>et<your-web-app-name>par vos valeurs.Remplacez
<your-pool-name>par le nom du pool d’agents que vous souhaitez utiliser, puis remplacez<your-python-version>par la version de Python exécutée sur votre agent. Cette version doit correspondre à la sortie JSON de la commandeaz webapp upruntime_version.
Fichier YAML de pipeline
Sur la page Révision de votre YAML de pipeline, examinez le pipeline afin de comprendre son fonctionnement. Assurez-vous que toutes les entrées par défaut sont adaptées à votre code. Pour en savoir plus sur le schéma de fichier YAML du pipeline, consultez la référence de schéma YAML.
L’exemple complet suivant de fichier de pipeline YAML définit votre pipeline CI/CD comme une série d’étapes, de travaux et d’étapes, où chaque étape contient les détails des différentes tâches et scripts. Le code YAML généré remplit automatiquement les espaces réservés avec des valeurs pour votre application et votre connexion.
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 setuptools
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
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 -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'
Variables
La variables section au début du fichier YAML définit les variables suivantes :
| Variable | Description |
|---|---|
azureServiceConnectionId |
ID de la connexion de service Azure Resource Manager. |
webAppName |
Nom de l’application web App Service. |
vmImageName |
Le nom du système d’exploitation à utiliser pour l’agent de build. |
environmentName |
Nom de l’environnement à déployer, qui est créé automatiquement lors de l’exécution du travail de déploiement. |
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. |
| Variable | Description |
|---|---|
azureServiceConnectionId |
ID de la connexion de service Azure Resource Manager. |
webAppName |
Nom de l’application web App Service. |
environmentName |
Nom de l’environnement à déployer, qui est créé automatiquement lors de l’exécution du travail 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. |
Phases de génération et de déploiement
Le pipeline se compose des phases de construction et de déploiement.
Étape de construction
L’étape de génération contient un travail unique qui s’exécute sur le système d’exploitation défini dans la vmImageName variable, dans ce cas ubuntu-latest.
- job: BuildJob
pool:
vmImage: $(vmImageName)
L’étape de génération contient une seule tâche qui s’exécute sur un agent dans 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 demands: Agent.Name -equals <agent-name>.
- job: BuildJob
pool:
name: <your-pool-name>
demands: python
Le travail contient plusieurs étapes :
Tout d’abord, la tâche UsePythonVersion sélectionne la version de Python à utiliser, comme défini dans la
pythonVersionvariable.- task: UsePythonVersion@0 inputs: versionSpec: '$(pythonVersion)' displayName: 'Use Python $(pythonVersion)'L’étape suivante utilise un script qui crée un environnement Python virtuel et installe les dépendances de l’application à partir de
requirements.txt. LeworkingDirectoryparamètre spécifie l’emplacement du code de l’application.- script: | python -m venv antenv source antenv/bin/activate python -m pip install --upgrade pip pip install setuptools pip install -r ./requirements.txt workingDirectory: $(projectRoot) displayName: "Install requirements"La tâche ArchiveFiles crée une archive ZIP qui contient l’application web générée.
- task: ArchiveFiles@2 displayName: 'Archive files' inputs: rootFolderOrFile: '$(projectRoot)' includeRootFolder: false archiveType: zip archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip replaceExistingArchive: trueLes paramètres sont définis comme suit :
Paramètre Description rootFolderOrFileL’emplacement du code de l’application. includeRootFolderIndique s’il faut inclure le dossier racine dans le fichier .zip . Réglez sur false. Si la valeur est définietrue, le contenu du fichier .zip est placé dans un dossier nommé s et la tâche ne peut pas trouver le code de l’application.archiveTypeLe type d’archive à créer. Réglez sur zip.archiveFileL’emplacement du fichier .zip à créer. replaceExistingArchiveIndique si une archive existante doit être remplacée si le fichier existe déjà. Réglez sur true.Le fichier
.zipest ensuite téléchargé vers le pipeline en tant qu’artefact nommédrop. L’étape de déploiement utilise le fichier .zip pour déployer l’application.- upload: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip displayName: 'Upload package' artifact: drop- Le
uploadparamètre définit l’emplacement et le nom du fichier .zip à charger. - Le
artifactparamètre définit le nom de l’artefact créé surdrop.
- Le
Phase de déploiement
L’étape de déploiement s’exécute si l’étape de compilation se termine correctement. Les mots clés dependsOn et condition définissent ce comportement.
dependsOn: Build
condition: succeeded()
L’étape de déploiement contient un travail de déploiement unique configuré comme suit.
- deployment: DeploymentJob
pool:
vmImage: $(vmImageName)
environment: $(environmentName)
Le
deploymentmot clé indique que le travail est un travail de déploiement ciblant un environnement sur lequel effectuer le déploiement. Leenvironmentfichier est créé automatiquement dans votre projet lors de l’exécution du travail.Le
poolparamètre spécifie le pool d’agents de déploiement et utilise le pool d’agents par défaut s’ilnamen’est pas spécifié. L’agent s’exécute sur le système d’exploitation défini dans lavmImageNamevariable, dans ce casubuntu-latest.
- deployment: DeploymentJob
pool:
name: <your-pool-name>
environment: $(environmentName)
Le
deploymentmot clé indique que le travail est un travail de déploiement ciblant un environnement sur lequel effectuer le déploiement. Leenvironmentfichier est créé automatiquement dans votre projet lors de l’exécution du travail.Le
poolparamètre spécifie le pool d’agents de déploiement et doit contenir un agent avec la possibilité d’exécuter la version python spécifiée dans le pipeline.
Le strategy mot clé définit la stratégie de déploiement.
strategy:
runOnce:
deploy:
steps:
- Le mot-clé
runOncespécifie que le travail de déploiement s’exécute une fois. - Le
deploymot clé spécifie l’exécutionstepsdans le travail de déploiement.
Dans steps cette étape, exécutez les tâches suivantes :
- UsePythonVersion@0 sélectionne la version de Python à utiliser, comme dans la phase de génération.
-
AzureWebApp@1 déploie l’application web et l’artefact
dropZIP.
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : <your-web-app-name>'
inputs:
azureSubscription: $(azureServiceConnectionId)
appName: $(webAppName)
package: $(Pipeline.Workspace)/drop/$(Build.BuildId).zip
- Le
azureSubscriptionparamètre contient lesazureServiceConnectionIdvariables de pipeline spécifiées. - La
appNamecontient la valeur de la variablewebAppName. - Spécifie
packagele nom et l’emplacement du fichier .zip à déployer.
En outre, étant donné que le référentiel python-vscode-flask-tutorial contient la commande de démarrage de l’application dans un fichier nommé startup.txt, vous pouvez spécifier la commande de démarrage de l’application en ajoutant le paramètre : startUpCommand: 'startup.txt'.
Exécuter le pipeline
Vous êtes maintenant prêt à essayer le pipeline.
Dans l’éditeur de pipeline, sélectionnez Enregistrer et exécuter.
Dans l’écran Enregistrer et exécuter , ajoutez un message de validation si vous le souhaitez, puis sélectionnez Enregistrer et exécuter.
Vous pouvez surveiller l’exécution du pipeline en sélectionnant les étapes ou les travaux sur la page Résumé du pipeline. Chaque tâche et chaque étape affichent une coche verte au fur et à mesure qu'elles sont terminées avec succès. Si des erreurs se produisent, elles apparaissent dans le résumé ou dans les étapes du travail.
Vous pouvez rapidement revenir à 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.
Dans la sortie, sélectionnez l’URL après l’URL de l’application App Service. L’application doit apparaître comme suit :
Remarque
Si un déploiement d’application échoue en raison d’une dépendance manquante, le fichier requirements.txt n’a pas été traité pendant le déploiement. Ce problème peut se produire si vous créez l’application web directement dans le portail plutôt que d’utiliser la az webapp up commande.
La commande az webapp up définit spécifiquement l’action de build SCM_DO_BUILD_DURING_DEPLOYMENT sur true. Si vous approvisionnez un service d’application via le portail, cette action n’est pas automatiquement définie.
Pour définir cette action :
- Dans la page du portail de votre application web, sélectionnez Configuration dans le menu de navigation de gauche.
- 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_DEPLOYMENTet Valeur surtrue, puis sélectionnez OK. - Sélectionnez Enregistrer en haut de la page Configuration.
- Exécuter de nouveau le pipeline. Les dépendances devraient maintenant s'installer pendant le déploiement.
Déclencher une exécution du pipeline
Ce pipeline est défini pour s’exécuter chaque fois qu’une modification est effectuée dans le référentiel de code. 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 au dépôt GitHub de votre application.
- Apportez une modification au code, comme changer le titre de l’application.
- Validez la modification.
- Accédez à votre pipeline et vérifiez qu’une nouvelle exécution est créée et est en cours d’exécution.
- Une fois que l’exécution est terminée, vérifiez que les modifications ont été correctement déployées sur votre application web.
- Dans le portail Azure, accédez à votre application web et sélectionnez Centre de déploiement dans le menu de navigation de gauche.
- Sélectionnez l’onglet Journaux et vérifiez que le nouveau déploiement est répertorié.
Déployer des applications Django sur App Service
Vous pouvez utiliser Azure Pipelines pour déployer des applications Django sur 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 les bases de données externes.
Comme expliqué dans le processus de démarrage du 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, utilisez le startUpCommand paramètre à l’étape AzureWebApp@1 de votre fichier de pipeline YAML.
Lorsque vous utilisez Django, vous souhaitez généralement migrer les modèles de données à l’aide manage.py migrate d’après le déploiement du code de l’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 de test 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 Exécuter des tests.
Nettoyer les ressources
Si vous avez terminé avec les ressources Azure que vous avez créées dans ce tutoriel, supprimez-les pour éviter les frais supplémentaires.
- Supprimez le projet Azure DevOps 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 Azure qui gère le système de fichiers Cloud Shell. Fermez Cloud Shell, puis recherchez le groupe de ressources qui commence par cloud-shell-storage-. Sélectionnez Supprimer le groupe de ressources, puis suivez les invites.