Dimensionamento e otimização de CI/CD

A implementação de um fluxo de trabalho de CI/CD para desenvolvimento de aplicativos está se tornando cada vez mais popular. Ao mesmo tempo, no entanto, dimensionar e otimizar CI/CD representa um desafio.

Hoje vamos discutir qual é esse desafio e explorar exatamente como podemos dimensionar e otimizar o CI/CD. Então, acompanhe!

Atualmente, o desenvolvimento de aplicativos geralmente é feito em equipes compostas por vários desenvolvedores. Cada pessoa ou equipe tem seu papel no projeto avançando em sua parte dedicada.

Então nos encontramos no final do projeto com vários pedaços de código para compilar. Dependendo dos métodos de trabalho de todos, muito tempo pode ser desperdiçado gerenciando essa integração.

CI/CD, Integração Contínua e Entrega/Implantação Contínua são uma solução para esse problema e garantem que as atualizações sejam lançadas sem atrasos e conflitos desnecessários. Vamos entender esse processo.

Integração contínua

CI ou Integração Contínua agrupa processos destinados a publicar continuamente alterações e adições de código a uma ramificação compartilhada do projeto. Ele permite que o código seja testado e melhorias e alterações sejam feitas em tempo real. O objetivo é testar cada elemento através da criação de testes.

Essa medida permanente permite não verificar tudo em um bloco no final e evitar trabalhar em muitos elementos simultaneamente. A realização de testes unitários é, portanto, muito útil para garantir isso. Assim, é mais fácil detectar erros garantindo que o código compile bem e não crie regressões.

Entrega Contínua

A entrega contínua ou CD reúne integração e testes contínuos que podem ser agrupados em contêineres e colocados em produção. Ou seja, ele reúne esses códigos e testes realizados e os coloca em produção via automação.

Mesmo que exija ação humana, torna-se automatizado ao colocar tudo o que foi feito “no ar” de forma integrada e completa. Concretamente, com a distribuição contínua, nosso aplicativo é desenvolvido para que possa ser colocado em produção, não importa quando.

Implantação Contínua

Embora os conceitos de entrega contínua e implantação contínua sejam semelhantes, existem diferenças. Se o objetivo for o mesmo, ou seja, a implantação do aplicativo em produção, os meios para alcançá-lo diferem. O que separa a entrega contínua da implantação contínua é o lançamento.

  A Apple rastreia todos os aplicativos Mac que você executa? OCSP explicado

De fato, a implantação contínua permite implantar diretamente cada modificação que atravessa as diferentes etapas do nosso pipeline. Enquanto na entrega contínua, uma etapa de validação humana é necessária para que a implantação ocorra.

Escalonamento CI/CD

Quando o número de microsserviços aumenta, torna-se quase inevitável dimensionar seu CI/CD. O aumento do número de microsserviços resulta em diferentes pipelines conectados a um único repositório git, o que aumenta a carga do servidor CI e reduz o desempenho.

Para dimensionar CI/CD, é necessário criar um pipeline de desenvolvimento padronizado e automatizado para todas as equipes e, a partir daí, garantir a qualidade das entregas individuais do desenvolvedor e das entregas da equipe. Também facilita o gerenciamento do pipeline.

O dimensionamento pode ser realizado definindo um processo de CI para executar testes de unidade e validar a qualidade do código entregue.

Seguido por um processo de CD para construir as imagens e implantá-las nos ambientes de forma contínua e, finalmente, definir um processo para construir as imagens e implantá-las no ambiente de produção.

Etapas para dimensionar CI/CD

O primeiro passo é alinhar o pipeline com os arquitetos, envolvendo os líderes de equipe. Segue o mapeamento dos branches do Git para os ambientes (develop -> development e master -> [homologation and production]). Em seguida, vem o acionamento do CI Job a cada Pull Request e do CD Job a cada mudança nas ramificações mapeadas.

Um fluxo de tarefas pode ser criado para que CI e CD sejam seguidos.

O fluxo de trabalho do CI se desenvolve em 7 etapas:

  • Confira o branch de origem e destino do Pull Request;
  • Verifica se a mesclagem não possui conflitos que necessitem de resolução manual;
  • Executar testes de unidade;
  • Construa o pacote para verificar a integridade e se o código é compilável;
  • Validação de qualidade de código de gatilho;
  • Incremente e confirme a versão do projeto na ramificação de origem;
  • Notifique o repositório Git de solicitação de pull de sucesso ou falha por meio de chamada de API Webhook ou Rest (repositório Git).

O fluxo de trabalho do CD segue o seguinte caminho:

  • A ramificação notificada é verificada.
  • O artefato é construído usando a ferramenta de construção específica do projeto que está sendo trabalhado.
  • Após a chegada do artefato, os projetos da biblioteca são enviados ao Nexus para armazenamento do artefato e o fluxo é finalizado.
  Como dividir diagonalmente uma célula no MS Word

As seguintes ações são realizadas:

Etapa 1: uma imagem do Docker é criada para o artefato gerado, aplicando a versão do artefato à imagem do Docker.

Etapa 2: a imagem é carregada no registro do Docker.

Etapa 3: implantação por meio de distribuição de imagem via Kubernetes.

Para Projetos de aplicativo que estão em um ambiente de aprovação/produção, siga as etapas 1 e 2 acima e, em seguida, o seguinte:

  • Implante por meio de rollout de imagem via Kubernetes no ambiente de aprovação;
  • O trabalho faz uma pausa para aguardar a aprovação do lançamento para produção;
  • Se aprovada, a imagem que está sendo aprovada é promovida para produção;
  • Caso contrário, ele reverte a imagem em aprovação.

Otimização de CI/CD

CI/CD melhora o ciclo de desenvolvimento de aplicativos e resolve o problema causado pela integração de novo código e aumento da frequência de entrega.

Veja a seguir como você pode otimizar ainda mais o uso de CI/CD:

Priorize a correção de uma compilação corrompida

Quando uma compilação falha, consertá-la deve ser a prioridade da equipe. Se a compilação não puder ser corrigida em minutos, a equipe deve decidir se remove o código ou desabilita o sinalizador de recurso.

A ideia por trás da correção de uma compilação quebrada é que a compilação sempre produzirá código de trabalho que pode ser liberado.

Pequenas implantações frequentes

Geralmente, a estabilidade do aplicativo está em risco sempre que ocorre uma implantação. Portanto, tendemos a distanciar as implantações umas das outras. O problema dessa abordagem é que acumulamos muitas mudanças. Uma dessas mudanças poderia dar errado, forçando-nos a reverter as outras que estavam funcionando.

Aplique o padrão estrangulador e divida as mudanças complicadas em pequenas e simples. Se você implantar com mais frequência e trabalhar em pequenos lotes, o risco de implantação será menor.

Automatize testes de controle de qualidade para mitigação de riscos

Todos nós provavelmente já estivemos envolvidos no cenário “trabalhado na minha máquina local” porque os ambientes de desenvolvimento local geralmente diferem. Pode haver muitas coisas diferentes entre seu ambiente local e onde você entra em produção. Você pode otimizar CI/CD automatizando tarefas de Garantia de Qualidade (QA), como teste de navegador, mitigando o risco de um bug atingir o aplicativo ativo.

Confiar em testes automatizados

Para validar quando um desenvolvedor integra um novo código, a CI conta com um conjunto de testes automatizado e confiável. Se você precisa compilar código, o primeiro teste é que ele compila. Em seguida, você pode adicionar quantos testes julgar críticos.

  9 Melhores Sistemas de Gerenciamento de Aprendizagem (LMS) para SMB

Quantos testes devem ser incluídos? Para determinar isso, lembre-se de que o objetivo da CI é fornecer feedback o mais rápido possível. Se um desenvolvedor tiver que esperar uma hora para obter feedback, não funcionará. Você sempre sentirá falta de coisas, mas quando detectar um bug na produção, crie um caso de teste e inclua-o no loop de CI.

Considere sempre a segurança

Considere a segurança de uma ferramenta de CI/CD à medida que ela se integra a configurações ou ambientes existentes. CI/CD requer que todas as ferramentas de teste de segurança sejam chamadas programaticamente e seus resultados agregados em um só lugar. Procure ferramentas que tenham APIs para auditorias de criptografia automatizadas.

Benefícios de dimensionar e otimizar CI/CD

Além de aumentar a eficiência das equipes de desenvolvimento, dimensionar e otimizar o CI/CD também traz outros benefícios, alguns dos quais são:

Redução de despesas gerais

As horas de desenvolvimento geralmente são faturáveis, mas e o tempo gasto na implantação manual de código ou arquivos? Automatizar grandes partes do seu fluxo economizará tempo para trabalho faturável, algo que todos podem apreciar. O teste automatizado também permite que você falhe mais cedo, em vez de encontrar erros no controle de qualidade ou na produção, ou pior, o cliente os encontra. Mais bugs corrigidos na mesma quantidade de tempo é uma vitória clara.

Entrega com menos bugs e menos risco

Você detecta bugs muito mais cedo no processo de desenvolvimento, liberando pequenas alterações com mais frequência. Ao implementar testes automatizados em todos os estágios de desenvolvimento, você não corre o risco de mover o código com falha para o próximo estágio e é mais fácil reverter pequenas alterações quando necessário.

Responda às condições do mercado mais rapidamente

As condições de mercado mudam constantemente. Suponha que você descubra que um novo produto está perdendo receita ou que mais clientes acessam seu site a partir de smartphones do que de laptops. Nesse caso, é muito mais fácil fazer uma mudança rápida se você tiver uma entrega contínua otimizada.

Confiança

Se você tiver otimizado CI/CD, o que significa que você tem um conjunto de testes robusto, sua confiança em não enviar um bug aumenta muito. Se você for transparente com seu processo e educar o restante de sua equipe e clientes, a confiança deles em você como equipe de desenvolvimento também aumentará.

Palavras finais

CI/CD torna suas integrações e entregas mais rápidas. No entanto, é importante dimensioná-lo e otimizá-lo para evitar que o processo se torne contraproducente devido ao aumento da complexidade.

Você também pode ver algumas das melhores ferramentas de CI.