Partilhar via


Adicionar estágios, dependências e condições

Serviços de DevOps do Azure | Azure DevOps Server 2022 - Azure DevOps Server 2019

Um estágio é um limite lógico em um pipeline do Azure DevOps. Estágios de ações de grupo em seu processo de desenvolvimento de software, como criar o aplicativo, executar testes e implantar na pré-produção. Cada etapa contém um ou mais trabalhos.

Quando você define vários estágios em um pipeline, por padrão, eles são executados um após o outro. As etapas também podem depender umas das outras. Você pode usar a dependsOn palavra-chave para definir dependências. As etapas também podem ser executadas com base no resultado de uma etapa anterior com condições.

Para saber como os estágios funcionam com trabalhos paralelos e licenciamento, consulte Configurar e pagar por trabalhos paralelos.

Para descobrir como os estágios se relacionam com outras partes de um pipeline, como tarefas, consulte Principais conceitos de pipelines.

Você também pode saber mais sobre como os estágios se relacionam com partes de um pipeline no artigo Estágios do esquema YAML.

Pode organizar os trabalhos de pipeline em fases. Os estágios são as principais divisões em um pipeline: construir este aplicativo, executar esses testes e implantar na pré-produção são bons exemplos de estágios. Existem limites lógicos no seu pipeline, onde é possível pausá-lo e realizar várias verificações.

Cada pipeline tem pelo menos um estágio, mesmo que você não o defina explicitamente. Você também pode organizar estágios em um gráfico de dependência para que um estágio seja executado antes de outro. Uma etapa pode ter até 256 postos de trabalho.

Especificar fases

No caso mais simples, você não precisa de limites lógicos em seu pipeline. Para esses cenários, você pode especificar diretamente os trabalhos em seu arquivo YAML sem a stages palavra-chave. Por exemplo, se você tiver um pipeline simples que cria e testa um aplicativo pequeno sem exigir ambientes ou etapas de implantação separados, poderá definir todos os trabalhos diretamente sem usar estágios.

pool:
  vmImage: 'ubuntu-latest'

jobs:
- job: BuildAndTest
  steps:
  - script: echo "Building the application"
  - script: echo "Running tests"

Este pipeline tem um estágio implícito e duas tarefas. A stages palavra-chave não é usada porque há apenas um estágio.

jobs:
- job: Build
  steps:
  - bash: echo "Building"

- job: Test
  steps:
  - bash: echo "Testing"

Para organizar o pipeline em vários estágios, use o stages comando. Este YAML define um pipeline com dois estágios, onde cada estágio contém vários trabalhos e cada trabalho tem etapas específicas para executar.

stages:
- stage: A
  displayName: "Stage A - Build and Test"
  jobs:
  - job: A1
    displayName: "Job A1 - build"
    steps:
    - script: echo "Building the application in Job A1"
      displayName: "Build step"
  - job: A2
    displayName: "Job A2 - Test"
    steps:
    - script: echo "Running tests in Job A2"
      displayName: "Test step"

- stage: B
  displayName: "Stage B - Deploy"
  jobs:
  - job: B1
    displayName: "Job B1 - Deploy to Staging"
    steps:
    - script: echo "Deploying to staging in Job B1"
      displayName: "Staging deployment step"
  - job: B2
    displayName: "Job B2 - Deploy to Production"
    steps:
    - script: echo "Deploying to production in Job B2"
      displayName: "Production deployment step"

Se você especificar um pool no nível do estágio, todos os trabalhos nesse estágio usarão esse pool, a menos que o estágio seja especificado no nível do trabalho.

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

Especificar dependências

Quando você define vários estágios em um pipeline, eles são executados sequencialmente por padrão na ordem em que você os define no arquivo YAML. A exceção é quando você adiciona dependências. Com dependências, os estágios são executados na ordem dos dependsOn requisitos.

Os pipelines devem conter pelo menos um estágio sem dependências.

Para obter mais informações sobre como definir estágios, consulte estágios no esquema YAML.

Os estágios de exemplo a seguir são executados sequencialmente. Se você não usar uma dependsOn palavra-chave, os estágios serão executados na ordem em que são definidos.

stages:
- stage: Build
  displayName: "Build Stage"
  jobs:
  - job: BuildJob
    steps:
    - script: echo "Building the application"
      displayName: "Build Step"

- stage: Test
  displayName: "Test Stage"
  jobs:
  - job: TestJob
    steps:
    - script: echo "Running tests"
      displayName: "Test Step"

Exemplos de estágios que são executados em paralelo:

stages:
- stage: FunctionalTest
  displayName: "Functional Test Stage"
  jobs:
  - job: FunctionalTestJob
    steps:
    - script: echo "Running functional tests"
      displayName: "Run Functional Tests"

- stage: AcceptanceTest
  displayName: "Acceptance Test Stage"
  dependsOn: [] # Runs in parallel with FunctionalTest
  jobs:
  - job: AcceptanceTestJob
    steps:
    - script: echo "Running acceptance tests"
      displayName: "Run Acceptance Tests"

Exemplo de comportamento de fan-out e fan-in:

stages:
- stage: Test

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

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

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

Definir condições

Você pode especificar as condições sob as quais cada estágio é executado com expressões. Por padrão, um estágio é executado se não depender de nenhum outro estágio ou se todos os estágios dos quais ele depende tiverem sido concluídos e bem-sucedidos. Você pode personalizar esse comportamento forçando um estágio a ser executado mesmo se um estágio anterior falhar ou especificando uma condição personalizada.

Se você personalizar a condição padrão das etapas anteriores para um estágio, removerá as condições de conclusão e sucesso. Portanto, se utilizar uma condição personalizada, é comum usar and(succeeded(),custom_condition) para verificar se o estágio anterior foi executado com êxito. Caso contrário, a etapa é executada independentemente do resultado da etapa anterior.

Nota

As condições para falha ('JOBNAME/STAGENAME') e para sucesso ('JOBNAME/STAGENAME'), conforme demonstrado no exemplo seguinte, funcionam apenas para pipelines YAML.

Exemplo para executar um estágio com base no resultado da execução de um estágio anterior:

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

Exemplo de utilização de uma condição personalizada:

stages:
- stage: A

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

Especificar políticas de enfileiramento

Os YAML pipelines não suportam políticas de enfileiramento. Cada execução de um pipeline é independente e não tem conhecimento das outras execuções. Em outras palavras, suas duas confirmações sucessivas podem acionar dois pipelines, e ambos executarão a mesma sequência de estágios sem esperar um pelo outro. Enquanto estamos a trabalhar para introduzir políticas de enfileiramento em pipelines YAML, recomendamos que utilize aprovações manuais para sequenciar e controlar manualmente a ordem de execução, se isso for importante.

Especificar aprovações

Você pode controlar manualmente quando um estágio deve ser executado usando verificações de aprovação. Isso é comumente usado para controlar implantações em ambientes de produção. As verificações são um mecanismo disponível ao proprietário do recurso para controlar se e quando um estágio pode consumir um recurso num pipeline. Como proprietário de um recurso, como um ambiente, você pode definir verificações que devem ser satisfeitas antes que um estágio que consuma esse recurso possa ser iniciado.

Neste momento, as verificações manuais de aprovação são implementadas em ambientes. Para obter mais informações, consulte Aprovações.

Adicionar um gatilho manual

Os estágios de pipeline YAML acionados manualmente permitem que você tenha um pipeline unificado sem sempre executá-lo até a conclusão.

Por exemplo, o seu pipeline pode incluir estágios para construção, teste, implantação em um ambiente de teste e implantação em produção. Talvez você queira que todos os estágios sejam executados automaticamente, exceto a implantação de produção, que você prefere acionar manualmente quando estiver pronto.

Para usar este recurso, adicione a propriedade trigger: manual a um estágio.

No exemplo a seguir, o estágio de desenvolvimento é executado automaticamente, enquanto o estágio de produção requer acionamento manual. Ambos os estágios executam um script de saída hello world.

stages:
- stage: Development
  displayName: Deploy to development
  jobs:
  - job: DeployJob
    steps:
    - script: echo 'hello, world'
      displayName: 'Run script'
- stage: Production
  displayName: Deploy to production
  trigger: manual
  jobs:
  - job: DeployJob
    steps:
    - script: echo 'hello, world'
      displayName: 'Run script'

Marcar uma etapa como não pode ser saltada

Marque um estágio como isSkippable: false para evitar que os utilizadores do pipeline saltem estágios. Por exemplo, você pode ter um modelo YAML que injeta um estágio que executa a deteção de malware em todos os pipelines. Se definir isSkippable: false para este estágio, o seu pipeline não conseguirá esquivar-se da deteção de malware.

No exemplo a seguir, o estágio de deteção de malware é marcado como não pulável, o que significa que deve ser executado como parte da execução do pipeline.

- stage: malware_detection
  displayName: Malware detection
  isSkippable: false
  jobs:
  - job: check_job
    ...

Quando um estágio não pode ser ignorado, ele é exibido com uma caixa de seleção desabilitada no painel de configuração Estágios para executar .

Captura de ecrã das etapas a executar com a etapa desativada.