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
② 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
⑧ 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