Ajouter des phases, des dépendances, & des conditions

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Une étape est une limite logique dans un pipeline Azure DevOps. Les étapes peuvent être utilisées pour regrouper des actions dans votre processus de développement logiciel (par exemple, construire l'application, exécuter les tests, déployer en pré-production). Chaque index contient un ou plusieurs travaux.

Lorsque vous définissez plusieurs index dans un pipeline, par défaut, ceux-ci s’exécutent l’un après l’autre. Les étapes peuvent également être interdépendantes. Vous pouvez utiliser le mot-clé dependsOn pour définir des dépendances. Les étapes peuvent également être exécutées de manière conditionnelle en fonction du résultat d'une étape précédente.

Pour comprendre le fonctionnement des index avec des travaux parallèles et des licences, consultez Configurer et payer des travaux parallèles.

Pour comprendre le lien entre les index et d’autres parties d’un pipeline, telles que des travaux, consultez Concepts clés des pipelines.

Vous pouvez également en savoir plus sur le lien entre les index et les parties d’un pipeline dans l’article relatif aux index de schéma YAML.

Vous pouvez organiser les travaux de pipeline en phases. Les phases sont les principales divisions d’un pipeline : « générer cette application », « exécuter ces tests » et « déployer en préproduction » sont de bons exemples de phases. Il s’agit de limites logiques dans votre pipeline qui vous permettent de suspendre le pipeline et d’effectuer diverses vérifications.

Chaque pipeline comporte au moins un index, même si vous ne le définissez pas explicitement. Vous pouvez également organiser des index dans un graphique de dépendance afin qu’un index s’exécute avant un autre. Il y a une limite de 256 tâches par étape.

Remarque

La prise en charge des index a été ajoutée dans Azure DevOps Server 2019.1.

Spécifier des index

Notes

La prise en charge des index a été ajoutée dans Azure DevOps Server 2019.1.

Dans le cas le plus simple, vous n’avez pas besoin de limites logiques dans votre pipeline. Dans ce cas, vous n’avez pas besoin d’utiliser explicitement le mot clé stage. Vous pouvez spécifier directement les travaux dans votre fichier YAML.

# this has one implicit stage and one implicit job
pool:
  vmImage: 'ubuntu-latest'
steps:
- bash: echo "Hello world"
# this pipeline has one implicit stage
jobs:
- job: A
  steps:
  - bash: echo "A"

- job: B
  steps:
  - bash: echo "B"

Si vous organisez votre pipeline en plusieurs index, utilisez le mot clé stages.

stages:
- stage: A
  jobs:
  - job: A1
  - job: A2

- stage: B
  jobs:
  - job: B1
  - job: B2

Si vous choisissez de spécifier un pool au niveau de l'étape, tous les travaux définis dans cette étape utilisent ce pool, sauf si vous le spécifiez au niveau du travail.

Remarque

Dans Azure DevOps Server 2019, les pools peuvent uniquement être spécifiés au niveau du travail.

stages:
- stage: A
  pool: StageAPool
  jobs:
  - job: A1 # will run on "StageAPool" pool based on the pool defined on the stage
  - job: A2 # will run on "JobPool" pool
    pool: JobPool

La syntaxe complète pour spécifier un index est la suivante :

stages:
- stage: string  # name of the stage, A-Z, a-z, 0-9, and underscore
  displayName: string  # friendly name to display in the UI
  dependsOn: string | [ string ]
  condition: string
  pool: string | pool
  variables: { string: string } | [ variable | variableReference ] 
  jobs: [ job | templateReference]

Spécifier des dépendances

Notes

La prise en charge des index a été ajoutée dans Azure DevOps Server 2019.1.

Lorsque vous définissez plusieurs index dans un pipeline, par défaut, ils s’exécutent de manière séquentielle dans l’ordre dans lequel vous les définissez dans le fichier YAML, sauf lorsque vous ajoutez des dépendances. En cas de dépendances, les index s’exécutent dans l’ordre des exigences dependsOn.

Les pipelines doivent contenir au moins un index sans dépendances.

La syntaxe pour définir plusieurs index et leurs dépendances est la suivante :

stages:
- stage: string
  dependsOn: string
  condition: string

Exemples d’index qui s’exécutent séquentiellement :

# if you do not use a dependsOn keyword, stages run in the order they are defined
stages:
- stage: QA
  jobs:
  - job:
    ...

- stage: Prod
  jobs:
  - job:
    ...

Exemples d’index qui s’exécutent en parallèle :

stages:
- stage: FunctionalTest
  jobs:
  - job:
    ...

- stage: AcceptanceTest
  dependsOn: []    # this removes the implicit dependency on previous stage and causes this to run in parallel
  jobs:
  - job:
    ...

Exemple de distribution ramifiée et de distribution non ramifiée :

stages:
- stage: Test

- stage: DeployUS1
  dependsOn: Test    # this stage runs after Test

- stage: DeployUS2
  dependsOn: Test    # this stage runs in parallel with DeployUS1, after Test

- stage: DeployEurope
  dependsOn:         # this stage runs after DeployUS1 and DeployUS2
  - DeployUS1
  - DeployUS2

Définir les conditions

Vous pouvez spécifier les conditions dans lesquelles chaque index s’exécute avec des expressions. Par défaut, un index s’exécute s’il ne dépend d’aucun autre index, ou si tous les index dont il dépend sont terminés et réussis. Vous pouvez personnaliser ce comportement en forçant l’exécution d’un index même si un index précédent échoue ou en spécifiant une condition personnalisée.

Si vous personnalisez la condition par défaut des étapes précédentes pour un index, vous supprimez les conditions d’achèvement et de réussite. Par conséquent, si vous utilisez une condition personnalisée, il est courant d’utiliser and(succeeded(),custom_condition) pour vérifier si l’index précédent s’est exécuté correctement. Sinon, l’index s’exécute indépendamment du résultat de l’index précédent.

Notes

Les conditions d’échec (« JOBNAME/STAGENAME ») et de réussite (« JOBNAME/STAGENAME ») telles qu’indiquées dans l’exemple suivant fonctionnent uniquement pour les pipelines YAML.

Notes

La prise en charge des index a été ajoutée dans Azure DevOps Server 2019.1.

Exemple d’exécution d’un index en fonction de l’état d’exécution d’un index précédent :

stages:
- stage: A

# stage B runs if A fails
- stage: B
  condition: failed()

# stage C runs if B succeeds
- stage: C
  dependsOn:
  - A
  - B
  condition: succeeded('B')

Exemple d’utilisation d’une condition personnalisée :

stages:
- stage: A

- stage: B
  condition: and(succeeded(), eq(variables['build.sourceBranch'], 'refs/heads/main'))

Spécifier des stratégies de mise en file d’attente

Les pipelines YAML ne prennent pas en charge les stratégies de mise en file d’attente. Chaque exécution d’un pipeline est indépendante et ignore les autres exécutions. En d’autres termes, vos deux validations successives peuvent déclencher deux pipelines, et les deux exécutent la même séquence d’index sans s’attendre. Bien que nous travaillons à intégrer des stratégies de mise en file d’attente aux pipelines YAML, nous vous recommandons d’utiliser des approbations manuelles pour séquencer et contrôler manuellement l’ordre d’exécution, si cela est important.

Spécifier des approbations

Vous pouvez contrôler manuellement le moment auquel un index doit s’exécuter à l’aide de vérifications d’approbation. Cette vérification est couramment utilisée pour contrôler les déploiements dans des environnements de production. Les vérifications sont un mécanisme à la disposition du propriétaire de ressources qui lui permet de contrôler si un index dans un pipeline peut consommer une ressource et à quel moment. En tant que propriétaire d’une ressource, telle qu’un environnement, vous pouvez définir des vérifications qui doivent être satisfaites pour qu’un index consommant cette ressource puisse démarrer.

Actuellement, les vérifications d’approbation manuelle sont prises en charge sur les environnements. Pour plus d’informations, consultez Approbations.

Les approbations ne sont pas encore prises en charge dans les pipelines YAML de cette version d’Azure DevOps Server.