Logo de cara vou te dizer CI/CD é a sigla para Continuous Integration e Continuous Delivery, e designa inovações nos processos de desenvolvimento e entrega de projetos.
Esses dois processos são baseados em fórmulas modernas que permitem que tanto o processo de desenvolvimento como a entrega de ferramentas seja mais ágil.
Além disso, os times tornam-se mais produtivos com a automação que estes processos trazem para o dia a dia.
Por isso, continue acompanhando esse material, entenda o que é CI/CD e saiba como estruturar estes processos de acordo com o que a Accurate realiza.
CI/CD, entenda
CI/CD designa respectivamente Continuous Integration e Continuous Delivery traduzindo: Integração Contínua e Entrega Contínua.
Ambas as siglas designam processos e técnicas modernas para tornar o processo de desenvolvimento, teste e entrega de ferramentas mais ágil e eficiente.
Continuous Integration, CI
Integração Contínua ou CI, significa uma automação para que todas às vezes que haja uma mudança em código de aplicação, ela seja integrada, testada e implementada.
E todo esse processo acontecendo em um ambiente compartilhado, com todos os envolvidos no processo.
Uma vez que é muito comum que aplicações sejam desenvolvidas por um time não somente por uma pessoa.
Dessa forma com o CI, é possível que todas as mudanças sejam realizadas no “mesmo local”, permitindo a integração de mudanças no código de maneira mais rápida.
Por meio dessa técnica há a diminuição de conflitos e problemas quando diversos projetos acontecem simultaneamente.
Continuous Delivery, CD
Entrega contínua ou CD, por sua vez, reúne a integração contínua e a testagem que podem ser agrupados em contêineres e depois colocado em produção.
Ou seja, ele ajunta esses códigos e testes realizados, e coloca-os em produção de forma automatizada.
Mesmo que necessite da ação humana, ele se torna automatizado ao colocar tudo o que foi feito “no ar” de maneira integrada e completa.
Continuous Deployment, CD automatização total
Existe um segundo CD que é a Implantação Total ou Continuous Deployment, onde tudo o que for integrado e testado é colocado em um repositório.
O repositório coloca tudo que foi desenvolvido, códigos da aplicação e afins em produção de forma contínua e totalmente automatizada.
Isso é uma evolução do CD, que apresentamos anteriormente, mas que depende do start humano para ser colocado em produção, enquanto aqui não.
CI/CD na Accurate
A Accurate identificou os seguintes desafios que levaram a utilizar o CI/CD nos projetos:
O primeiro era criar um fluxo/processo de desenvolvimento padronizado e automatizado para todos os times.
E a partir disso garantir a qualidade das entregas individuais dos desenvolvedores, assim como as entregas dos times.
Isso pode ser realizado através da definição de um processo de CI para execução dos testes unitários e validação da qualidade do código entregue
Seguido da definição de um processo de CD para construção das imagens e implantação nos ambientes continuamente.
Por fim buscou-se a definição de um processo para construção das imagens e implantação no ambiente de produção, onde em 2 etapas:
- Implantação em homologação;
- Caso a validação em homologação seja realizada com sucesso, aprovar a implantação em produção que apenas promove a imagem docker para produção.
Qual a estratégia utilizada para isso?
O primeiro passo é o alinhamento do processo/fluxo de desenvolvimento junto aos arquitetos envolvendo os líderes dos times.
Segue-se com o mapeamento das branches do Git para os ambientes (develop -> desenvolvimento e master -> [homologação e production])
E depois veio o disparo do Job de CI a cada Pull Request e do Job de CD a cada alteração nas branches mapeadas.
Foram definidas as seguintes ferramentas para esse processo:
- Repositório Git que possibilita a integração com o Jenkins via webhooks
- Jenkins para execução dos Jobs de CI e CD
- Sonar validação de código
- Nexus / NuGet / NPM, para salvar os artefatos construídos
- Docker Registry para armazenar e versionar as imagens geradas
Estratégias para a construção dos fluxos de CI e CD no Jenkins
Para o CI, é realizado o acionamento via Webhook quando um Pull Request é criado ou atualizado no repositório Git.
Seguido de verificação da qualidade e estilo do código, execução dos testes unitários, construção do pacote para verificar a integridade e notificação do repositório Git para atualizar o status do Pull Request.
E o CD, é acionado via Webhook quando há alterações nas branches correspondentes aos ambientes (develop, master).
Depois é construído o pacote atualizando automaticamente a versão, e depois as Bibliotecas são enviadas para o Nexus com a versão correspondente.
E das aplicações as imagens docker são geradas e implantadas no ambiente destino, conforme o mapeamento das branches / ambientes.
Mas antes da implantação em produção, a premissa é que já esteja implantado e validado em homologação antes da promoção da imagem docker
Operacionalização do Projeto CI/CD da Accurate
A operacionalização da implantação do CI/CD começou as ações no repositório Git, iniciando pela criação das branches para todos os projetos: develop, homolog, master.
Seguido pelo Mapeamento dos webhooks para realizar o disparo dos Jobs no Jenkins, sendo:
- Create/Update Pull Request → Dispara o Job de CI
- On Change Branch (develop, homolog, master) → Dispara o Job de CD
A configuração do Jenkins se desenrola primeiro pela Instalação dos plugins necessários para integração (Sonarqube, Groovy, etc).
E segundo, através da criação de imagens Docker e configuração como agentes dentro do Jenkins.
Depois é realizada a criação de Jenkins files (pipelines) templates para CI / CD por linguagem/tecnologia, onde, cada tecnologia possui um ferramental e scripts diferentes.
Fluxos de Trabalho
Foi criado tanto para CI, quanto para CD um fluxo do Job para ser acompanhado.
O Fluxo do Job de CI se desenvolve em 7 passos:
- Realiza o checkout da branch origem e destino do Pull Request;
- Verifica se o merge não possui conflitos que necessite de resolução manual;
- Executa os testes unitários;
- Constrói o pacote para verificar a integridade e se o código é compilável;
- Aciona a validação de qualidade do código via integração com Sonar;
- Incrementa e faz o commit da versão do projeto na branch origem;
- Notifica o Pull Request repositório Git com sucesso ou falha através de Webhook, ou chamada da API Rest (Repositório Git).
Já Fluxo do Job de CD segue o seguinte caminho: primeiro se realiza o checkout da branch notificada.
Segundo, se constrói o artefato utilizando a ferramenta de build específica do projeto que está sendo trabalhado.
Terceiro vêm os projetos de bibliotecas que são enviadas para o Nexus para armazenamento do artefato, e depois disso o fluxo é finalizado.
Em quarto, nos Projetos de aplicações que se encontram em ambiente de desenvolvimento, realizam-se as seguintes ações:
Passo 1 – Criação da imagem Docker para o artefato gerado, aplicando a versão do artefato à imagem Docker.
Passo 2 – Envio da imagem para o Docker Registry.
Passo 3 – Implantação através do rollout da imagem via Kubernetes.
Os Projetos de aplicações que, por sua vez, estejam em ambiente de homologação / produção, seguem os passos 1 e 2 acima e depois os seguintes:
- Implantação através do rollout da imagem via Kubernetes no ambiente de homologação;
- Job faz uma pausa com limite de 2 horas para aguardar aprovação do rollout para produção;
- Caso seja aprovado, a imagem que está em homologação é promovida para produção;
- Caso contrário, faz o rollback da imagem em homologação.
Nem tudo são flores: problemas e situações enfrentadas
Algumas integrações entre Repositório Git e Jenkins não possuem plugins que atendam a necessidade, nestes casos, é necessário implementar as mesmas.
É preciso também acompanhar os fluxos e atender os times para garantir que não sejam impactados por problemas nos fluxos.
Monitorar a saúde do Ferramental, assim como suas integrações (Webhooks, plugins, etc) se faz necessário também.
Cada necessidade de incremento/melhoria no fluxo de CI e CD deve ser comunicado para o pessoal responsável.
Por conta da utilização de muito espaço em disco para os artefatos gerados, foi necessária a restrição do número de builds realizados
Resultados e Benefícios Atingidos pela Accurate
Com a implementação do projeto foi possível chegar a automatização dos testes e validação de código.
O processo de Implantação dos projetos nos ambientes, passou a acontecer de forma contínua, garantindo agilidade no desenvolvimento.
A definição de templates dos Jobs, trouxe facilidade no setup inicial dos projetos, que por sua vez passou a ter média de 5h em todos os ambientes.
E por fim foi conseguida a promoção e Rollback das imagens tanto em homologação quanto em produção.
Tudo isso proporcionou o aumento da eficiência dos times de desenvolvimento e devops/site reliability.
Garantia de qualidade de todas as entregas, setup inicial de novos projetos muito rápido e padronização de todo o ferramental e tecnologias utilizadas.
Agilidade nos Projetos é na Accurate
Pelo apresentado no material já é possível entender que a Accurate está sempre preocupada com a agilidade de entrega dos seus projetos.
Isso tudo garantindo eficiência e bons resultados com produtos e serviços de alta qualidade.
Entre em contato agora mesmo com um de nossos especialistas e descubra como a Accurate pode acelerar e transformar seu negócio com soluções tech invadoras e escaláveis, utilizando squads ágeis com diferentes formas de contratação, conforme a sua necessidade.
Não deixe conhecer a Accurate e os serviços oferecidos e também continuar acompanhando as atualizações do Blog.
Compartilhe esse material e siga-nos nas Redes Sociais: Facebook, Instagram, Twitter, Linkedin e YouTube.
Autor
- Desenvolvedor de software com experiência em aplicações distribuídas de grande escala, com foco em melhoria, inovação e solução de problemas. Participação nas decisões arquiteturais/tecnológicas com a finalidade de atingir os objetivos de negócio da empresa. Comprometido com prazos e entrega de resultados ao invés de justificativas. Entusiasta de metodologias ágeis, Scrum, TDD, BDD, SOLID, Design Patterns, arquitetura limpa e mercado financeiro