Automatize as implantações

Last reviewed 2023-07-17 UTC

Este documento no Framework da arquitetura do Google Cloud fornece as práticas recomendadas para automatizar suas compilações, testes e implantações.

A automação ajuda a padronizar builds, testes e implantações eliminando erros induzidos por humanos para processos repetidos, como atualizações de código. Nesta seção, descrevemos como usar várias verificações e proteções durante a automação. Um processo padronizado e controlado por máquina ajuda a garantir a implantação segura das implantações. Ele também fornece um mecanismo para restaurar implantações anteriores conforme necessário, sem afetar significativamente a experiência do usuário.

Armazenar o código em repositórios de códigos centrais

Armazene o código em repositórios de código centrais que incluam um sistema de controle de versões com inclusão de tags e a capacidade de reverter as alterações no código. O controle de versões permite organizar arquivos e controlar o acesso, as atualizações e as exclusões em equipes e organizações.

Para diferentes estágios de desenvolvimento, controle a versão e rotule os repositórios conforme necessário. Por exemplo, os rótulos podem ser test, dev e prod.

No Google Cloud, é possível armazenar o código no Cloud Source Repositories, criar versões e integrá-las a outros produtos do Google Cloud. Se você estiver criando aplicativos em contêineres, use o Artifact Registry, um registro gerenciado para contêineres.

Para saber mais sobre o controle de versões, consulte Controle de versões. Para mais detalhes sobre como implementar o desenvolvimento baseado em linha principal com seus repositórios, consulte Desenvolvimento baseado em linha principal.

Use integração e implantação contínuas (CI/CD)

Automatize as implantações usando uma abordagem de integração e implantação contínuas (CI/CD). Uma abordagem de CI/CD é uma combinação de pipelines configurados e processados e seguidos pela equipe de desenvolvimento.

Uma abordagem de CI/CD aumenta a velocidade de implantação ao aumentar a produtividade da equipe de desenvolvimento de software. Essa abordagem permite que os desenvolvedores façam alterações menores e mais frequentes que são testadas completamente, reduzindo o tempo necessário para implantar essas alterações.

Como parte da abordagem de CI/CD, automatize todas as etapas que fazem parte da criação, teste e implantação do código. Exemplo:

  • Sempre que um novo código for confirmado no repositório, faça com que a confirmação invoque automaticamente o pipeline de criação e teste.
  • Automatize testes de integração.
  • Automatize a implantação para que as alterações sejam implantadas após o build atender a critérios de teste específicos.

No Google Cloud, é possível usar o Cloud Build e o Cloud Deploy para os pipelines de CI/CD.

Use o Cloud Build para ajudar a definir dependências e versões que podem ser usadas para empacotar e criar um pacote de aplicativo. Controle a versão da sua configuração de compilação para garantir que todos os seus builds sejam consistentes e para garantir que você possa reverter para uma configuração anterior, se necessário.

Use o Cloud Deploy para implantar seus aplicativos em ambientes específicos do Google Cloud e gerenciar seus pipelines de implantação.

Para mais detalhes sobre como implementar CI/CD, consulte Integração contínua e Automação da implantação.

Provisione e gerencie sua infraestrutura usando infraestrutura como código

Infraestrutura como código é o uso de um modelo descritivo para gerenciar infraestrutura, como VMs, e configurações, como regras de firewall. A infraestrutura como código permite que você faça o seguinte:

  • Crie seus recursos de nuvem automaticamente, incluindo os ambientes de implantação ou teste do pipeline de CI/CD.
  • Trate as mudanças de infraestrutura como as alterações do aplicativo. Por exemplo, certifique-se de que as alterações na configuração sejam revisadas, testadas e possam ser auditadas.
  • Ter uma única versão das informações para a infraestrutura em nuvem;
  • Replique seu ambiente de nuvem conforme necessário.
  • Reverta para uma configuração anterior, se necessário.

Esse conceito de infraestrutura como código também se aplica a projetos no Google Cloud. Essa abordagem pode ser usada para definir recursos, como conectividade de VPC compartilhada ou acesso ao Identity and Access Management (IAM) nos seus projetos. Para conferir um exemplo dessa abordagem, consulte o módulo do Terraform de fábrica do projeto do Google Cloud.

Ferramentas de terceiros, como o Terraform, ajudam você a criar sua infraestrutura no Google Cloud automaticamente. Para mais informações, consulte Como gerenciar a infraestrutura como código com o Terraform, o Cloud Build e o GitOps.

Avalie o uso de recursos do Google Cloud, como garantias de projeto, políticas de retenção do Cloud Storage e bloqueios de buckets do Cloud Storage para impedir que recursos críticos sejam excluídos de maneira acidental ou mal-intencionada.

Incorpore testes durante todo o ciclo de vida da entrega de software

Os testes são essenciais para o lançamento do seu software. O teste contínuo ajuda as equipes a criar softwares de alta qualidade com mais rapidez e a melhorar a estabilidade do software.

Tipos de teste:

  • Testes de unidade. Eles são rápidos e realizam implantações com eficiência. Trate os testes de unidade como parte do codebase e inclua-os como parte do processo de compilação.
  • Testes de integração. Eles são importantes, especialmente para cargas de trabalho projetadas para escalonamento e que dependem de mais de um serviço. Esses testes podem ficar complexos quando você testa a integração com serviços interconectados.
  • Teste do sistema. Eles são demorados e complexos, mas identificam casos extremos e corrigir problemas antes da implantação.
  • Outros testes. Há outros testes que você precisa executar, incluindo testes estáticos, de carga, de segurança, de validação de políticas e outros. Faça esses testes antes de implantar o aplicativo na produção.

