Integre cedo, integre frequentemente. Construa uma base de código compartilhada com confiança.
A Integração Contínua é amplamente mal compreendida. Não é apenas um servidor de build. Não é apenas executar testes em cada commit. Essas são ferramentas que apoiam a CI—mas a CI em si é uma prática.
CI de verdade significa:
A parte "contínua" é fundamental. Se você está integrando semanalmente, isso não é contínuo. Se você tem branches de funcionalidade de longa duração, isso não é contínuo. CI significa integrar seu trabalho com o trabalho de todos os outros todos os dias, geralmente várias vezes ao dia.
CI É uma Prática Social
CI é sobre como a equipe trabalha em conjunto, não apenas sobre ferramentas. Um servidor Jenkins que executa testes em branches de um mês atrás não é CI.
A CI verdadeira requer desenvolvimento baseado em trunk: todos fazem commit na branch principal (frequentemente chamada de "trunk" ou "main").
Isso parece assustador. As pessoas não vão quebrar as coisas? É aí que entra a disciplina:
Branches de longa duração são o inimigo da CI. Quando você desenvolve em uma branch por semanas, você não está integrando. Você está apenas adiando a integração—e quanto mais você espera, mais difícil fica.
Branch por horas, não dias. Integre diariamente, não semanalmente.
Um desenvolvedor cria uma branch, trabalha por 2-3 horas, executa todos os testes localmente e então mescla na main. Isso acontece 3-4 vezes por dia por desenvolvedor. A integração é entediante porque conflitos são raros e pequenos.
Desenvolvedores criam branches de funcionalidade que vivem por 2-3 semanas. Eles mesclam na main quando a funcionalidade está 'pronta'. Conflitos de mesclagem são dolorosos. Bugs de integração são comuns. O 'servidor de CI' apenas testa a branch main obsoleta.
Para que a CI funcione, o ciclo de build e testes deve ser rápido. Martin Fowler sugere a regra dos 10 minutos: o build inteiro, incluindo todos os testes, deve ser concluído em menos de 10 minutos.
Por que 10 minutos? Porque:
Se seu build demora muito:
Algumas equipes executam um subconjunto rápido localmente (testes unitários) e a suíte completa no servidor de CI. Isso é aceitável desde que a suíte completa execute rápido o suficiente para fornecer feedback oportuno.
O build vai quebrar. O que importa é o que acontece em seguida.
A regra: Quando o build quebra, corrigi-lo se torna a prioridade máxima. Todo o resto para.
Isso pode parecer extremo, mas considere: um build quebrado significa que a equipe não pode confiar na branch principal. O trabalho de todos está bloqueado porque eles não podem integrar com segurança. Cada minuto que o build está quebrado é um minuto de risco acumulado.
Quem corrige? Geralmente a pessoa que quebrou. Mas se ela estiver travada, outros ajudam. Um build quebrado é um problema da equipe, não um problema individual.
Como prevenir quebras:
Algumas equipes usam uma rotação de "xerife de CI"—alguém responsável por observar o build e coordenar correções. Isso previne o efeito espectador onde todos assumem que outra pessoa vai corrigir.
Builds Quebrados São Emergências
Um build quebrado que permanece quebrado por horas é uma falha da equipe. Trate-o com a mesma urgência de um incidente de produção.
CI é a base para práticas mais avançadas:
Entrega Contínua (CD): Cada commit pode ser implantado em produção. A implantação é uma decisão de negócio, não técnica.
Implantação Contínua: Cada commit que passa nos testes é automaticamente implantado em produção. Nenhuma aprovação humana necessária.
Nem toda equipe precisa de implantação contínua. Mas toda equipe se beneficia da CI. Comece por aí.
Métricas de CI para observar:
CI não é apenas sobre capturar bugs. É sobre criar um ritmo onde a integração é entediante, rotineira e segura. Quando a integração é segura, tudo o mais fica mais fácil.