View on GitHub

manual-da-engenharia-para-codar

Este é o manual para compromissos de "código com" a engenharia.

Entrega Contínua

A inspiração por trás da entrega contínua é entregar constantemente software valioso para usuários e desenvolvedores com mais frequência. Aplicar os princípios e práticas delineados neste readme ajudará você a reduzir riscos, eliminar operações manuais e aumentar a qualidade e a confiança.

Implantar software envolve os seguintes princípios:

  1. Prover e gerenciar o ambiente em nuvem em tempo de execução para sua aplicação (recursos em nuvem, infraestrutura, hardware, serviços, etc).
  2. Instalar a versão da aplicação alvo em todos os ambientes em nuvem.
  3. Configurar sua aplicação, incluindo quaisquer dados necessários.

Um pipeline de entrega contínua é uma manifestação automatizada de seu processo para otimizar esses princípios de maneira consistente e repetível.

Objetivo

Orientação Geral

Definir uma Estratégia de Lançamento

É importante estabelecer um entendimento comum entre o Líder de Desenvolvimento e as partes interessadas da aplicação sobre a estratégia/design de lançamento durante a fase de planejamento de um projeto. Esse entendimento comum inclui a implantação e manutenção da aplicação ao longo de seu ciclo de vida de desenvolvimento de software.

Princípios da Estratégia de Lançamento

Continuous Delivery por Jez Humble e David Farley cobre as principais considerações a seguir ao criar uma estratégia de lançamento:

Lançamento da Aplicação e Promoção de Ambiente

Seu processo de manifestação de lançamento deve pegar o artefato de construção implantável criado em sua etapa de confirmação e implantá-lo em todos os ambientes em nuvem, começando pelo ambiente de teste.

O ambiente de teste (muitas vezes chamado de Integração) atua como um portão para validar se sua suíte de testes é bem-sucedida para todos os candidatos a lançamento. Essa validação deve sempre começar em um ambiente de teste enquanto inspeciona o lançamento implantado a partir do branch de feature/liberação contendo suas mudanças de código.

As mudanças de código lançadas no ambiente de teste normalmente têm como alvo o branch principal (quando usando trunk) ou o branch de lançamento (quando usando gitflow).

O Primeiro Lançamento

O primeiro lançamento de qualquer aplicação deve ser apresentado ao cliente em um ambiente semelhante à produção (UAT) para obter feedback rapidamente. O ambiente de UAT é usado para obter a aceitação do proprietário do produto para, em última análise, promover o lançamento para produção.

Critérios para um ambiente semelhante à produção

Modelagem de seu Pipeline de Lançamento

É crucial modelar seu processo de teste e lançamento para estabelecer um entendimento comum entre os engenheiros de aplicação e as partes interessadas do cliente. Alinhar especificamente as expectativas sobre quantos ambientes em nuvem precisam ser pré-provisionados, bem como definir os papéis e responsabilidades dos portões de aprovação.

imagem

Considerações na Modelagem do Pipeline de Lançamento

Estágios do Pipeline de Lançamento

Os estágios em seu fluxo de trabalho de lançamento estão testando, em última instância, uma versão de sua aplicação para validar se ela pode ser lançada de acordo com seus critérios de aceitação. O pipeline de lançamento deve considerar as seguintes condições:

teste da aplicação deve ter a capacidade de selecionar qual versão de lançamento implantar no ambiente de teste.

Aquecimento do Lançamento ao Vivo

Um lançamento deve estar em execução por um período de tempo antes de ser considerado ativo e permitido para aceitar o tráfego do usuário. Essas atividades de aquecimento podem incluir o pré-preenchimento de servidores de aplicação e bancos de dados com qualquer cache dependente, bem como estabelecer todas as conexões de serviço (por exemplo, alocações de pool de conexão, etc).

Lançamentos Pré-produção

Os candidatos a lançamento da aplicação devem ser implantados em um ambiente de staging semelhante ao de produção para realização de testes manuais/automatizados finais (incluindo testes de capacidade). Seus ambientes em nuvem de produção e staging/pré-produção devem ser configurados no início do projeto.

O aquecimento da aplicação deve ser uma medição quantificada que é validada como parte de seus testes de validação pré-produção.

Rollback de Lançamentos

Sua estratégia de lançamento deve considerar cenários de rollback no caso de falhas inesperadas após uma implantação.