Para incorporar testes:

  • execute todos os tipos de testes continuamente durante todo o ciclo de vida da entrega de software;
  • automatize esses testes e os inclua no pipeline de CI/CD; faça com que o pipeline falhe se qualquer um dos testes falhar;
  • atualize e adicione novos testes continuamente para melhorar e manter a integridade operacional da implantação;

Para seus ambientes de teste:

  • usar projetos separados do Google Cloud para cada ambiente de teste; para cada aplicativo, use um ambiente de projeto separado. Essa separação fornece uma demarcação clara entre os recursos do ambiente de produção e os recursos dos ambientes inferiores. Essa separação ajuda a garantir que as alterações em um ambiente não afetem acidentalmente outros ambientes.
  • Automatizar a criação de ambientes de teste. Uma maneira de fazer isso é usar a infraestrutura como código.
  • Usar um ambiente de produção sintético para testar as alterações. Esse ambiente é semelhante à produção para testar o aplicativo e realizar vários tipos de testes nas cargas de trabalho, incluindo testes completos e de desempenho.

Para mais informações sobre como implementar testes contínuos, consulte Automação de teste.

Lance implantações gradualmente

Escolha sua estratégia de implantação com base em parâmetros importantes, como interrupção mínima de usuários finais, atualizações graduais, estratégias de reversão e testes A/B. Para cada carga de trabalho, avalie esses requisitos e escolha uma estratégia de implantação com técnicas comprovadas, como atualizações graduais, implantações azul-verde e implantações canário.

Deixe que os processos de CI/CD só façam e enviem alterações em seu ambiente de produção.

Considere usar uma infraestrutura imutável. Uma infraestrutura imutável é não alterada ou atualizada. Quando for necessário implantar um novo código ou alterar qualquer outra configuração no ambiente, substitua todo o ambiente (uma coleção de VMs ou pods, por exemplo) pelo novo ambiente. As implantações azul-verde são um exemplo de infraestrutura imutável.

Recomendamos que você faça testes canário e observe se há erros no sistema conforme implantar as alterações. Esse tipo de observação é mais fácil se você tiver um sistema robusto de monitoramento e alerta. Para realizar testes A/B ou canário, use os grupos de instâncias gerenciadas do Google Cloud. Dessa forma, será possível fazer um lançamento lento ou uma restauração, se necessário.

Use o Cloud Deploy para automatizar implantações e gerenciar o pipeline de implantação. Você também pode usar muitas ferramentas de terceiros, como o Spinnaker e o Tekton, no Google Cloud para implantações automatizadas e para criar pipelines de implantação. de dados.

Restaurar versões anteriores sem problemas

Defina sua estratégia de restauração como parte da estratégia de implantação. Certifique-se de reverter uma implantação ou uma configuração de infraestrutura para uma versão anterior do código-fonte. Restaurar uma implantação estável anterior é uma etapa importante no gerenciamento de incidentes de incidentes de confiabilidade e segurança.

Verifique também se é possível restaurar o ambiente para o estado em que ele estava antes do processo de implantação ser iniciado. Isso inclui:

  • A capacidade de reverter mudanças de código no aplicativo.
  • A capacidade de reverter quaisquer alterações de configuração feitas no ambiente.
  • Uso de infraestrutura imutável e garantia de que as implantações não mudem o ambiente. Essas práticas facilitam a reversão das alterações de configuração.

Monitore seus pipelines de CI/CD

Para manter seu processo automatizado de criação, teste e implantação em execução sem problemas, monitore seus pipelines de CI/CD. Defina alertas que indiquem quando algo em qualquer pipeline falha. Cada etapa do pipeline precisa escrever log statements adequados para que a equipe possa realizar uma análise de causa raiz se um pipeline falhar.

No Google Cloud, todos os serviços de CI/CD são integrados ao Google Cloud Observability. Exemplo:

Para detalhes sobre monitoramento e geração de registros, consulte Configurar o monitoramento, os alertas e a geração de registros.

Implante aplicativos com segurança

Revise a seção Implantar aplicativos com segurança da categoria de segurança, conformidade e privacidade do framework de arquitetura.

Estabelecer diretrizes de gerenciamento para as versões

Para ajudar os engenheiros a cometer erros e permitir a entrega de software em alta velocidade, verifique se as diretrizes de gerenciamento para o lançamento de novas versões de software estão claramente documentadas.

Os engenheiros de lançamento supervisionam a criação e a entrega de software. O sistema de engenharia de versões é guiado por quatro práticas:

  • Modo de autoatendimento. Estabeleça diretrizes para ajudar os engenheiros de software a evitar erros comuns. Essas diretrizes geralmente são codificadas em processos automatizados.

  • Lançamentos frequentes. A alta velocidade soluciona problemas e facilita a correção de problemas. Os lançamentos frequentes dependem de testes de unidade automatizados.

  • Builds herméticos. Use ferramentas de compilação para garantir a consistência. Controle as versões de compiladores de build para criar versões atuais e compará-las com as de um mês atrás.

  • Aplicação da política. Todas as alterações precisam de revisão de código. O ideal é que incluam um conjunto de diretrizes e políticas para reforçar a segurança. A aplicação de políticas melhora a revisão de código, a solução de problemas e o teste de uma nova versão.

A seguir