CI/CD, Entenda o que é, e como Estruturar os Processos com a Accurate Blog Accurate

Entenda o que é CI/CD

CI/CD, Entenda o que é, e como Estruturar esses Processos com a Accurate

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: 

  1. Implantação em homologação;
  2. 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:

  1. Create/Update Pull Request → Dispara o Job de CI
  2. 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:

  1. Realiza o checkout da branch origem e destino do Pull Request;
  2. Verifica se o merge não possui conflitos que necessite de resolução manual;
  3. Executa os testes unitários;
  4. Constrói o pacote para verificar a integridade e se o código é compilável;
  5. Aciona a validação de qualidade do código via integração com Sonar;
  6. Incrementa e faz o commit da versão do projeto na branch origem;
  7. 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.

squads ageis

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

Luiz Roberto Freitas
Luiz Roberto Freitas
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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *