Deploy, rollback e depuração de pipeline quebrado
Objetivos desta aula
- Estruturar deploy com aprovação
- Executar rollback em minutos
- Depurar workflow com método
Deploy sem rollback planejado é aposta. O padrão mínimo é: artefato imutável, versão anterior conhecida e um caminho de volta testado — seja um job manual que reimplanta a versão anterior, seja rollout undo no Kubernetes. Rollback precisa ser tão rotineiro que ninguém hesite em usá-lo às três da manhã.
Para depurar pipeline, siga a ordem: leia o primeiro erro do log (não o último), reproduza o comando localmente com as mesmas versões, verifique diferenças de ambiente (variáveis, permissões, cache) e só então mexa no YAML. Ative debug detalhado quando necessário e use act para iterar localmente sem poluir o histórico de execuções.
Três causas cobrem a maioria dos casos: variável ou secret ausente no contexto (PR de fork não recebe secrets), permissão insuficiente do token e diferença de versão entre a máquina local e o runner.
1. Estratégias de deploy
- Rolling: troca instâncias aos poucos (padrão do Kubernetes)
- Blue/green: sobe o ambiente novo completo e vira o tráfego de uma vez
- Canary: manda 5% do tráfego para a versão nova e aumenta se as métricas ficarem boas
2. Aprovação e environments
No GitHub, o environment production pode exigir revisores e só aceitar deploy da main. Isso dá controle sem burocracia.
3. Rollback rápido
Com tags imutáveis, rollback é redeploy da versão anterior: kubectl rollout undo ou reverter o commit no repositório GitOps. Treine antes de precisar.
4. Smoke test pós-deploy
Depois do deploy, o pipeline chama o /health e uma rota crítica; se falhar, faz rollback automático.
5. Depurando pipeline quebrado
- Leia o primeiro erro, não o último.
- Reproduza localmente com o mesmo comando.
- Ative logs de debug (
ACTIONS_STEP_DEBUG). - Verifique o que mudou: dependência, action, runner, secret expirado.
6. Checagem final
Você deve fazer deploy com aprovação, validar com smoke test e reverter em menos de 5 minutos.
Na prática
Deploy com rollback manual
yaml
name: deploy-e-rollback
on:
workflow_dispatch:
inputs:
versao:
description: "Tag da imagem a implantar (ex.: v1.2.0)"
required: true
acao:
type: choice
options: [deploy, rollback]
default: deploy
jobs:
aplicar:
runs-on: ubuntu-latest
environment: producao
steps:
- uses: actions/checkout@v4
- name: Registrar versao atual
run: echo "ANTERIOR=$(cat .deploy/current-version)" >> "$GITHUB_ENV"
- name: Aplicar
run: |
set -euo pipefail
ALVO="${{ inputs.versao }}"
echo "aplicando $ALVO (anterior: $ANTERIOR)"
./scripts/deploy.sh "$ALVO"
- name: Verificar saude
run: ./scripts/health-check.sh https://api.cloudshop.dev/health
- name: Rollback automatico se falhar
if: failure()
run: ./scripts/deploy.sh "$ANTERIOR"Depurar localmente
bash
gh run list --limit 5
gh run view --log-failed
gh run rerun <run-id> --failed
# reproduzir o job localmente
act pull_request -j qualidade --container-architecture linux/amd64
# habilitar log detalhado (variaveis de repositorio)
gh variable set ACTIONS_STEP_DEBUG --body trueDeploy com smoke test e rollback automático
yaml
deploy:
needs: build
environment: production # exige aprovacao configurada no repositorio
runs-on: ubuntu-latest
steps:
- run: kubectl set image deploy/api api=ghcr.io/cloudshop-org/cloudshop-api:sha-${{ github.sha }}
- run: kubectl rollout status deploy/api --timeout=180s
- name: smoke test
run: curl -fsS --retry 5 --retry-delay 5 https://api.cloudshop.dev/health
- name: rollback
if: failure()
run: kubectl rollout undo deploy/apiPor que isso importa
Métricas DORA valorizam tempo de restauração. Rollback rápido é a resposta prática.
Erro comum
Tentar corrigir para frente sob pressão em vez de reverter e investigar com calma.
Dica de produção
Verificação de saúde pós-deploy com rollback automático em falha é o padrão que evita madrugadas.
Alerta de segurança
PRs de forks não recebem secrets: pipelines que dependem disso falham e tentam contornos inseguros.
Pergunta de entrevista
Descreva seu processo para depurar um workflow que falha só no runner.
Glossário
- act
- Ferramenta que executa workflows do GitHub Actions localmente em containers.
- MTTR
- Tempo médio de restauração do serviço após um incidente.
- canary
- Liberação gradual para uma fração do tráfego antes do total.
- blue/green
- Dois ambientes completos com troca de tráfego instantânea.
- smoke test
- Teste rápido que confirma que o essencial funciona após o deploy.
Conexão com o CloudShop
Criar o workflow de rollback do CloudShop e testá-lo com a versão anterior.
Quiz da aula
1. Deploy quebrou produção. Primeira ação correta?
2. Qual estratégia expõe a versão nova a só uma parte dos usuários?
3. Ao depurar um pipeline, qual erro ler primeiro?
Minhas anotações
Salvo automaticamente neste navegador.