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

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019 | TFS 2018

Примечание

В Microsoft Team Foundation Server (TFS) 2018 и предыдущих версий конвейеры сборки и выпуска называются определениями, выполнения называются сборками, подключения к службам называются конечными точками служб, этапы называются средами, а задания называются этапами.

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

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

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

Чтобы узнать, как этапы связаны с другими частями конвейера, такими как задания, см. раздел Основные понятия конвейеров.

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

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

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

Примечание

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

Эта версия TFS не поддерживает YAML.

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

Примечание

Поддержка этапов была добавлена в 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]

Эта версия TFS не поддерживает конвейеры YAML.

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

Примечание

Поддержка этапов была добавлена в 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

Эта версия TFS не поддерживает конвейеры YAML.

Условия

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

При настройке условия по умолчанию предыдущих шагов для этапа удаляются условия для завершения и успешного выполнения. Таким образом, если вы используете пользовательское условие, оно обычно используется для 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'))

Эта версия TFS не поддерживает конвейеры YAML.

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

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

Эта версия TFS не поддерживает конвейеры YAML.

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

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

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

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

Эта версия TFS не поддерживает конвейеры YAML.