
CI/CD não é produto. É o hábito de integrar, testar e soltar software em ciclo curto, com o máximo de passo automático. O “merge day” de 2019 continua sendo o anti-padrão. O que mudou é onde o YAML mora, quem roda o job e o que acontece depois do verde no pipeline.
CI, entrega e implantação — os três CDs
CI (integração contínua): cada push/MR vira build + teste automático no tronco compartilhado. O conflito aparece hoje, não na sexta da release.
Entrega contínua: o artefato aprovado (binário, imagem OCI, pacote) vai sozinho para um registro. Produção ainda tem um humano no botão — ou um critério (tag, aprovação, janela).
Implantação contínua: o mesmo artefato sobe sozinho para produção se o teste passou. Feedback do usuário em minutos. Exige teste que você realmente confia, não um job verde oco.
Não vale brigar pelo acrônimo. Vale desenhar o pipeline: o que é automático, o que é porta, o que é rollback.
commit → CI (lint, test, build)
→ artefato no registry (entrega)
→ staging
→ produção (implantação: botão ou automática)
→ observação (métrica, log, alerta)
O pipeline em 2026: YAML no Git
Jenkins com plugin ainda existe em legado. O ponto de partida no Linux hoje é um arquivo no repositório, runner em container, artefato em registry.
GitHub Actions — o default de quem já está no GitHub. Pin de action por SHA, não por tag flutuante: o CI virou vetor (compromisso de actions populares em 2025–2026).
# .github/workflows/ci.yml
name: ci
on:
pull_request:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: make test
GitLab CI — o que o post irmão de 2019 já apontava para Terraform. Um .gitlab-ci.yml, runners próprios se quiser soberania:
# .gitlab-ci.yml
stages: [test, image]
test:
stage: test
image: golang:1.24
script: [go test ./...]
image:
stage: image
image: docker:27
services: [docker:27-dind]
script:
- docker build -t registry.example.com/app:$CI_COMMIT_SHA .
- docker push registry.example.com/app:$CI_COMMIT_SHA
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Forgejo Actions / Gitea — o mesmo YAML do Actions, self-hosted, sem mandar o código para a nuvem alheia. Woodpecker é o outro binário leve. No homelab Linux isso compete com GitLab CE.
O curso de Docker continua sendo o pré-requisito: o job moderno é um container. Infra como código no mesmo espírito: Ansible e o pipeline de Terraform no GitLab.
CD virou GitOps
Implantar no Kubernetes em 2026 raramente é kubectl apply no job de CI. O CI constrói a imagem, assina, empurra o registry e atualiza o Git (tag, digest). O cluster puxa o estado desejado:
- Argo CD — app-of-apps, drift detection, sync a partir do Git. 3.5 (2026) adiciona mTLS interno e verificação de assinatura de commit.
- Flux — o outro padrão CNCF, controllers no cluster.
O Git passa a ser a fonte da verdade. O runner deixa de ter credencial de produção eterna: OIDC para a nuvem, short-lived token, admission no cluster checando Cosign/SLSA antes do pod subir. Quem ainda faz docker compose up num VPS (como no Vaultwarden) está no degrau da entrega contínua com SSH — válido, só não é GitOps.
O pipeline como alvo
Em 2019 o medo era merge quebrado. Em 2026 o medo é o job que passa e publica malware. Actions comprometidas, pacote npm sequestrado, secret no log.
- Pin de action/container por digest, não
@v3solto. - Secrets no cofre (GitHub/GitLab, Vault, SOPS) — nunca no YAML.
- SBOM + Cosign (Sigstore, OIDC keyless) na imagem.
- Provenance SLSA Build L2/L3 quando o builder é a plataforma, não um script no repo.
- PR de fork: não rode o workflow do branch do atacante com secret da org (
pull_request_targetmal usado).
Depois do deploy: o Prometheus diz se o verde mentiu.
Por onde começar de verdade
- Tronco compartilhado, PR pequeno, CI no PR (lint + teste). Sem isso o resto é teatro.
- Imagem OCI versionada por SHA, registry próprio ou GHCR/GitLab.
- Staging automático; produção com porta (tag ou aprovação) até o teste merecer implantação contínua.
- Só então GitOps, assinatura, SLSA.
Muita empresa para no 2 e chama de DevOps. Não é pecado. É honesto. Pular para Argo sem teste é pintar o avião.
Uma volta visual
Referências
- Pipelines Terraform no GitLab — o CD de infra no mesmo ano deste post
- Curso de Docker grátis
- Automatizando servidores Linux com Ansible
- Prometheus e Node Exporter
- GitLab CI/CD docs
- GitHub Actions docs
- SLSA · Sigstore · Argo CD
CI/CD continua sendo o mesmo pipeline de 2019: integrar cedo, testar sempre, soltar em pedaço pequeno. O YAML foi para o Git, o cluster passou a puxar o estado, e o job verde agora precisa provar de onde veio o binário. O resto é ferramenta.