Capítulo 16 — Delivery seguro: CI, staging, release e permissões
Verificado localmente não significa pronto para produção
Section titled “Verificado localmente não significa pronto para produção”Uma mudança pode:
- compilar;
- passar nos testes;
- receber aprovação;
- ser mergeada;
e ainda falhar na entrega.
Delivery introduz novos riscos:
- artifact diferente do testado;
- dependency drift;
- environment drift;
- migration incorreta;
- secret ausente;
- permissão excessiva;
- rollout amplo demais;
- rollback inexistente.
Por isso, o gate deste capítulo é:
produção deve receber a mesma revisão/artefato verificado, sob uma promotion policy explícita e com evidência de recuperação.
Build, package e deploy são estágios diferentes
Section titled “Build, package e deploy são estágios diferentes”Tantithamthavorn separa build, package e deploy e observa que misturar essas etapas compromete reproducibility, traceability, isolation e reversibility. 1
No método deste livro:
source revision ↓build ↓package/artifact ↓verification ↓promotion ↓deployment ↓releaseCada seta deve preservar identidade.
Build once, promote many
Section titled “Build once, promote many”método deste livro:
Sempre que possível, construa uma vez e promova o mesmo artefato entre ambientes.
Evite:
build em CIbuild diferente em stagingrebuild manual em produçãoPorque cada rebuild cria uma nova hipótese.
Melhor:
commit SHA → artifact digest → staging → productionArtifact identity
Section titled “Artifact identity”O release precisa apontar para:
- source revision;
- build run;
- artifact digest;
- dependency snapshot;
- release id.
Sem isso, não sabemos se o que foi aprovado é o que está rodando.
Reproducible build
Section titled “Reproducible build”Reproducibility significa reduzir variações invisíveis.
Práticas:
- lockfiles;
- pinned versions;
- container digests;
- deterministic build inputs quando possível;
- toolchain versionada;
- immutable artifacts.
O objetivo não é perfeição matemática em todos os projetos.
É tornar a reconstrução e auditoria suficientemente confiáveis.
CI como promotion gate
Section titled “CI como promotion gate”CI não é apenas automação de testes.
É uma boundary onde podemos verificar:
- revision correta;
- checks obrigatórios;
- build;
- artifact;
- signatures;
- policy;
- release metadata.
método deste livro:
A pipeline deve produzir evidência pointers, não apenas luz verde.
CI verde não autoriza qualquer ação
Section titled “CI verde não autoriza qualquer ação”O fato de checks passarem não significa que o agente deve ter permissão para promover produção.
A autorização é outra dimensão.
Devemos separar:
verification≠authorizationStaging
Section titled “Staging”Staging existe para aproximar a mudança de condições reais antes da produção.
Pode validar:
- deployment manifests;
- configuration;
- migrations;
- secrets injection;
- integrations;
- health checks;
- smoke tests.
Mas staging não replica perfeitamente produção.
Por isso, staging reduz incerteza; não elimina necessidade de observação após release.
Environment parity
Section titled “Environment parity”Parity não significa ambientes idênticos em escala.
Significa reduzir diferenças que alteram comportamento relevante.
Exemplos:
- mesma versão de runtime;
- mesmo schema;
- mesma forma de configurar;
- mesma imagem/artifact;
- mesmas policies essenciais.
Configuration as delivery input
Section titled “Configuration as delivery input”Configuração precisa ser tratada como input versionável/auditável quando possível.
Evite alterações manuais invisíveis em host.
Um sistema que depende de “alguém lembra de editar produção” não possui delivery reproduzível.
Secrets
Section titled “Secrets”Secret não deve viajar junto com código ou artifact quando puder ser injetado em runtime.
Delivery precisa verificar:
- secret existe;
- identidade correta tem acesso;
- valor não aparece em logs;
- artifact não o incorpora;
- rotação continua possível.
Migration
Section titled “Migration”Migration é uma das etapas com maior risco de irreversibilidade.
Checklist mínimo:
- schema compatibility;
- backup/recovery path;
- migration command;
- expected duration;
- locking impact;
- data transformation;
- rollback ou forward-fix strategy.
Expand / migrate / contract
Section titled “Expand / migrate / contract”método deste livro útil para mudanças de schema:
- expand — introduzir estrutura compatível;
- migrate — mover dados/comportamento;
- contract — remover estrutura antiga depois de validação.
Isso reduz necessidade de mudança atômica destrutiva.
Deployment não é release
Section titled “Deployment não é release”Tantithamthavorn distingue deployment de release e mostra como feature flags podem separar código presente de funcionalidade exposta. 2
Isso é uma ferramenta importante de redução de risco.
Podemos:
- deployar dark;
- validar health;
- ativar para pequeno grupo;
- observar;
- expandir.
Rollout strategy determina blast radius
Section titled “Rollout strategy determina blast radius”A estratégia de implantação altera quantos usuários/sistemas são expostos quando algo dá errado. 2
Opções comuns:
- rolling;
- blue-green;
- canary;
- feature flag;
- recreate.
A escolha deve seguir:
- risco;
- estado;
- custo;
- velocidade de rollback;
- capacidade de observação.
Canary
Section titled “Canary”Canary permite expor pequena parcela primeiro.
Um canary útil precisa declarar:
- porcentagem inicial;
- janela de observação;
- métricas;
- thresholds;
- rollback trigger;
- passos de expansão.
Sem critério, canary vira rollout lento sem decisão objetiva.
Blue-green
Section titled “Blue-green”Blue-green mantém duas versões/environments e troca tráfego.
Vantagem:
- rollback rápido de tráfego.
Risco:
- dados compartilhados e migrations podem limitar reversibilidade.
Feature flag
Section titled “Feature flag”Feature flag desacopla deploy de exposição.
Mas flag também precisa de governança:
- owner;
- default state;
- expiration/removal;
- audit;
- kill switch quando aplicável.
Least privilege
Section titled “Least privilege”Hassan recomenda limitar ferramentas, credenciais e permissões ao mínimo necessário, inclusive com time-boxing quando possível; isso reduz blast radius. 3
Em delivery, isso significa que um agente que:
- escreve código
não precisa automaticamente poder:
- ler todos os secrets;
- alterar DNS;
- migrar banco;
- deployar produção;
- deletar infraestrutura.
Approval boundary
Section titled “Approval boundary”método deste livro:
Ações de maior consequência atravessam boundaries de aprovação.
Exemplos:
- merge de baixo risco: automático com gates;
- deploy staging: automático;
- migration destrutiva: approval humano;
- produção crítica: approval + evidência;
- breakglass: approval especial + audit trail.
Breakglass
Section titled “Breakglass”Breakglass é acesso excepcional para incidentes ou situações críticas.
Ele não deve virar caminho normal.
Precisa de:
- identidade;
- razão;
- duração;
- escopo;
- logging;
- revisão posterior.
Release metadata
Section titled “Release metadata”Todo release deveria ser identificável.
Exemplo:
release_idcommit_shaartifact_digestbuild_rundeploy_timeenvironmentapprovermigration_versionIsso transforma produção em estado reconstruível.
RUNBOOK.md
Section titled “RUNBOOK.md”Artefato operacional deste capítulo.
Estrutura mínima:
# Runbook## Service## Build## Artifact## Deploy## Migration## Health Checks## Rollback## Secrets / Permissions## Escalation## Known Failure ModesRunbook deve ser executável como procedimento, não apenas descritivo.
Release Checklist
Section titled “Release Checklist”Revision
Section titled “Revision”- commit aprovado?
- branch correta?
Artifact
Section titled “Artifact”- build passou?
- digest registrado?
- artifact imutável?
Verification
Section titled “Verification”- CI obrigatório verde?
- security checks?
- migration test?
Environment
Section titled “Environment”- config correta?
- secrets presentes?
- dependencies prontas?
Rollout
Section titled “Rollout”- estratégia definida?
- canary/flag quando necessário?
- thresholds definidos?
Recovery
Section titled “Recovery”- rollback artifact disponível?
- restore path validado?
Authorization
Section titled “Authorization”- quem pode promover?
- approval necessário?
Anti-pattern: SSH + git pull + build em produção
Section titled “Anti-pattern: SSH + git pull + build em produção”Esse fluxo mistura:
- source checkout;
- dependency resolution;
- build;
- deploy.
A cada execução, production vira máquina de build única.
Isso enfraquece:
- reproducibility;
- provenance;
- rollback;
- auditabilidade.
Anti-pattern: latest
Section titled “Anti-pattern: latest”Tags flutuantes dificultam responder:
qual artifact exatamente está rodando?
Prefira identidade imutável para promotion.
Anti-pattern: secret no repo
Section titled “Anti-pattern: secret no repo”Secret versionado deixa de ser secret operacional.
Além da remoção, recovery pode exigir rotação e análise de exposição.
Anti-pattern: deploy com permissão permanente
Section titled “Anti-pattern: deploy com permissão permanente”Credencial de produção disponível o tempo inteiro aumenta janela de abuso ou erro.
Time-boxing e scoped credentials reduzem exposição. 3
Anti-pattern: rollout global instantâneo
Section titled “Anti-pattern: rollout global instantâneo”Para mudanças de alto risco, exposição total remove chance de aprender com pequeno blast radius.
Estratégias graduais existem justamente para controlar esse risco. 2
Anti-pattern: rollback escrito, nunca testado
Section titled “Anti-pattern: rollback escrito, nunca testado”Um comando em documento não é evidência de recuperação.
Rollback precisa ser exercitado quando o risco justificar.
Promotion record
Section titled “Promotion record”método deste livro:
Cada promotion deve poder registrar:
from_environmentto_environmentartifact_digestevidence_bundleapprovertimestampresultIsso cria uma cadeia entre revisão e runtime.
Delivery como state machine
Section titled “Delivery como state machine”método deste livro:
merge-ready ↓build-ready ↓staging-ready ↓release-ready ↓production-promotedCada transição exige identity, policy e evidência compatíveis com seu risco.
runtime-validated não pertence ao Delivery em si. Ele é o primeiro estado do próximo estágio, Operations. Essa separação evita confundir “foi promovido” com “está saudável em produção”.
O agente não decide sozinho o que é irreversível
Section titled “O agente não decide sozinho o que é irreversível”Quanto maior:
- blast radius;
- custo;
- acesso;
- irreversibilidade;
mais forte deve ser a approval boundary.
Isso é coerente com autonomia baseada em risco.
Do delivery à operação
Section titled “Do delivery à operação”Delivery termina quando um artifact identificado foi promovido sob policy explícita.
Isso ainda não prova comportamento real.
Produção pode revelar regressões, dependências, carga, custo e efeitos que CI ou staging não reproduzem integralmente. Por isso, o próximo estágio começa imediatamente após promotion:
Operations observa, compara e decide se o estado promovido pode ser aceito em runtime.
O próximo capítulo abre essa mudança de perspectiva: Produção também é desenvolvimento.
Fronteira de confiança
Section titled “Fronteira de confiança”Delivery cruza a boundary entre código verificado e ação sobre ambientes. Artifact identity, credentials, approval e deployment metadata precisam estar vinculados à revisão correta. CI verde não implica automaticamente autorização de produção.
Evidência exigida
Section titled “Evidência exigida”Production promotion deve demonstrar revision/artifact identity, checks obrigatórios, release metadata, autorização e evidência de recuperação. O artefato promovido deve ser o mesmo artefato verificado sempre que possível.
Rollback e recuperação
Section titled “Rollback e recuperação”Rollback deve ser considerado antes da promoção. Staged rollout, previous artifact, feature flag, backup/restore e migration strategy formam a superfície de recovery. Mudanças de dados podem exigir compensação ou forward-fix, não apenas revert de código.
Proveniência das fontes
Section titled “Proveniência das fontes”Rastreabilidade deste capítulo:
- CLM-056 — Tantithamthavorn, separação build/package/deploy e importância de reproducibility/traceability/reversibility;
- CLM-057 — Tantithamthavorn, deployment strategy como controle de blast radius e separação deploy/release;
- CLM-058 — Hassan, least privilege e ferramenta/deployment access boundaries.
Build once/promote many, Promotion Record, delivery state machine, Release Checklist e formato de RUNBOOK.md são método deste livro.
Os comparáveis de Liao e Jayaratchagan permanecem fonte limitada e não foram usados como autoridade factual.
Fontes de acesso limitado não foram usadas como autoridade factual neste capítulo.
Recursos complementares
Section titled “Recursos complementares”Recursos relacionados:
- Release Checklist;
- RUNBOOK.md template;
- Promotion Record template;
- migration checklist;
- canary template;
- permission matrix;
- rollback drill checklist;
- futura visualização PCC de artifact → staging → production → runtime validation.
Living Book Expanded · capítulo executável
Delivery seguro: CI, staging, release e permissões: abrir Delivery Lab. A camada expandida preserva o texto estável e mantém repo/arquivo/commit e What changed? separados do manuscrito canônico.
Footnotes
Section titled “Footnotes”-
Kla Tantithamthavorn, Agentic Software Engineering (2026), Chapter 11: Key Takeaways, p. 190. Rastreabilidade interna: CLM-056. ↩
-
Kla Tantithamthavorn, Agentic Software Engineering (2026), Chapter 11: Deployment Strategies and Risk, pp. 186–187. Rastreabilidade interna: CLM-057. ↩ ↩2 ↩3
-
Ahmed E. Hassan, Agentic Software Engineering (2026), Practice 2: Enforce least privilege and tool access boundaries, p. 298. Rastreabilidade interna: CLM-058. ↩ ↩2