AULA 62 MÓDULO 8 DevOps ⏱ 55 min

CI/CD com GitHub Actions

CI: lint, testes, build. CD: deploy automático no merge. GitHub Actions com needs, secrets e services.

CI/CDGitHub Actionspipelinesecretsdeploytesteslint

CI/CD — Integração e Entrega Contínua

CI (Continuous Integration) executa testes automaticamente em cada push. CD (Continuous Delivery/Deployment) entrega automaticamente para produção após CI passar.

🚀
por que CI/CD?
Sem CI/CD: deploy manual, esqueceu de rodar os testes, bug em produção. Com CI/CD: cada PR tem testes automáticos. Merge na main = deploy automático. Risco mínimo.
CI Pipeline
① Push para branch
② Instalar dependências
③ Lint (ESLint)
④ Testes unitários (Jest)
⑤ Build da imagem Docker
⑥ Testes de integração
CD Pipeline
⑦ Push imagem para registry
⑧ Deploy em staging
⑨ Smoke tests
⑩ Deploy em produção
⑪ Notificar Slack

GitHub Actions

GitHub Actions é o sistema de CI/CD nativo do GitHub. Gratuito para repos públicos. Configuração via YAML em .github/workflows/.

🔑
secrets no GitHub
Variáveis sensíveis (RAILWAY_TOKEN, DATABASE_URL) ficam em Settings → Secrets → Actions. Nunca no workflow YAML.
javascript
# .github/workflows/ci-cd.yml
name: CI/CD

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:16
        env:
          POSTGRES_PASSWORD: test
        options: >-
          --health-cmd pg_isready
          --health-interval 10s

    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20 }

      - run: npm ci
      - run: npm run lint
      - run: npm test
        env:
          DATABASE_URL: postgres://postgres:test@localhost:5432/test

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: railway/cli-action@v2
        with:
          service: api
        env:
          RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }}
quiz · aula 62
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
O que garante o 'needs: test' no job de deploy?
QUESTÃO 02
Por que usar secrets do GitHub em vez de escrever tokens no YAML?
QUESTÃO 03
Qual evento dispara o pipeline nos pull requests?
0/3