Partilhar via


Arquitetura de linha de base CI/CD com Azure Pipelines

Este artigo descreve um fluxo de trabalho de DevOps de alto nível para implantar alterações de aplicativos em ambientes de preparação e produção no Azure. A solução usa práticas de integração contínua/implantação contínua (CI/CD) com o Azure Pipelines.

Importante

Este artigo aborda uma arquitetura geral de CI/CD usando o Azure Pipelines. Não se destina a cobrir as especificidades da implantação em ambientes diferentes, como os Serviços de Aplicativo do Azure, as Máquinas Virtuais e a Plataforma de Energia do Azure. As especificidades da plataforma de implantação são abordadas em artigos separados.

Arquitetura

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

Baixe um arquivo Visio dessa arquitetura.

Observação

Embora este artigo aborde CI/CD para alterações de aplicativos, os Pipelines do Azure também podem ser usados para criar pipelines de CI/CD para infraestrutura como alterações de código (IaC).

Fluxo de dados

Os dados fluem através do cenário da seguinte maneira:

  1. pipeline de PR - Uma solicitação pull (PR) para o Azure Repos Git aciona um pipeline de PR. Este pipeline executa verificações de qualidade rápidas. Essas verificações devem incluir:

    • Criação do código, que requer a extração de dependências de um sistema de gerenciamento de dependência.
    • O uso de ferramentas para analisar o código, como análise estática de código, linter e verificação de segurança
    • Testes unitários

    Se alguma das verificações falhar, a execução do pipeline termina e o desenvolvedor terá que fazer as alterações necessárias. Se todas as verificações forem aprovadas, o gasoduto deve exigir uma revisão de relações públicas. Se a revisão de RP falhar, o pipeline termina e o desenvolvedor terá que fazer as alterações necessárias. Se todas as verificações e revisões de RP passarem, o PR será mesclado com sucesso.

  2. pipeline de CI - Uma mesclagem ao Azure Repos Git aciona um pipeline de CI. Este pipeline executa as mesmas verificações que o pipeline PR com algumas adições importantes. O pipeline de CI executa testes de integração. Os testes de integração podem exigir muitos recursos, portanto, executá-los no pipeline de CI equilibra a velocidade de desenvolvimento e a deteção de bugs. Também é importante notar que passar em testes em um PR nem sempre garante que eles terão sucesso após a fusão, pois as mudanças no ramo principal podem introduzir novos problemas, destacando a necessidade de testes pós-fusão. Esses fatores tornam o pipeline de CI um lugar melhor para testes de integração do que o pipeline de RP. Esses testes de integração não devem exigir a implantação da solução, pois os artefatos de compilação ainda não foram criados. Se os testes de integração exigirem segredos, o pipeline obterá esses segredos do Cofre de Chaves do Azure. Se alguma das verificações falhar, o pipeline termina e o desenvolvedor terá que fazer as alterações necessárias. O resultado de uma execução bem-sucedida deste pipeline é a criação e publicação de artefactos de build.

  3. gatilho do pipeline de CD - A publicação de artefatos aciona o pipeline de CD.

  4. versão do CD para de preparo - O pipeline de CD baixa os artefatos de compilação criados no pipeline de CI e implanta a solução em um ambiente de preparação. O pipeline executa testes de aceitação no ambiente de ensaio para validação da implementação. Se algum teste de aceitação falhar, o pipeline termina e o desenvolvedor terá que fazer as alterações necessárias. Se os testes forem bem-sucedidos, uma tarefa de validação manual pode ser implementada para exigir que uma pessoa ou grupo valide a implantação e retome o pipeline.

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

  6. Monitorização - O Azure Monitor recolhe dados de observabilidade, como logs e métricas, para que um operador possa analisar dados de saúde, desempenho e utilização. 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 Azure Repos Git serve como um repositório de código que fornece controle de versão e uma plataforma para projetos colaborativos.

  • 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 a sua integração por meio de linting, build e testes unitários.
    • Os pipelines de CI são executados depois que o código é integrado. Eles executam a mesma validação que os pipelines de RP, mas adicionam testes de integração e publicam artefatos de compilação se tudo for bem-sucedido.
    • Os pipelines de CD implantam artefatos de compilação, executam testes de aceitação e liberam para produção.
  • Azure Artifact Feeds permitem gerenciar e compartilhar pacotes de software, como Maven, npm e NuGet. Os feeds de artefatos permitem que você gerencie o ciclo de vida de seus pacotes, incluindo controle de versão, promoção e desativação de pacotes. Isso ajuda você a garantir que sua equipe esteja usando as versões mais recentes e seguras de seus pacotes.

  • Key Vault fornece uma maneira de gerenciar dados seguros para sua solução, incluindo segredos, chaves de criptografia e certificados. Nessa arquitetura, ele é usado para armazenar segredos de aplicativos. Esses segredos são acessados pela canalização. Os segredos podem ser acessados pelo Azure Pipelines com um de tarefas do Cofre da Chave ou vinculando segredos do do Cofre da Chave.

  • 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, painéis e executar a análise de causa raiz de falhas.

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

  • O espaço de trabalho Log Analytics oferece um local central onde 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 nos Pipelines do Azure, você pode considerar estas alternativas:

  • Azure DevOps Server pode ser usado como uma alternativa local.

  • Jenkins é uma ferramenta de código aberto usada para automatizar compilações e implantações.

  • Ações do GitHub permitem automatizar seus fluxos de trabalho de CI/CD diretamente do GitHub.

  • GitHub Repositories pode ser substituído como o repositório de código. O Azure Pipelines integra-se perfeitamente com os repositórios do GitHub.

