Entendendo os benefícios do CI/CD
Todo mundo que já trabalhou em equipe no desenvolvimento de um software, sabe como pode se tornar difícil o controle sobre as fases do projeto. Seja problemas para gerenciar as versões do código, para identificar qual alteração entregue quebrou o teste, ou até mesmo ter certeza de qual código está no servidor. Com o objetivo de resolver esses problemas, a utilização dos métodos de CI e CD tem sido cada vez mais implementados nas áreas da TI.
Afinal, o que é CI e CD?
Segundo a RedHat, “CI sempre se refere à integração contínua, que é um processo de automação para desenvolvedores. A CI é bem-sucedida quando novas mudanças no código de uma aplicação são desenvolvidas, testadas e consolidadas regularmente em um repositório compartilhado. É a solução ideal para evitar conflitos entre ramificações quando muitas aplicações são desenvolvidas ao mesmo tempo.”
Sendo assim, CI(Continuos Integration) ou integração contínua(em português), nada mais é que:
Um fluxo definido, com utilização de várias ferramentas, pelo qual seu código irá passar e ser testado continuamente a cada nova entrega de software.
Um exemplo simples que podemos imaginar de CI é:
- Um código sendo versionado no GitHub, que a cada novo push dispara uma execução no Jenkins;
- No Jenkins é executado os testes unitários, com o JUnit(ferramenta de execução de testes para Java, por exemplo);
- Em seguida é verificado a análise estática de código com o SonarQube(ferramenta de qualidade de código);
- E por fim, disponibilizar o software para demais etapas(CD).
“A integração contínua coloca uma grande ênfase na automação de testes para verificar se a aplicação não está quebrada sempre que novos commits são integrados ao branch principal.” (Atlassian)
Já CD, segundo a 4Linux, “é um conjunto de práticas com o objetivo de garantir que um novo código esteja apto para ser disponibilizado em ambiente de produção.” Entretanto, a publicação no ambiente de produção depende de uma aprovação prévia da área de negócio.
Sendo assim, CD(Continuos Delivery) ou entrega contínua, nada mais é que:
A continuação do fluxo de CI, acrescido de mais etapas que visa ter os códigos prontos para serem levados a produção dependendo apenas de algum processo de testes/autorização para ser implantado.
Um exemplo de fluxo de CI/CD, seria:
- Um código sendo versionado no GitHub, que a cada novo push dispara uma execução no Jenkins;
- No Jenkins é executado os testes unitários, com o JUnit(ferramenta de execução de testes para Java, por exemplo);
- Em seguida é verificado a análise estática de código com o SonarQube(ferramenta de qualidade de código);
- Por fim, é realizado a análise de vulnerabilidades de segurança com o Fortify, por exemplo;
- Assim, a aplicação fica em standby até os testes serem concluídos e sua implantação ser liberada para o ambiente de produção.
“A entrega contínua automatiza o processo de lançamento de software completo. Cada revisão confirmada aciona um fluxo automático que cria, testa e prepara a atualização.” (Amazon)
Além dos famosos CI e CD, existe um outro CD chamado de Continuos Deployment, que também pode ser implementado em conjunto com os demais métodos.
A implantação contínua é um passo além da entrega contínua. Toda alteração que passe pelo fluxo inteiro de testes e validações de produção será implantada diretamente para seus usuários.
“Não há intervenção humana, e apenas um teste com falha impedirá uma nova alteração de ser implementada na produção.”(Atlassian)
Um exemplo completo e simples da utilização dos métodos, seria:
- Um código sendo versionado no GitHub, que a cada novo push dispara uma execução no Jenkins;
- No Jenkins é executado os testes unitários, com o JUnit(ferramenta de execução de testes para Java, por exemplo);
- Em seguida é verificado a análise estática de código com o SonarQube(ferramenta de qualidade de código);
- Por fim, é realizado a análise de vulnerabilidades de segurança com o Fortify, por exemplo;
- E após a aplicação passar pelo teste automatizado de aceitação, é feito a implantação da aplicação sem intervenção humana.
Diante dessas informações, é possível entender um pouquinho do que essas práticas são capazes de fazer quando são incorporadas em equipes que estejam dispostas a melhorar seu modo de trabalho, assim como, sua qualidade de entrega.