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
- Uma conta do GitHub em que você pode criar um repositório. Crie um gratuitamente
- Uma organização e um projeto do Azure DevOps. Crie um gratuitamente.
- Uma capacidade de executar pipelines em agentes hospedados pela Microsoft. Você pode comprar um trabalho paralelo ou solicitar uma camada gratuita.
- Conhecimento básico do YAML e do Azure Pipelines. Para obter mais informações, consulte Criar seu primeiro pipeline.
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.
- 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'