Compartilhar via


Criar um pipeline com estágios

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

Neste artigo, saiba como criar e executar um pipeline YAML mais complexo com vários estágios e condições. O pipeline de exemplo inclui fases de construção, teste e implantação e também tem etapas opcionais para implantações alternativas e reversões. Com vários estágios, você pode isolar diferentes partes do pipeline, melhorar o controle de qualidade e a segurança, ter melhor visibilidade do progresso do pipeline e reduzir o risco. O estágio de reversão permite reverter rapidamente para uma versão estável se algo der errado, aumentando a confiabilidade e a estabilidade.

Esse código funciona para a maioria dos cenários, mas não inclui requisitos específicos de linguagem ou plataforma. Como próxima etapa, personalize o pipeline para suas necessidades de implementação específicas.

Pré-requisitos

1. Criar o estágio de compilação

No estágio Build, restaure as dependências e execute testes de unidade para garantir que o código esteja pronto para teste e implantação. Se o aplicativo precisar compilar o código-fonte, faça isso no estágio de build.

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

stages:
- stage: Build
  displayName: 'Build Stage'
  jobs:
  - job: BuildJob
    displayName: 'Build Job'
    steps:
    - script: |
        echo "Restoring project dependencies..."
      displayName: 'Restore dependencies'
    - script: |
        echo "Running unit tests..."
      displayName: 'Run unit tests'

2. Adicionar a fase de teste

A fase Test executa testes no projeto e normalmente publica os resultados do teste no Azure DevOps. Para saber mais sobre a publicação dos resultados dos testes, consulte a tarefa Publicar Resultados do Teste.

O estágio de Teste só será executado se o estágio de Compilação for concluído com êxito e o estágio não puder ser ignorado.

Como isSkippable está definido como false, a opção para ignorar o estágio de teste não está disponível na interface do usuário do Azure DevOps.

Captura de tela do estágio que não pode ser ignorado.

- stage: Test
  displayName: 'Test Stage'
  dependsOn: Build
  isSkippable: false
  jobs:
  - job: TestJob
    displayName: 'Test Job'
    steps:
    - script: |
        echo "Running unit tests..."
      displayName: 'Run unit tests'

3. Implantar no preparo

O estágio DeployToStaging depende do estágio Test para ser executado. O trabalho DeployStagingJobWithValidation requer aprovação manual. A tarefa de validação manual pausa a execução de pipeline e aguarda uma interação manual. Um usuário precisa validar o estágio antes que a execução prossiga. Ter uma aprovação manual em seu pipeline adiciona outro nível de segurança, ajuda a reduzir os riscos e garante que todas as alterações sejam revisadas pelos stakeholders apropriados.

O pool de aprovação manual é server. As validações manuais são executadas apenas em um pool de servidores.

- stage: DeployToStaging
  displayName: 'Deploy to Staging'
  dependsOn: Test
  jobs:
  - job: DeployStagingJob
    displayName: 'Deploy to Staging Job'
    pool:
      vmImage: 'ubuntu-latest'
    steps:
    - script: |
        echo "Build staging job..."
      displayName: 'Build and deploy to staging'

  - job: DeployStagingJobWithValidation
    pool: server
    timeoutInMinutes: 4320 # job times out in 3 days
    displayName: 'Deploy to Staging Job'
    steps:
    - task: ManualValidation@1
      timeoutInMinutes: 1440 # task times out in 1 day
      inputs:
        notifyUsers: user@example.com
        instructions: 'Please validate the stage configuration and resume'
        onTimeout: 'resume'

4. Implantar em produção

No estágio DeployToProduction, o aplicativo é implantado no ambiente de produção, mas somente se o estágio DeployToStaging for bem-sucedido e o branch de origem for main ou release.

A tarefa de validação manual aqui adiciona uma segunda etapa de validação humana para segurança e controle de qualidade. Também usamos uma tarefa de validação manual no estágio DeployToStaging.

- stage: DeployToProduction
  displayName: 'Deploy to Production'
  dependsOn: DeployToStaging
  lockBehavior: sequential
  condition: and(succeeded(), in(variables['Build.SourceBranch'], 'refs/heads/main', 'refs/heads/release'))
  jobs:
  - job: DeployProductionJob
    displayName: 'Deploy to Production Job'
    steps:
    - script: |
        echo "Deploying to production..."
        # Add your deployment commands here
      displayName: 'Run deployment commands'
  - job: waitForValidation
    displayName: Wait for external validation
    pool: server
    timeoutInMinutes: 4320 # job times out in 3 days
    steps:
    - task: ManualValidation@1
      timeoutInMinutes: 1440 # task times out in 1 day
      inputs:
        notifyUsers: user@example.com
        instructions: 'Please validate the build configuration and resume'
        onTimeout: 'resume'

5. Adicionar estágios opcionais de produção e reversão alternativos

Dois estágios opcionais, DeployToAlternateProduction e Rollback, são colocados em fila manualmente. O estágio DeployToAlternateProduction permite que você tenha um ambiente de produção de backup pronto caso o ambiente primário falhe. Isso aprimora a confiabilidade geral e a disponibilidade do aplicativo. Você também pode querer ter um ambiente de implantação alternativo para recuperação de desastre ou teste e validação. Para obter estratégias de implantação mais complicadas, consulte Trabalhos de implantação e Adicionar estágios, dependências e condições.

O estágio Rollback fornece uma rede de segurança para reverter seu aplicativo para um estado estável anteriormente se algo der errado durante ou após uma implantação. Isso pode ser devido a uma falha de implantação, bug, requisito de conformidade, recuperação de desastre ou outro problema. Um estágio de reversão é essencial para manter a estabilidade e a confiabilidade do aplicativo.

- stage: DeployToAlternateProduction
  displayName: 'Deploy to Alternate Production'
  condition: succeeded()
  trigger: manual
  jobs:
  - job: DeployAlternateProductionJob
    displayName: 'Deploy to Alternate Production Job'
    steps:
    - script: |
        echo "Deploying to alternate production..."
        # Add your deployment commands here
      displayName: 'Run deployment commands'

- stage: Rollback
  displayName: 'Rollback Stage'
  trigger: manual
  jobs:
  - job: RollbackJob
    displayName: 'Rollback Job'
    steps:
    - script: |
        echo "Rolling back the deployment..."
        # Add your rollback commands here
      displayName: 'Run rollback commands'

Próximas etapas