Добавление этапов, зависимостей и условий

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

Этап — это логическая граница в конвейере Azure DevOps. Этапы можно использовать для группирования действий в процессе разработки программного обеспечения (например, сборка приложения, выполнение тестов, развертывание в предварительной версии). Каждый этап содержит одно или несколько заданий.

При определении нескольких этапов конвейера по умолчанию они выполняются один после другого. Этапы также могут зависеть друг от друга. Для определения зависимостей можно использовать dependsOn ключевое слово. Этапы также могут выполняться на основе результата предыдущего этапа с условиями.

Сведения о том, как этапы работают с параллельными заданиями и лицензированием, см. в статье "Настройка и оплата параллельных заданий".

Сведения о том, как этапы связаны с другими частями конвейера, такими как задания, см . в основных понятиях конвейеров.

Дополнительные сведения о том, как этапы связаны с частями конвейера в статье о стадиях схемы YAML.

Задания конвейера можно упорядочить по этапам. Этапы являются основными подразделениями в конвейере: создание этого приложения, выполнение этих тестов и развертывание в предварительной версии являются хорошими примерами этапов. Они логические границы в конвейере, где можно приостановить конвейер и выполнить различные проверка.

Каждый конвейер имеет по крайней мере один этап, даже если вы не определяете его явным образом. Вы также можете упорядочить этапы в граф зависимостей, чтобы один этап запускал перед другим. Для этапа существует ограничение в 256 заданий.

Примечание.

Добавлена поддержка этапов в Azure DevOps Server 2019.1.

Указание этапов

Примечание.

Добавлена поддержка этапов в Azure DevOps Server 2019.1.

В самом простом случае в конвейере не требуются логические границы. В этом случае вам не нужно явно использовать stage ключевое слово. Вы можете напрямую указать задания в файле 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"

При организации конвейера на нескольких этапах используется stages ключевое слово.

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

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

Если вы решили указать на pool уровне этапа, то все задания, определенные на этом этапе, используют этот пул, если не указано на уровне задания.

Примечание.

В Azure DevOps Server 2019 пулы могут быть указаны только на уровне задания.

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

Полный синтаксис для указания этапа:

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]

Указание зависимостей

Примечание.

Добавлена поддержка этапов в Azure DevOps Server 2019.1.

При определении нескольких этапов конвейера по умолчанию они выполняются последовательно в том порядке, в котором они определяются в YAML-файле. Исключением из этого является добавление зависимостей. При использовании зависимостей этапы выполняются в порядке dependsOn требований.

Конвейеры должны содержать по крайней мере один этап без зависимостей.

Синтаксис определения нескольких этапов и их зависимостей:

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

Примеры этапов, которые выполняются последовательно:

# 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:
    ...

Примеры этапов, которые выполняются параллельно:

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:
    ...

Пример вентилятора и вентилятора:

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

Определение условий

Вы можете указать условия, в которых выполняется каждый этап с выражениями. По умолчанию этап выполняется, если он не зависит от какого-либо другого этапа, или если все этапы, от которых она зависит, завершена и успешно выполнена. Это поведение можно настроить путем принудительного запуска этапа, даже если предыдущий этап завершается сбоем или путем указания настраиваемого условия.

Если вы настраиваете условие по умолчанию предыдущих шагов для этапа, удалите условия завершения и успешности. Таким образом, если вы используете настраиваемое условие, обычно используется and(succeeded(),custom_condition) для проверка успешно ли выполнен предыдущий этап. В противном случае этап выполняется независимо от результата предыдущего этапа.

Примечание.

Условия сбоя ('JOBNAME/STAGENAME') и успешно завершены ('JOBNAME/STAGENAME'), как показано в следующем примере, работают только для конвейеров YAML.

Примечание.

Добавлена поддержка этапов в Azure DevOps Server 2019.1.

Пример запуска этапа на основе состояния выполнения предыдущего этапа:

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')

Пример использования настраиваемого условия:

stages:
- stage: A

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

Указание политик очередей

Конвейеры YAML не поддерживают политики очереди. Каждый запуск конвейера не зависит от других запусков. Другими словами, две последовательные фиксации могут активировать два конвейера, и оба из них будут выполнять одну и ту же последовательность этапов, не ожидая друг друга. Хотя мы работаем над переносом политик очередей в конвейеры YAML, рекомендуется использовать утверждения вручную для ручной последовательности и управления порядком выполнения, если это важно.

Указание утверждений

Вы можете вручную управлять выполнением этапа с помощью проверка утверждения. Это часто используется для управления развертываниями в рабочих средах. Проверки — это механизм, доступный владельцу ресурса для управления тем, может ли этап в конвейере использовать ресурс. Как владелец ресурса, например среды, можно определить проверка, которые должны быть удовлетворены до начала этапа использования этого ресурса.

В настоящее время в средах поддерживаются проверка утверждения вручную. Дополнительные сведения см. в Утверждения.

Утверждения пока не поддерживаются в конвейерах YAML в этой версии Azure DevOps Server.