arquitetura base de CI/CD do Azure Pipelines

Este artigo apresenta uma arquitetura de referência para criar um pipeline de integração contínua e implantação contínua (CI/CD) com o Azure Pipelines. Use essa arquitetura como ponto de partida se precisar automatizar a criação, o teste e a implantação de aplicativos em ambientes de preparo e produção em Azure. A arquitetura define três pipelines, PR (solicitação de pull), CI (integração contínua) e CD (implantação contínua) e mostra como eles funcionam em conjunto com Azure Repos, Azure Key Vault e Azure Monitor para validar, compilar e implantar seus aplicativos com segurança.

Arquitetura

diagrama de arquitetura de um pipeline de CI/CD usando o Azure Pipelines.

Baixe um Arquivo Visio dessa arquitetura.

Nota

Embora este artigo aborde CI/CD para alterações de aplicativo, o Azure Pipelines também pode ser usado para criar pipelines de CI/CD para alterações de IaC (infraestrutura como código).

Fluxo de Dados

Os dados fluem pelo cenário da seguinte maneira:

  1. Pipeline de PR – uma PR (Pull Request, Solicitação de pull) para Git do Azure Repos dispara um pipeline de PR. Esse pipeline executa verificações de qualidade rápidas. Essas verificações devem incluir:

    • Criar o código, que requer a extração de dependências de um sistema de gerenciamento de dependências.
    • O uso de ferramentas para analisar o código, como análise de código estático, linting e verificação de segurança
    • Testes de unidade

    Se qualquer uma das verificações falhar, a execução do pipeline terminará e o desenvolvedor terá que fazer as alterações necessárias. Se todas as verificações forem aprovadas, o pipeline deverá exigir uma revisão de PR. Se a revisão de PR falhar, o pipeline terminará e o desenvolvedor terá que fazer as alterações necessárias. Se todas as verificações e revisões de PR forem aprovadas, a PR será mesclada com êxito.

  2. Pipeline de CI – Uma mesclagem para Git do Azure Repos dispara um pipeline de CI. Esse pipeline executa as mesmas verificações que o pipeline de PR, além de testes de integração. O pipeline de CI executa testes de integração em vez do pipeline de PR por dois motivos:

    • Os testes de integração podem ser intensivos em recursos, portanto, executá-los depois que uma mesclagem equilibra a velocidade de desenvolvimento com a detecção de bugs.
    • Testes aprovados em uma PR não garantem que continuarão aprovados após a mesclagem, porque alterações no branch main podem introduzir novos problemas que só são detectados pelos testes após a mesclagem.

    Esses testes de integração não devem exigir a implantação da solução, pois os artefatos de build ainda não foram criados. Se um teste exigir segredos, o pipeline os recuperará de Azure Key Vault. Se alguma verificação falhar, o pipeline terminará e o desenvolvedor precisará fazer as alterações necessárias. Uma execução bem-sucedida desse pipeline cria e publica os artefatos de compilação.

  3. Gatilho de pipeline de CD – A publicação de artefatos dispara o pipeline de CD.

  4. Versão de CD para preparo – O pipeline de CD baixa os artefatos de build criados no pipeline de CI e implanta a solução em um ambiente de preparo. Em seguida, o pipeline executa testes de aceitação no ambiente de preparo para validar a implantação. Se algum teste de aceitação falhar, o pipeline terminará e o desenvolvedor terá que fazer as alterações necessárias. Se os testes forem bem-sucedidos, uma tarefa de validação manual poderá ser implementada para exigir que uma pessoa ou grupo valide a implantação e retome o pipeline.

  5. Lançamento de CD para produção – Se a intervenção manual for retomada ou não houver intervenção manual implementada, o pipeline lançará a solução para produção. O pipeline deve executar smoke tests em produção para garantir que a versão esteja funcionando conforme o esperado. Se uma etapa de intervenção manual resultar em um cancelamento, a versão falhar ou os testes de fumaça falharem, a versão será revertida, o pipeline terminará e o desenvolvedor terá que fazer as alterações necessárias.

  6. Monitoramento – O Azure Monitor coleta dados de observabilidade, como logs e métricas, para que um operador possa analisar dados de integridade, desempenho e de uso. O Application Insights coleta todos os dados de monitoramento específicos do aplicativo, como rastreamentos. O Azure Log Analytics é usado para armazenar todos esses dados.

