CI/CD Pipelines
Integração e Entrega Contínua
Automatize o ciclo de build, test e deploy. Entenda como o CI/CD transforma o fluxo de desenvolvimento e elimina deploys manuais e fragíeis.
Meme da Aula
O que é CI/CD?
DevOps & o Loop Infinito
CI/CD é a espinha dorsal do DevOps moderno. Continuous Integration garante que cada push seja validado automaticamente. Continuous Delivery/Deployment leva o código validado até produção com mínima intervenção humana.
🔄 CI — Continuous Integration
Cada commit dispara um pipeline automático: lint, build e testes unitários. A equipe detecta problemas em minutos, não dias.
Princípio: integre cedo, integre sempre. Evite o "merge hell" de branches que ficam separadas por semanas.
🚀 CD — Continuous Delivery / Deployment
Delivery: o artefato está sempre pronto para ser promovido a produção — o botão existe, mas é humano quem aperta.
Deployment: o deploy acontece sozinho após cada pipeline verde. Zero intervenção manual.
Etapas do Pipeline
Do Código ao Deploy
Um pipeline CI/CD típico segue estas fases em sequência. Cada etapa precisa passar para a próxima começar.
FASE 01
Code Validation
Lint, format check, SAST estático. Falha rápida antes de desperdiçar recursos de build.
FASE 02
Build
Compila o código, instala dependências, gera o artefato (JAR, binário, imagem Docker).
FASE 03
Tests
Testes unitários, integração, cobertura. Pipeline falha se coverage cair abaixo do threshold.
FASE 04
Deploy
Publica artefato, aplica manifests Kubernetes, atualiza Cloud Run ou sobe containers via SSH.
Conceitos Chave
Glossário CI/CD
Pipeline
Sequência automatizada de etapas que transforma um commit em software em produção.
Artifact
Saída da etapa de build: JAR, imagem Docker, binário compilado ou pacote npm.
Runner / Agent
Máquina (virtual ou física) que executa os jobs do pipeline. Pode ser gerenciado (cloud) ou self-hosted.
Trigger
Evento que dispara o pipeline: push, pull request, schedule (cron), ou disparo manual via API.
Secret / Env Var
Credenciais e tokens armazenados com segurança na plataforma CI/CD, injetados como variáveis de ambiente.
Cache
Guarda dependências entre execuções (node_modules, Maven ~/.m2) para acelerar builds.
Benefícios Práticos
⚡
Feedback Imediato
Bugs detectados em minutos após o commit, não na sexta à tarde na hora do deploy.
🛡️
Menos Risco
Deploys frequentes e pequenos são mais fáceis de reverter do que releases mensais gigantes.
📈
Qualidade
Testes e linting obrigatórios impedem que código ruim chegue a produção por descuido.
🤖
Automação Total
Time foca em escrever código; a máquina cuida de build, test e deploy repetitivo.
GitHub Actions
Workflows como Código
GitHub Actions é a plataforma CI/CD nativa do GitHub. Defina pipelines em YAML dentro do seu repositório e automatize qualquer coisa, do build ao deploy.
O que é GitHub Actions?
Componentes do Sistema
GitHub Actions é uma plataforma de CI/CD integrada ao GitHub que permite automatizar fluxos de trabalho diretamente no repositório. Tudo é definido em arquivos YAML na pasta .github/workflows/.
⚡
Event
Gatilho que inicia o workflow: push, pull_request, schedule, workflow_dispatch (manual) ou qualquer evento de API do GitHub.
📄
Workflow
Arquivo YAML em .github/workflows/. Define quais jobs rodam, em que condições e em qual ordem. Um repositório pode ter vários workflows.
💻
Runner
VM que executa os jobs. GitHub oferece runners gerenciados (ubuntu, windows, macos). Você pode usar self-hosted runners na sua própria infra.
📦
Job
Conjunto de steps que rodam no mesmo runner. Jobs rodam em paralelo por padrão. Use needs: para criar dependências entre eles.
🔧
Step
Unidade mínima de trabalho. Um step é um comando shell ou uma Action reutilizável. Steps dentro de um job rodam sequencialmente.
🧩
Action
Bloco reutilizável publicado no GitHub Marketplace. actions/checkout, actions/setup-node, docker/build-push-action são exemplos populares.
Exemplo de Workflow
Pipeline Node.js Completo
Este workflow roda nos eventos de push e pull_request na branch main. Instala dependências, roda lint e testes.
name: CI Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run lint
run: npm run lint
- name: Run tests
run: npm test
Hands-on na Aula
Pipeline Rodando ao Vivo
Durante a aula, vimos um pipeline real sendo executado no GitHub Actions com output em tempo real de cada step.
Boas Práticas
Pin actions por SHA
Use actions/checkout@abc1234 ao invés de @v4 para evitar supply chain attacks.
Secrets no Vault
Nunca hardcode credenciais no YAML. Use secrets.MEU_TOKEN e configure no GitHub.
Cache de dependências
Use actions/cache ou o cache embutido no setup-node para acelerar builds em até 70%.
Fail fast
Coloque etapas rápidas (lint, typecheck) antes das lentas (build, testes de integração) para feedback imediato.
Permissões mínimas
Configure permissions: no workflow para restringir o que o GITHUB_TOKEN pode fazer.
Matrix Strategy
Teste em múltiplas versões de Node/Python/Go em paralelo com strategy.matrix.
Ferramentas CI/CD
Ecossistema de Pipelines
Além do GitHub Actions, o mercado tem diversas ferramentas de CI/CD. Conhecer o ecossistema ajuda a escolher a ferramenta certa para cada contexto.
Comparação de Ferramentas
Quando usar cada uma
Cada ferramenta tem seu nicho. A escolha depende de onde seu código está hospedado, da autonomia que você quer e do modelo de custos.
Conceito Importante
GitOps — Git como Fonte de Verdade
GitOps é a prática de usar o repositório Git como fonte única de verdade para a infra e o estado do sistema. Ferramentas como ArgoCD e Flux implementam esse modelo para Kubernetes.
🔄 Pull-based CD (GitOps)
Um agente dentro do cluster (ArgoCD, Flux) monitora o repositório e sincroniza o estado automaticamente. Não precisa de acesso externo ao cluster.
📤 Push-based CD (Tradicional)
O pipeline CI/CD empurra as mudanças ativamente para o cluster via kubectl, Helm ou chamadas de API. Requer credenciais de acesso no pipeline.
Tecnologias Relacionadas
Docker
Kubernetes
Helm
Terraform
SonarQube
Trivy
Snyk
Gitleaks
OWASP ZAP
Checkov
AWS CodePipeline
Cloud Build (GCP)
Azure DevOps
Tekton
Flux
Laboratórios
Mãos na Massa
6 labs progressivos: do primeiro workflow GitHub Actions até um pipeline completo com Docker, GCP, SonarCloud e Snyk.
Entender a estrutura de um workflow do GitHub Actions, fazer fork de um repositório Node.js com pipeline pronta e observar o pipeline rodar automaticamente após um push.
github-actions
workflow
node.js
iniciante
📋 Ver Lab →
Criar um pipeline GitHub Actions completo com as etapas de instalar dependências, build, testes automatizados e deploy de site estático no GitHub Pages — sem nenhum serviço externo.
github-actions
github-pages
deploy
intermediario
📋 Ver Lab →
Subir um servidor Jenkins via Docker, configurar credenciais de GitHub e Docker Hub, e criar uma Multibranch Pipeline que builda e faz push de uma imagem Docker automaticamente a cada push no repositório.
jenkins
docker
multibranch-pipeline
intermediario
📋 Ver Lab →
Criar uma conta gratuita no Harness, configurar conectores de GitHub e Docker Hub, importar uma pipeline pronta do repositório e disparar execuções via push e pull request.
harness
cicd
enterprise
intermediario
📋 Ver Lab →
Explorar 5 ferramentas de segurança integráveis em pipelines CI/CD: Checkov (IaC), Gitleaks e TruffleHog (detecção de segredos), Snyk (vulnerabilidades em dependências) e Trivy (vulnerabilidades em imagens de container).
devsecops
checkov
snyk
trivy
gitleaks
📋 Ver Lab →
Montar um pipeline GitHub Actions completo de ponta a ponta: build, testes, push de imagem Docker, análise de qualidade com SonarCloud, scan de segurança com Snyk e deploy na Google Cloud Run usando Workload Identity Federation (sem chave de serviço em plain text).
github-actions
docker
cloud-run
sonarcloud
snyk
wif
avancado
📋 Ver Lab →