O rollback de lançamentos pode ficar complicado, especialmente quando ocorrem alterações em registros/objetos de banco de dados como resultado de sua implantação (seja inadvertidamente ou intencionalmente). Se não houver alterações de dados que precisem ser revertidas, você pode simplesmente acionar um novo candidato a lançamento para a última versão conhecida da produção e promover esse lançamento ao longo de seu pipeline de entrega contínua.

Para cenários de rollback envolvendo alterações de dados, existem várias abordagens para mitigar isso, que estão fora do escopo deste guia. Algumas envolvem a versão de registros de banco de dados, registro no tempo de registros/objetos de banco de dados, etc. Todos os arquivos de dados e bancos de dados devem ser copiados de backup antes de cada lançamento, para que possam ser restaurados. A estratégia de mitigação para esse cenário variará entre nossos projetos. A expectativa é que essa estratégia de mitigação seja abordada como parte de sua estratégia de lançamento.

Outra abordagem a considerar ao projetar sua estratégia de lançamento são os anéis de implantação. Essa abordagem simplifica cenários de rollback ao limitar o impacto de seu lançamento nos usuários finais, implantando e validando gradualmente suas alterações na produção.

Lançamentos sem Interrupção

Uma implantação quente segue um processo de troca de usuários de uma versão para outra sem impactar a experiência do usuário. Como exemplo, os serviços gerenciados pela Azure permitem que os desenvolvedores validem as mudanças do aplicativo em um slot de implantação de teste antes de trocá-lo pelo slot de produção. A troca de slots de serviço de aplicativo também pode ser totalmente automatizada assim que o slot de origem estiver totalmente aquecido (e a troca automática estiver ativada). A troca de slots também simplifica a reversão de lançamentos assim que um operador técnico restaurar os slots para seus estados pré-troca.

O Kubernetes oferece suporte nativo a atualizações contínuas.

Implantações Blue/Green

Blue/Green é uma técnica de implantação que reduz o tempo de inatividade ao executar duas instâncias idênticas de um ambiente de produção chamadas Blue e Green.

Apenas um desses ambientes aceita tráfego de produção ao vivo de cada vez.

imagem

No exemplo acima, o tráfego de produção ao vivo é direcionado para o ambiente Green. Durante os lançamentos da aplicação, a nova versão é implantada no ambiente Blue, o que ocorre independentemente do ambiente Green. O tráfego ao vivo não é afetado pelas implantações do ambiente Blue. Você pode direcionar sua suíte de testes de ponta a ponta ao ambiente Blue como um de seus pontos de verificação de teste.

Migrar os usuários para a nova versão do aplicativo é tão simples quanto alterar a configuração do roteador para direcionar todo o tráfego para o ambiente Blue.

Essa técnica simplifica cenários de rollback, pois você pode simplesmente alternar o roteador de volta para o Green.

Provedores de banco de dados como Cosmos e Azure SQL oferecem suporte nativo à replicação de dados para ajudar a habilitar ambientes de banco de dados Blue/Green totalmente sincronizados.

Implantações de Lançamento Canary

As implantações Canary permitem que equipes de desenvolvimento obtenham feedback mais rápido ao implantar novos recursos na produção. Esses lançamentos são implantados em um subconjunto de nós de produção (onde nenhum usuário é direcionado) para coletar insights precoces sobre testes de capacidade, completude funcional e impacto.

imagem

Uma vez concluídos os testes de capacidade e fumaça, você pode direcionar um pequeno subconjunto de usuários para os nós de produção que hospedam o candidato a lançamento.

As implantações Canary simplificam os rollbacks, pois você pode evitar direcionar os usuários para versões ruins do aplicativo.

Tente limitar o número de versões de sua aplicação em execução paralelamente na produção, pois isso pode complicar os controles de manutenção e monitoramento.

Soluções de Low-Code/No-Code

Soluções de Low-Code/No-Codeo aumentaram sua participação nas aplicações e processos e, por causa disso, é necessário uma adequada combinação de disciplinas para melhorar seu desenvolvimento.

Aqui está um guia para entrega contínua para Soluções de Low-Code/No-Code.

Referências

Ferramentas

Confira as seguintes ferramentas que podem ajudar nas melhores práticas de Entrega Contínua mencionadas acima: