O que é Implantação Contínua (CD)?

A implantação contínua leva a prática DevOps de automatizar as etapas de build, testes e implantação ao máximo. Se uma alteração no código passar com êxito por todas as etapas anteriores do pipeline, essa alteração será implantada automaticamente no ambiente de produção sem qualquer intervenção manual. A adoção da implantação contínua significa que você pode entregar novos recursos para seus usuários o mais rápido possível, sem comprometer a qualidade.

A implantação contínua é sustentada por uma integração contínua bem testada e etapas de entrega contínua. Pequenas alterações de código são regularmente submetidas ao branch master via commit. Em seguida são submetidas a um processo automatizado de build e testes com promoção através de diversos ambientes de pré-produção e, se nenhum problema for detectado, o serviço é finalmente implantado para entrar em funcionamento. A construção de um pipeline de implantação automatizado robusto e confiável significa que lançamentos poderão se tornar não-eventos que ocorrem diversas vezes ao dia.

Embora automatizar o processo de lançamento final para entrar em execução não seja uma solução adequada para qualquer projeto de software, você ainda pode se beneficiar de alguns dos elementos individuais envolvidos na adoção eficaz da implantação contínua. Este artigo explorará o que está envolvido e o que você deve ter em mente antes de dar este último passo para criar, implantar e dar continuidade a tudo.

O que é Implantação Contínua (CD)?

Fazendo com que a implantação contínua seja uma realidade

Se os seus processos de integração e implantação são completamente manuais, com congelamentos de código, estratégias de testes que requerem o envolvimento de todos, a ansiedade de toda a empresa no dia do lançamento e depois a cada hora, a ideia de realizar implantações sem nenhuma interferência pode soar como uma fantasia.

Mas a realidade é que muitas empresas estão adotando essa abordagem, desde grandes empresas como Netflix, Etsy e Amazon a empresas menores que tentam acompanhar o mercado. A adoção do sistema de implantação contínua permitiu que reduzissem o tempo de lançamento de semanas ou até meses para horas. Para uma quantidade cada vez maior de setores da indústria, a capacidade de entregar recursos rapidamente e responder de forma ágil ao feedback dos usuários tornou-se essencial.

Como uma extensão da integração e entrega contínuas, a implantação contínua depende de um processo de implantação totalmente automatizado de teste e compilação para garantir que a velocidade não prejudique a qualidade. Mas para pôr em prática a implantação contínua de maneira eficaz é necessário ter mais do que uma base sólida.

Ao planejar como implementar um sistema de implantação contínua, uma questão importante a ser considerada é como suas alterações serão lançadas. Além de escolher uma atualização que possa ser colocada em execução, em vez de colocar os servidores offline evitando assim interrupções frequentes em serviços online, você também pode fazer com que a distribuição seja uma extensão do seu processo de testes automatizados.

Uma implantação canário (canary deployment) limita a implantação do código atualizado a uma pequena porcentagem dos usuários, que se tornam testadores involuntários na produção. Ao monitorar o comportamento e as métricas de uso, você pode verificar se a nova versão não introduziu novas falhas antes de distribuí-la de forma mais abrangente.

Algumas empresas têm levado a automação mais longe com uma pontuação de confiança canário, que compara automaticamente uma série de métricas em relação a uma linha de referência. A distribuição continua automaticamente apenas se a pontuação exceder o limite especificado, enquanto a análise da métrica fornece um ponto de partida para uma investigação mais aprofundada de possíveis problemas.

Um processo de implantação de compilação azul/verde é uma técnica comum para organizações que implementam um sistema de implantação contínua, pois facilita a reversão de um lançamento no caso de um problema, mantendo o código antigo online até que você tenha certeza de que as alterações são funcionando como esperado. Se necessário, você pode seguir uma implantação canário inicial com um lançamento azul/verde.

Esteja você executando uma implantação azul/verde ou implantando substituições diretas, monitorar a integridade do sistema de produção é essencial se você deseja ser capaz de responder rapidamente a quaisquer bugs que tenham escapado ao processo de lançamento.

Ficar de olho nas métricas específicas que indicam a integridade do seu sistema, desde espaço em disco e uso da CPU até o número de solicitações ou transações, e compará-los com uma linha de referência pode fornecer um aviso prévio quando as coisas não estiverem se comportando como deveriam. Você pode então decidir se deseja reverter a alteração ou avançar, introduzindo uma correção através do pipeline.

Considerações para a implantação contínua

Antes de entrar na onda da implantação contínua, vale a pena reservar um momento para considerar alguns dos problemas que normalmente surgem ao adotar a CD.

O ciclo de vida de desenvolvimento de software envolve bem mais que apenas alterações de código. As equipes de pesquisa de usuário, marketing de produto, design de interação, documentação, comercial, jurídica e de suporte têm todas um papel a cumprir.

Se você ainda não estabeleceu as bases com suas partes interessadas nem se envolveu com elas para entender as suas necessidades dentro do processo de lançamento, a mudança para a implantação contínua pode fazer com que elas tenham a impressão que o desenvolvimento está fora de controle. Isso pode resultar na introdução de pontos de verificação manuais e estágios de revisão para desacelerar o processo, ou até mesmo na rejeição de todo o sistema de implantação contínua como um experimento fracassado.

É essencial a criação de uma cultura de colaboração. Envolver outras equipes por todo o processo de desenvolvimento para que suas opiniões - quanto a design, questões de segurança, terminologia ou conformidade - possam ser incorporadas desde o início é um exemplo de como ciclos curtos de feedback podem tornar o ciclo de vida de desenvolvimento de software mais eficiente. Tão importante quanto estimular o compartilhamento de opiniões é fornecer visibilidade sobre o que está sendo lançado e quando. A tarefa de manter as partes interessadas informadas pode ser automatizada com a ajuda de um servidor de CI, uma ferramenta de implantação de compilação contínua, para disseminar informações por meio de dashboards e notificações.

Às vezes, a visibilidade do que está sendo feito, por si só, não é suficiente. Quando você está trabalhando num recurso maior ou precisa controlar a programação de um lançamento, simplesmente implantar cada commit e colocar o serviço no ar depois de passar em todos os testes não é o ideal.

Sinalizadores de recursos são uma das alternativas para controlar a visibilidade do código em produção, com a vantagem de que o código estará rodando ao vivo, para que você possa monitorar falhas inesperadas. Uma outra abordagem é usar uma branch dedicada, implantada em um pipeline separado que não faz push para a produção automaticamente, combinando dessa forma tanto a entrega contínua, como a implantação contínua para atender às suas necessidades.

Práticas recomendadas para implantação contínua

Quando bem feita, a implantação contínua pode ajudar as equipes a automatizar a implantação de software para os usuários. Seguir práticas recomendadas para implantação contínua pode ajudar você a simplificar o processo e obter melhores resultados. Por exemplo, é importante monitorar e medir seu pipeline regularmente em busca de sinais de problemas. Também faz sentido envolver toda a equipe para criar um pipeline de CI/CD eficaz.

Comparação entre implementação e entrega contínuas

É fácil confundir as duas, mas a implantação contínua e a entrega contínua são partes distintas no lado CD do pipeline de CI/CD. While continuous delivery is focused on automating the steps required to deliver the software to users (for example, by automating builds, test automation, etc.), continuous deployment is a logical continuation of the process, automating the release of the software to end users provided that all necessary criteria are met.

Resumindo

A implantação contínua usa automação ao máximo para entregar funcionalidades aos usuários com rapidez, sem comprometer a qualidade. Um aspecto fundamental para esta prática DevOps é a obtenção de feedback frequente e rápido. Testes automatizados, monitoramento de produção, colaboração com outras funções e comportamento dos usuários, todas essas coisas fornecem dados para o processo de desenvolvimento de software. Ao trabalhar em partes menores e realizar lançamentos com frequência, você pode continuar ajustando o produto com base no feedback dos usuários e melhorar continuamente o produto que está entregando.