A entrega contínua (ou CD - Continuous Delivery), é a prática de automatizar as etapas manuais envolvidas na preparação do software para lançamento em produção.
A entrega contínua (CD) utiliza como base a integração contínua (CI), ao automatizar as etapas envolvidas na preparação do software para lançamento em produção.
Sempre que você faz merge de alterações de código num branch designado, o processo de integração contínua executa uma série de verificações, inclusive testes de unidade automatizados, e cria uma build. A entrega contínua amplia esse processo, implantando automaticamente cada build em uma série de ambientes de teste e preparação e executando outros testes automatizados.
Esses testes podem incluir testes de integração, testes de interface do usuário, testes de desempenho (como testes de carga, absorção e estresse) e testes de ponta a ponta. Dependendo do seu setor, você também pode usar a entrega contínua para executar testes de segurança, testes de acessibilidade e testes manuais de aceitação dos usuários ou testes exploratórios. Quando uma build passa por cada estágio com sucesso, ela é considerada pronta para ser lançada em produção.
Assim como na integração contínua, o segredo para uma prática de entrega contínua eficaz é automatizar o processo ao máximo. Isso inclui fornecer feedback sobre cada estágio e alertar a equipe sempre que a build não passar em um estágio, para que você possa resolver o problema rapidamente.
Tanto a entrega contínua quanto a implantação contínua envolvem a implantação automática de builds em ambientes e a execução de testes automatizados. Como resultado, os dois termos às vezes são usados de maneira intercambiável. No entanto, há uma distinção prática entre a entrega contínua e a implantação contínua.
Com a implantação contínua, uma alteração de código é implantada automaticamente em produção sempre que ela passa com sucesso em cada estágio de teste. Por outro lado, a entrega contínua envolve uma etapa manual para o estágio final: a liberação do software para produção.
Embora a implantação contínua possa parecer a meta ideal para qualquer equipe de desenvolvimento de software, há bons motivos pelos quais muitas equipes optam por praticar a entrega contínua.
O estágio final de um processo de CI/CD envolve a implantação das alterações de código na produção. Com a entrega contínua, a decisão de liberar para a produção é uma etapa manual, mesmo que o processo de liberação propriamente dito seja automatizado.
Algumas equipes praticam a entrega contínua como um trampolim para a implantação contínua. O acionamento manual da implantação final em produção oferece uma rede de segurança enquanto você cultiva a confiança nos seus testes e verificações automatizados. Nesse caso, você pode optar por praticar a entrega contínua por vários meses antes de passar a implantar automaticamente em produção todas as alterações de código bem-sucedidas.
No entanto, implantar atualizações no software várias vezes por dia ou por hora nem sempre é a melhor opção. Para software com controle de versão, incluindo aplicativos móveis, APIs, softwares embarcados ou produtos de desktop, geralmente faz sentido agrupar as alterações em versões maiores. Os usuários de produtos instalados não esperam ter que atualizar seus aplicativos a cada poucas horas, enquanto o upgrade para uma nova versão da API pode afetar significativamente seus clientes. Escolher entre entrega contínua e implantação contínua é tomar a decisão certa para sua empresa e seus usuários.
Embora as etapas exatas de build, ambientes e testes dependam do seu produto e da sua organização, os princípios gerais a seguir ajudarão você a criar seu processo de entrega contínua:
A entrega contínua permite que as equipes liberem o software com mais rapidez e frequência, reduzindo o número de bugs que chegam à produção. O segredo para conseguir isso é garantir que seu código esteja sempre pronto para ser lançado, testando continuamente as alterações e resolvendo os problemas assim que forem descobertos.
Além disso, a entrega contínua oferece vários benefícios adicionais:
A implantação de um processo de entrega contínua pode trazer alguns desafios:
Criar um processo de entrega contínua pode parecer assustador, mas, quando feito corretamente é capaz de acelerar drasticamente os lançamentos de software enquanto minimiza os bugs.
A adoção da mentalidade de DevOps é fundamental para a implantação eficaz da entrega contínua. Em vez de encarar o processo de desenvolvimento de software como uma esteira rolante unidirecional, com requisitos, códigos e relatórios passados de uma equipe para a outra, o DevOps defende a colaboração e o feedback rápido de ciclos curtos e iterativos.
Mudar sua "definição de feito" pode ajudar você a adotar essa mentalidade. Em vez de considerar a tarefa concluída quando você entrega seu código para teste, seu novo recurso ou alteração de código somente é concluído quando é lançado em produção. Se um problema for encontrado em qualquer estágio do pipeline, comunicar esse feedback imediatamente e colaborar para realizar uma correção faz com que a resolução seja mais rápida do que a elaboração de relatórios longos que precisariam passar por uma comissão de alterações para ter aprovação. É disso que se trata a entrega contínua.
Para receber mais dicas que ajudarão você a começar a usar a entrega contínua, leia nosso guia de práticas recomendadas de CI/CD.
A entrega contínua faz com que o lançamento de software seja mais fácil e mais rápido, permitindo que você possa implantá-lo em ambiente de produção com muito mais frequência. Em vez de ter um grande lançamento trimestral ou anual, atualizações menores são entregues com frequência. Isto significa que os usuários receberão novas funcionalidades e correções de bugs mais cedo, mas não apenas isto. Também significa que você saberá como seu software é usado e poderá ajustar seus planos de acordo com esse feedback.
Enquanto algumas organizações preferem manter o controle sobre a etapa final do processo de lançamento, para outras, a conclusão lógica de um pipeline de CI/CD é automatizar o lançamento para que o serviço vá ao ar, usando uma prática conhecida como implantação contínua (continuous deployment). Você pode saber mais sobre isso na próxima seção do nosso guia de CI/CD.
O TeamCity é uma plataforma de CI/CD com amplo suporte para uma grande variedade de ferramentas de build, frameworks de teste, containers e provedores de infraestrutura de nuvem. Não importa se você deseja hospedar suas máquinas de build localmente, na nuvem ou usar uma combinação de ambos, o TeamCity coordenará as tarefas de build para proporcionar eficiência máxima.
A lógica de pipeline personalizável do TeamCity significa que você pode escolher quando executar processos em paralelo - como testes em diferentes plataformas - e quando exigir a conclusão bem-sucedida antes de passar para o próximo estágio. Notificações configuráveis fornecem as informações necessárias onde quer que você esteja trabalhando, ajudando a evitar interrupções desnecessárias. Por fim, os resultados detalhados o ajudam a garantir que o caminho para a produção permaneça claro.