📦 Capítulo 19: Pipelines de CI/CD Avançados com GitHub Actions
Módulo 03 — Versionamento com Git e GitHub • Bloco 5: Automação, CI/CD, Ferramentas & Hospedagem
🗺️ Mapa Conceitual do Capítulo
flowchart TD
subgraph ACTIONS_CORE["Arquitetura do GitHub Actions Engine"]
TRIGGERS["Gatilhos de Evento (push · pull_request · schedule · dispatch)"]
RUNNERS["Runners Efêmeros (Ubuntu, Windows, macOS Isolados)"]
HIERARCHY["Hierarquia: Workflow -> Jobs (Paralelos) -> Steps (Sequenciais)"]
TRIGGERS --> RUNNERS --> HIERARCHY
end
subgraph CI_PERF["Estratégias de Alta Performance & Escala"]
MATRIX["Matrix Builds (strategy.matrix: múltiplos SOs e Versões)"]
CACHE["Caching Inteligente (actions/cache via hashFiles de Lockfile)"]
DEPENDENCIES["Orquestração de Dependências de Jobs (needs: [lint, test])"]
MATRIX --> CACHE --> DEPENDENCIES
end
subgraph SECURE_CD["Segurança, Compliance & Deploy Contínuo (CD)"]
LEAST_PRIV["Menor Privilégio: permissions: { contents: read }"]
OIDC_AUTH["Autenticação sem Chaves Fixas via OpenID Connect (OIDC)"]
ENV_GATES["GitHub Environments (Aprovação Manual & Proteção de Produção)"]
LEAST_PRIV --> OIDC_AUTH --> ENV_GATES
end
ACTIONS_CORE --> CI_PERF
CI_PERF --> SECURE_CD
⚡ 1. O Modelo de Execução Orientado a Eventos
O GitHub Actions é uma plataforma de automação e orquestração de esteiras de Integração Contínua e Entrega Contínua (CI/CD) nativamente integrada ao ecossistema Git. Seus arquivos de definição residem obrigatoriamente no diretório .github/workflows/ em formato YAML:
[ Gatilho de Evento (ex: push na branch main) ]
│
▼
[ Runner Virtual Efêmero ]
│
┌───────────┴───────────┐
▼ ▼
[ Job 1: Lint ] [ Job 2: Testes ] (Executam em PARALELO por padrão)
│ │
└───────────┬───────────┘
│ needs: [Job 1, Job 2]
▼
[ Job 3: Build & Deploy ]
Anatomia da Hierarquia:
- Workflow: O fluxo automatizado global configurado no arquivo
.yml. - Eventos (Triggers): Ações no repositório que disparam o workflow (
on: push,on: pull_request,on: schedulepara cron jobs ouon: workflow_dispatchpara disparo manual). - Jobs: Conjunto de etapas executadas em uma máquina virtual dedicada (Runner). Jobs distintos rodam em paralelo, a menos que uma dependência seja declarada via diretiva
needs:. - Steps: Tarefas sequenciais executadas dentro da mesma máquina virtual do job, compartilhando o sistema de arquivos local.
🎛️ 2. Matrix Builds e Caching Estratégico de Dependências
Matrix Builds para Validação Multiplataforma:
Permite testar a compatibilidade da base de código em múltiplos sistemas operacionais e versões de linguagem simultaneamente sem duplicar código YAML:
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false # Se uma versão falhar, continua testando as outras
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- run: pytest
Aceleração com actions/cache:
Como cada job inicia em uma máquina virtual recém-criada e vazia, reinstalar centenas de megabytes de dependências a cada push desperdiça tempo e créditos de CI. O cache reaproveita pacotes baseado no hash do arquivo de trava (lockfile):
- name: Cache de Dependências
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
🔒 3. Princípio do Menor Privilégio e Autenticação OIDC
Pipelines de CI/CD tornaram-se alvos prioritários de ataques de cadeia de suprimentos (Supply Chain Attacks). O GitHub impõe diretrizes estritas de endurecimento (Hardening):
1. Declaração Explícita de Permissões (permissions):
Por padrão corporativo, restrinja o token automático ${{ secrets.GITHUB_TOKEN }} para permissão estrita de leitura:
permissions:
contents: read
pull-requests: write # Habilita apenas escrita de comentários se necessário
2. Autenticação Moderna em Nuvem sem Chaves Fixas (OIDC):
Em vez de cadastrar chaves de acesso estáticas e perigosas de longa duração (como AWS_SECRET_ACCESS_KEY), utilize OpenID Connect (OIDC). O GitHub Actions negocia um token criptográfico temporário de curta duração diretamente com o provedor de nuvem (AWS IAM, Google Cloud Workload Identity, Azure AD):
permissions:
id-token: write # Mandatório para negociar o token JWT OIDC
contents: read
🚀 4. Esteira Completa de Produção com Ambientes de Deploy
Para garantir que deploys em produção exijam homologação prévia e proteção contra lançamentos acidentais:
name: Production Delivery Pipeline
on:
push:
branches: [main]
jobs:
audit-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Executar Auditoria Estática
run: |
python3 _scripts/validate_liquid.py
pytest tests/
deploy-production:
needs: [audit-and-test] # Só executa se o job anterior passar com exit 0
runs-on: ubuntu-latest
environment:
name: production # Ativa as regras de aprovação manual configuradas no GitHub
url: https://portal.techcorp.io
steps:
- uses: actions/checkout@v4
- name: Deploy em Cluster Kubernetes
run: ./deploy.sh --env=prod