Este artigo se concentra nas práticas gerais de CI/CD com o Azure Pipelines. A seguir estão alguns ambientes de computação nos quais você pode considerar implantar:

  • Serviço de Aplicativo é um serviço baseado em HTTP para hospedagem de aplicativos Web, APIs REST e back-ends móveis. Você pode desenvolver em seu idioma favorito e os aplicativos são executados e dimensionados com facilidade em ambientes baseados em Windows e Linux. As Aplicações Web suportam slots de implantação como preparação e produção. Você pode implantar uma aplicação num slot de ensaio e publicá-la no 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 aplicativos Web.

  • 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.

  • 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 suportam slots de implantação, como preparação e produção. Você pode implantar uma aplicação num slot de preparação e liberá-la para o slot de produção.

  • O Azure Kubernetes Service (AKS) é um cluster Kubernetes gerido no Azure. O Kubernetes é uma plataforma de orquestração de contêineres de código aberto.

  • Azure Container Apps permite executar aplicativos em contêineres numa plataforma serverless.

Detalhes do cenário

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

  • Ciclos de lançamento mais curtos - 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 - Verificações de qualidade em pipelines de CI, como análises estáticas de código (linting) e testes de unidade, resultam em código de maior qualidade.
  • Diminuição do risco de lançamento de - Práticas eficazes de CI/CD diminuem drasticamente o risco de lançar novas funcionalidades. A implantação pode ser testada antes do lançamento.
  • Aumento da produtividade - CI/CD automatizado libera os desenvolvedores de trabalhar em integrações e implantações manuais para que possam se concentrar em novos recursos.
  • Ativar reversões - Embora as práticas apropriadas de CI/CD diminuam o número de bugs ou regressões que são lançados, eles ainda ocorrem. O CI/CD pode permitir reversões automatizadas para versões anteriores.

Casos de uso potenciais

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

  • Acelerando os ciclos de vida de desenvolvimento e implantação de aplicativos.
  • Construindo qualidade e consistência em um processo automatizado de compilação e liberação.
  • Aumento da estabilidade e do 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 podem ser usados para melhorar a qualidade de uma carga de trabalho. Para obter mais informações, consulte Microsoft Azure Well-Architected Framework.

Excelência operacional

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

  • Considere usar uma das Tarefas de Tokenização disponíveis no mercado VSTS. No contexto da tokenização, refere-se frequentemente a um processo em que informações confidenciais (como chaves de API, senhas ou outros segredos) são substituídas por tokens ou espaços reservados durante a implantação ou configuração.

  • Use Variáveis de lançamento nas tuas definições de lançamento para orientar as alterações de configuração dos teus ambientes. As variáveis de liberação podem ter o escopo de uma versão inteira ou de um determinado ambiente. Ao usar variáveis para informações secretas, certifique-se de selecionar o ícone de cadeado.

  • Considere usar agentes autogeridos se estiver a implantar em recursos executados numa rede virtual segura. Você também pode considerar agentes auto-hospedados se estiver executando um grande volume de compilações. Em situações de volume elevado de compilações, os agentes auto-hospedados podem ser usados para acelerar o processo de compilação de forma económica.

  • Considere usar do 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. Ao monitorar seus outros ambientes, você pode identificar bugs no início do processo de desenvolvimento e evitar problemas em seu ambiente de produção.

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

  • Considere usar pipelines YAML em vez da interface clássica. Os pipelines YAML podem ser tratados como outro código. Os pipelines YAML podem ser verificados no controle do código-fonte e versionados, por exemplo.

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

  • Considere a criação de ambientes além do preparo e da 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 custos

A otimização de custos consiste em procurar formas 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 compilações/lançamentos simultâneos necessários e o número de usuários de teste. Para obter mais informações, consulte os preços do Azure DevOps.

Esta 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 dos pipelines simultâneos necessários, além de mais usuários de teste ou licenças básicas do usuário.

Segurança

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

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

  • Considere integrar etapas no Azure Pipelines para rastrear dependências, gerenciar licenciamento, verificar vulnerabilidades e manter as dependências atualizadas.

Próximos passos

Analise os seguintes recursos para saber mais sobre CI/CD e Azure DevOps: