Ci cd

Escopo: transversal. Aplica-se a qualquer linguagem ou stack do projeto.

CI/CD (Continuous Integration, Continuous Delivery e Continuous Deployment, Integração Contínua, Entrega Contínua e Deploy Contínuo) é o processo que garante que qualquer mudança no código passe por verificação automática antes de chegar ao usuário.

CI (Continuous Integration, Integração Contínua) e CD (Continuous Delivery, Entrega Contínua) são processos distintos com objetivos diferentes. A estratégia de branches que viabiliza esse fluxo está em git.md.

ProcessoO que fazResultado
CI (Integração Contínua)Valida qualidade a cada push (envio de código): lint, testes, buildArtefato verificado
CD (Entrega Contínua)Promove o artefato pelos ambientes até produção com aprovação manual no último estágioArtefato pronto para produção
CD (Deploy Contínuo)Promove o artefato até produção automaticamente, sem aprovação manualCódigo em produção

Conceitos fundamentais

ConceitoO que é
Pipeline (sequência de etapas de verificação)Conjunto ordenado de estágios que todo código deve passar; cada estágio é um portão
Lint (análise estática de estilo)Verificação estática de estilo e formatação do código
Smoke test (teste de fumaça)Teste rápido do fluxo crítico após deploy para confirmar que o sistema responde
Fix forward (corrigir para frente)Estratégia de corrigir bugs com um novo commit e deploy, sem reverter o histórico
Rollback (reversão)Retorno do artefato em produção à versão anterior; reservado para emergências
Pre-commit hook (gancho de pré-commit)Automação executada localmente antes de cada commit, com custo máximo de 5 segundos

Pipeline

O pipeline (sequência de etapas de verificação) é a sequência de verificações que todo código precisa passar. Cada estágio é um portão: falhou, parou.

LintSegurançaTestesBuildDeploy StagingSmokeDeploy Prod
EstágioO que verificaCritério de falha
LintEstilo e formataçãoQualquer violação
SegurançaSecrets expostos, vulnerabilidades conhecidasQualquer secret; CVE explorado
TestesComportamento esperado do sistemaQualquer falha
BuildCompilação e empacotamento do artefatoQualquer erro de build
Deploy StagingPromoção para ambiente espelhoFalha no health check
SmokeFluxo crítico funciona em stagingQualquer falha no caminho crítico
Deploy ProdPromoção para produçãoAprovação manual ou canary gate

O artefato que vai para produção é o mesmo que passou por staging. Fazer rebuild entre ambientes invalida a garantia dos testes: o que foi verificado precisa ser o que é entregue.

Ambientes

O mesmo artefato é promovido de ambiente em ambiente, sem rebuilds, sem branches por ambiente. Cada etapa adiciona confiança antes da promoção seguinte.

dev-pipeline-linear-flow
AmbienteResponsabilidade
devPrimeira validação após merge: comportamento básico, sem regressão
qaValidação funcional completa: cenários reais, integrações e edge cases
stagingAmbiente espelho de prod: última barreira antes da entrega real
prodEntrega final: observabilidade ativa nos primeiros minutos após deploy

Pós-deploy

deploy prod → logs e métricas → smoke test → validar feature flag → estabilização

O deploy não encerra o ciclo. Após cada promoção para prod:

  • Monitorar logs e métricas por tempo determinado (ex: 15–30 min)
  • Confirmar que a feature flag está desativada se a feature ainda não é pública
  • Validar o comportamento esperado com um smoke test manual ou automatizado
  • Só encerrar o acompanhamento após estabilização

Deploy e Release

Deploy e release são eventos independentes.

merge na main → deploy (automático) → feature flag desativada → release gradual → 100%

Deploy é o ato técnico de colocar o código em produção. Acontece automaticamente após merge na main com pipeline verde.

Release é o ato de tornar a funcionalidade visível ao usuário. Controlado por feature flag, acontece quando o time decide, de forma gradual.

Essa separação reduz o risco de cada entrega. O código pode subir para produção desativado, ser validado com tráfego real em percentual controlado e só então ser ativado para todos.

Feature Flags

Feature flags (interruptores de funcionalidade) separam o ciclo de vida do código do ciclo de vida da feature.

SituaçãoAção
Feature em desenvolvimentoSobe desativada, código na main sem risco
Feature pronta, aguardando validaçãoAtiva para % do tráfego ou grupo interno
Feature com problemaDesativa sem rollback de código
Feature validadaAtiva para 100%, flag removida

Flags têm prazo de validade. Uma flag que nunca é removida vira débito técnico: condicionais permanentes que crescem com o código.

Pre-commit

CI detecta problemas tarde: após o push, na esteira. Pre-commit hooks (ganchos de automação) detectam imediatamente, antes do commit.

código staged → lint → auto-fix → commit

O custo deve ser baixo: menos de 5 segundos para não criar atrito no fluxo de trabalho.

Fix Forward e Rollback

Fix forward (corrigir para frente) é a abordagem preferida. A main segue para frente com histórico linear.

bug em prod → PR na main → pipeline → merge → deploy
EtapaAção
IdentificarConfirmar o comportamento inesperado via logs e métricas
IsolarDesativar a feature flag se o bug estiver coberto por uma
CorrigirAbrir PR na main com a correção
ValidarPipeline verde: lint, testes, build
EntregarMerge e deploy seguindo o fluxo normal
ConfirmarMonitorar logs após deploy para garantir estabilização

⚠️ Rollback é reservado para emergências: sistema indisponível e fix forward inviável no tempo necessário. Reverte o estado da main e cria inconsistência com o histórico.

EtapaAção
AvaliarSistema indisponível e correção inviável no tempo necessário
ReverterRollback do artefato no ambiente de prod
ComunicarNotificar stakeholders (partes interessadas) sobre o incidente e a reversão
InvestigarIdentificar a causa raiz sem pressão de produção
CorrigirRetomar pelo fluxo de fix forward após estabilização

Desenvolvido por @thiagocajadev · Fork baseado no repositório pmndrs/docs · Poimandres.