Componentes

  • Um repositório Git do Azure Repos serve como um repositório de código que fornece controle de versão e uma plataforma para projetos colaborativos.

  • O Azure Pipelines fornece uma maneira de criar, testar, empacotar e liberar código de aplicativo e infraestrutura. Este exemplo tem três pipelines distintos com as seguintes responsabilidades:

    • Os pipelines de PR validam o código, antes de permitir que uma PR mescle por meio de lint, compilação e teste de unidade.
    • Os pipelines de CI são executados depois que o código é mesclado. Eles executam a mesma validação que os pipelines de PR, mas adicionam testes de integração e publicam artefatos de build se tudo for bem-sucedido.
    • Os pipelines de CD implantam artefatos de build, executam testes de aceitação e são liberados para produção.
  • Azure Artifacts feeds permitem gerenciar e compartilhar pacotes de software, como Maven, npm e NuGet. Os feeds permitem que você gerencie o ciclo de vida de seus pacotes, incluindo controle de versão, promoção e desativação de pacotes, o que ajuda a garantir que sua equipe use as versões mais recentes e seguras de suas dependências.

  • Key Vault fornece uma maneira de gerenciar dados seguros para sua solução, incluindo segredos, chaves de criptografia e certificados. Nessa arquitetura, ela é usada para armazenar segredos do aplicativo. Esses segredos são acessados por meio do pipeline. Os segredos podem ser acessados pelo Azure Pipelines com uma tarefa Key Vault ou vinculando segredos de Key Vault.

  • Monitor é um recurso de observabilidade que coleta e armazena métricas e logs, telemetria de aplicativos e métricas de plataforma para os serviços do Azure. Use esses dados para monitorar o aplicativo, configurar alertas, dashboards e executar a análise de causa raiz de falhas.

  • Application Insights é um serviço de monitoramento que fornece insights em tempo real sobre o desempenho e o uso de seus aplicativos Web.

  • O workspace de análise de logs fornece um local central em que você pode armazenar, consultar e analisar dados de várias fontes, incluindo recursos, aplicativos e serviços do Azure.

Alternativas

Embora este artigo se concentre no Azure Pipelines, você pode considerar estas alternativas:

  • Servidor do Azure DevOps pode ser usado como um substituto no local.

  • Jenkins é uma ferramenta de software livre usada para automatizar builds e implantações.

  • O sistema GitHub Actions permite que você automatize seus fluxos de trabalho de CI/CD diretamente do GitHub.

  • Os repositórios do GitHub podem ser substituídos como o repositório de código. O Azure Pipelines se integra perfeitamente aos repositórios do GitHub.

Este artigo se concentra em práticas gerais de CI/CD com o Azure Pipelines. Veja a seguir alguns ambientes de computação nos quais você pode considerar a implantação:

  • Serviço de Aplicativo é um serviço baseado em HTTP para hospedar aplicativos Web, APIs REST e back-ends móveis. Você pode desenvolver em seu idioma favorito, e aplicativos são executados e dimensionados com facilidade em ambientes baseados em Windows e Linux. O Serviço de Aplicativo dá suporte a slots de implantação, como preparo e produção, para que você possa implantar um aplicativo em um slot de preparo e liberá-lo para o slot de produção.

  • Máquinas Virtuais do Azure lida com cargas de trabalho que exigem um alto grau de controle ou dependem de componentes e serviços do sistema operacional que não são possíveis com o Serviço de Aplicativo.

  • Azure Power Platform é uma coleção de serviços de nuvem que permitem que os usuários criem, implantem e gerenciem aplicativos sem a necessidade de infraestrutura ou conhecimento técnico.

  • do Azure Functions é uma plataforma de computação sem servidor que você pode usar para criar aplicativos. Com o Functions, você pode usar gatilhos e associações para integrar serviços. As funções também dão suporte a slots de implantação, como preparo e produção. Você pode implantar um aplicativo em um slot de preparo e liberá-lo para o slot de produção.

  • AKS (Serviço de Kubernetes do Azure) é um cluster Kubernetes gerenciado no Azure. O Kubernetes é uma plataforma de orquestração de contêiner de software livre.

  • Os Aplicativos de Contêiner do Azure permitem executar aplicativos conteinerizados em uma plataforma sem servidor.

Detalhes do cenário

O uso de práticas comprovadas de CI e CD para implantar alterações de aplicativo ou infraestrutura oferece vários benefícios, incluindo:

  • ciclos de versão mais curtos – os processos automatizados de CI/CD permitem que você implante mais rápido do que as práticas manuais. Muitas organizações implantam várias vezes por dia.
  • Melhor qualidade de código - Critérios de qualidade em pipelines de integração contínua (CI), como análise estática e testes unitários, resultam em código de maior qualidade.
  • Risco reduzido de liberação – as práticas adequadas de CI/CD reduzem drasticamente o risco de liberar novos recursos, já que a implantação pode ser testada antes do lançamento.
  • aumento da produtividade – a CI/CD automatizada libera os desenvolvedores de trabalhar em integrações e implantações manuais para que possam se concentrar em novos recursos.
  • Habilitar reversões – Embora as práticas adequadas de CI/CD reduzam o número de bugs ou regressões lançadas, eles ainda ocorrem. CI/CD pode permitir retornos automatizados a versões anteriores.

Possíveis casos de uso

Considere o Azure Pipelines e os processos de CI/CD para:

  • Acelerando o desenvolvimento de aplicativos e os ciclos de vida de implantação.
  • Criando qualidade e consistência em um processo automatizado de build e lançamento.
  • Aumentando a estabilidade e o tempo de atividade do aplicativo.

Considerações

Essas considerações implementam os pilares do Azure Well-Architected Framework, que é um conjunto de princípios orientadores que você pode usar para melhorar a qualidade de uma carga de trabalho. Para obter mais informações, consulte Microsoft Azure Well-Architected Framework.

Excelência operacional

  • Implemente a IaC (Infraestrutura como Código) para definir sua infraestrutura e implantá-la em seus pipelines.

  • Use as Variáveis de Versão em suas definições de versão para fazer alterações de configuração de seus ambientes. As variáveis de versão podem ser definidas para uma versão inteira ou um determinado ambiente. Ao usar variáveis para informações secretas, certifique-se de selecionar o ícone de cadeado.

  • Considere usar agentes auto-hospedados se você estiver implantando em recursos executados em uma rede virtual segura ou se executar um alto volume de compilações. Agentes auto-hospedados podem ajudar você a acelerar os builds de forma econômica e escalável.

  • Considere usar Application Insights e outras ferramentas de monitoramento o mais cedo possível em seu pipeline de lançamento. Muitas organizações só começam a monitorar em seu ambiente de produção. Monitorando seus outros ambientes, você pode identificar bugs anteriormente no processo de desenvolvimento e evitar problemas em seu ambiente de produção.

  • Considere usar recursos de monitoramento separados para produção.

  • Considere usar pipelines YAML em vez da interface Clássica. Os pipelines YAML podem ser tratados como outros códigos. Os pipelines YAML podem ser verificados no controle do código-fonte e com controle de versão, por exemplo.

  • Use modelos YAML para promover a reutilização e simplificar pipelines. Por exemplo, pipelines de PR e CI são semelhantes. Um único modelo parametrizado pode ser usado para ambos os pipelines.

  • Considere criar ambientes além de teste e produção para dar suporte a atividades, como testes manuais de aceitação do usuário, testes de desempenho e carga, e reversões.

Otimização de custo

A otimização de custos é sobre a busca de maneiras de reduzir despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, consulte Visão geral do pilar de otimização de custos.

Os custos do Azure DevOps dependem do número de usuários em sua organização que exigem acesso, juntamente com outros fatores, como o número de build/versões simultâneas necessárias e o número de usuários de teste. Para saber mais, confira Preços de Azure DevOps.

Essa calculadora de preços fornece uma estimativa para executar o Azure DevOps com 20 usuários.

O Azure DevOps é cobrado por usuário por mês. Pode haver mais cobranças, dependendo da necessidade de pipelines simultâneos, além de mais usuários de teste ou licenças básicas de usuário adicionais.

Segurança

  • Considere os benefícios de segurança de usar agentes hospedados pela Microsoft ao escolher se devem usar agentes hospedados pela Microsoft ou auto-hospedados.

  • Verifique se todas as alterações nos ambientes são feitas por meio de pipelines. Implemente controles de acesso baseados em função (RBAC) com base no princípio de privilégios mínimos, impedindo que os usuários acessem ambientes.

  • Considere a integração de etapas em Azure Pipelines para controlar dependências, gerenciar o licenciamento, verificar vulnerabilidades e manter as dependências atualizadas.

Próximas etapas