CI/CD: Não Cometa Esses Erros!
CI/CD são dois pilares do DevOps que ajudam na redução de erros e no ganho de velocidade durante um projeto de software. O processo de integração contínua deve ser simples e facilmente replicável. Como os desenvolvedores realizam a integração com mais frequência durante o processo do que no fim do ciclo de desenvolvimento, podem detectar erros de integração mais cedo, melhorando a qualidade do software.
O CD automatiza o processo de entrega do software para garantir implantações recorrentes durante a produção. Cada etapa da entrega é automatizada e garante que novos recursos e alterações no software possam ser lançados com segurança, rapidez e confiabilidade. Empresas como Netflix e Facebook implementaram CI e CD para obter mais de 10 lançamentos por semana.
Mas, para toda empresa que obtém sucesso com CI e CD, há outras que enfrentam dificuldades. E, na maioria das vezes, isso se deve a alguns erros evitáveis. Confira quais são.
O que é integração contínua (CI)?
A Integração Contínua (CI) é uma prática de desenvolvimento em que os desenvolvedores precisam integrar o código em um repositório compartilhado diariamente. Cada check-in é verificado por uma compilação automatizada, permitindo que as equipes detectem problemas em tempo real. Ao integrar regularmente, é possível detectar erros e localizá-los com mais facilidade.
Com o CI, um desenvolvedor pratica a integração contínua do código com o restante da equipe. A integração acontece após um “git push”, geralmente para uma ramificação principal. Em um servidor dedicado, um processo automatizado cria o aplicativo e executa um conjunto de testes para confirmar que o código mais recente se integra ao que está atualmente na ramificação principal.
Se você estiver executando o CI e, por algum motivo, a integração falhar, isso significa que a compilação quebrada se tornará a prioridade a ser corrigida antes de continuar a adição de mais recursos.
O que é entrega contínua (CD)?
A entrega contínua permite ao profissional fazer alterações — incluindo adição de novos recursos, mudanças de configuração, identificação de bugs entre outras — na produção ou com o produto já nas mãos dos usuários, com segurança e rapidez, de maneira sustentável.
Conseguimos tudo isso garantindo que nosso código esteja sempre em um estado implementável, mesmo diante de equipes de milhares de desenvolvedores fazendo alterações diariamente.
Isso parece bom demais para ser verdade, não é mesmo? De fato, você está entregando alterações de todos os tipos em um ambiente ativo o tempo todo; você pode enviar alterações de configuração, alterações de infraestrutura — tudo!
Geralmente, o CI é conhecido por ser uma prática do desenvolvedor e o CD, uma prática do operador. A missão da CI é fornecer uma funcionalidade, a qualquer momento, que atenda às expectativas do cliente — em outras palavras, que tenha qualidade incorporada.
Quais são os principais erros das empresas que usam CI/CD?
Agora que já entendemos melhor a base dos conceitos CI/CD, vamos saber quais são os principais erros que as empresas que usam CI/CD cometem e como eles afetam o desenvolvimento, a implantação e a evolução dos softwares. Confira!
Utilizar um design rígido
Você deve manter seus pipelines CI/CD flexíveis ou deve criar um design rígido? Flexibilidade é a marca registrada do DevOps. Quando se trata de CI/CD, é o pipeline que ajuda a liderar a mudança dos ciclos de testes automatizados, passando pelo ambiente de preparação para a produção.
Obviamente, quanto mais abrangente for o pipeline de testes, maiores serão suas chances de não ter que lidar com erros no ambiente de produção. Manter os fluxos ágeis e confiáveis torna-se primordial para preservar a velocidade do projeto.
Um design rígido aqui impede a capacidade da equipe de desenvolvimento de otimizar processos. Afinal, é bastante comum fazer as coisas em paralelo e não em série. Os pipelines do DevOps precisam ser mais estruturados, mas não rígidos. Eles devem ser fortes e definidos, mas flexíveis para incorporar mudanças repentinas.
Não proteger o ambiente de CI/CD
Seu sistema de CI/CD tem acesso completo à sua base de código e credenciais para implantar em vários ambientes. Isso é algo extremamente importante do ponto de vista de segurança operacional. Aqueles que olham para DevOps e CI/CD sabem que esse sistema traz um alto valor, afinal, o principal objetivo do CI e do CD é produzir software confiável.
Então, como a segurança pode ser uma fator muitas vezes negligenciado? Alguns dos erros comuns que inviabilizam qualquer iniciativa ágil de integração contínua (e devem ser evitados a todo custo) são:
- não rastrear logons no sistema CI/CD;
- não empregar ferramentas de análise estática;
- não digitalizar código de terceiros por segurança;
- não fazer uma varredura do código em busca de vulnerabilidades depois que ele é implantado no ambiente de desenvolvimento;
- ter regras de rede internas brandas.
A segurança deve ser prioridade em todas as etapas do processo de CI/CD. E, embora possa parecer que o projeto está atrasando, lembre-se de que a segurança não deve ser comprometida por causa de pressa.
Não fazer testes manuais
A automação de teste desempenha um grande papel no CI e no CD. No entanto, automação extensiva significa zero teste manual? Precisamos de ferramentas específicas de teste de integração contínua?
Você não pode ter um pipeline de CI/CD de alto nível, eliminando completamente os testes manuais. Haverá alguns aspectos dos testes que ‘‘precisarão’’ de intervenção e análise humana. Sem o teste manual, você pode se aproximar do desenvolvimento de um bom pipeline de CI/CD, mas esse pipeline nunca será construído para atingir o topo.
Portanto, em vez de eliminar, pense em integrar os esforços de teste manual ao pipeline. Somente após a conclusão do teste manual de certos casos de teste, você deve entrar na fase de implantação.
Não fazer testes localmente
O teste é um tema recorrente no ambiente de CI/CD. Os desenvolvedores precisam ter cuidado não apenas com o que testam, mas também com o local onde testam.
Se sua equipe confirmar o código no repositório compartilhado antes de testá-lo localmente, você poderá criar bloqueios para outros membros da equipe. Também é improvável que o ambiente local do desenvolvedor execute todo o conjunto de testes em um ambiente semelhante à produção. Então o que você pode fazer?
- testar localmente, usando um conjunto de testes que pode ser executado em qualquer ambiente;
- usar os mesmos comandos, como os desenvolvedores usam em sua máquina local, no sistema CI/CD para testar o código mesclado ao repositório;
- empregar um shell script ou makefile para automatizar a execução das ferramentas de teste de maneira repetível e previsível;
- containerizar ambientes de teste para aumentar a portabilidade de sua infraestrutura de teste.
Como vimos neste post, utilizar CI/CD é importante para criar uma experiência de trabalho favorável à equipe, mas é necessário estudar melhor sobre eles, revendo os erros e armadilhas desse método. Dessa forma, sua empresa estará pronta para atender à demanda cada vez maior por software de qualidade que a transformação digital impõe ao mercado.
Sua empresa utiliza o método DevOps nos projetos de software? Diga para a gente nos comentários quais são as maiores dificuldade que vocês encontraram nesse modelo e os benefícios de sua utilização.