Simples CI/CD pipeline com Jenkins, Docker Swarm e Github — Parte 1
O que é um CI/CD?
CI/CD é um método para entregar aplicações com frequência aos clientes.
Este método aplica monitoramento, automatização contínua a todo o ciclo de vida das aplicações, além da entrega continua e implantações. É todo o ciclo de vida desde a codificação até o deploy.
Estou desenvolvendo um produto complexo ou um MVP para minha startup, porque o CI/CD é importante?
Bem, existem várias formas, métodos e práticas de desenvolver um software. Mas, todo time de desenvolvimento, toda empresa, deseja desenvolver o melhor software, que no final, alcance uma alta qualidade técnica e que entrega maior valor as reais necessidades do negócio.
Para atigir esses objetivos, não adianta chegar no final e testar toda a aplicação, pra saber se está tudo funcionando e se está correspondendo ao projetado.
A chave é ter um feedback curto, tanto na qualidade do código quanto na validação do negócio.
Quanto mais rápido for para desenvolver algo, fazer o code review, colocar em um ambiente de teste para ser validado pelo dono do produto e ir para a produção, melhor vai ser o resultado final.
O que é um CI (Continuos Integration)?
Todos os times de desenvolvimento utilizam alguma ferramenta para poder armazenar seu código fonte. O famoso SCM que é um controle de versão. No caso hoje é muito utilizado o GIT.
Então o CI é uma prática de desenvolvimento que tem o objetivo de fazer merges constantes com a branch principal, fazer automatização dos testes e code review. Essas práticas fazem com que as interações sejam custas, evitantado os métodos antigos, que ficavamos semanas ou meses trabalhando em uma atividade, sem atualizar o código e quando iríamos fazer os merges, dava conflito em tudo. A integração contínua coloca uma grande ênfase na automatização de testes para verificar se o código não está corrompido sempre que novos commits são integrados.
O que é um CD (Continuos Delivery)?
É a automatização do processo de liberação para seu cliente. CI automatiza os teste e o CD você automatiza seu processo de liberação decidindo liberar diariamente, semanalmente, mensalmente, dependendo da maturidade do seu time.
Mas como tudo na vida, não basta somente você implementar o CI/CD e sair para tomar um chopp. O time precisa ter uma maturidade, fazer liberações em pequenos lotes e ser bem rápido no feedback para poder resolver também de forma ágil algum erro em produção. Isso requer algumas outras técnicas que iniciamente não abordaremos aqui.
E esse tal de Continuos Deployment?
É o continuos delivery com um detalhe. Não tem interação humana.
No continuos delivery é preciso a confirmação humana para decidir se vai para a produção. No deployment não. Somente entra a interação humana em caso de alguma falha.
Resumo
Este é o conceito geral de um CI/CD.
No passo 2 vamos começar criar nosso CI/CD.