Por Que Automatizar Deploy
Deploy manual e arriscado e lento. Com CI/CD, cada push para main faz deploy automaticamente — depois de rodar testes e build. Se algo falhar, nao vai para producao.
GitHub Actions: O Basico
Crie .github/workflows/deploy.yml:
name: Deploy
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test-and-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
- run: npm ci
- run: npm run lint
- run: npm run build
Adicionando Testes
- run: npm test
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
NEXTAUTH_SECRET: ${{ secrets.NEXTAUTH_SECRET }}
Preview Deploys para PRs
Com Vercel, cada PR ganha uma URL de preview automaticamente. Isso permite que reviewers vejam as mudancas ao vivo antes do merge.
Deploy para VPS
Se voce usa VPS em vez de Vercel:
deploy:
needs: test-and-build
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /app
git pull
npm ci
npm run build
pm2 restart all
Secrets e Variaveis
Nunca coloque credenciais no codigo. Use GitHub Secrets:
- Repositorio > Settings > Secrets and variables > Actions
- Adicione cada variavel de ambiente
- Referencie com
${{ secrets.NOME }}
Dicas de Performance
- Use
cache: 'npm'no setup-node para nao reinstalar dependencias - Rode lint e testes em paralelo com jobs separados
- Use
concurrencypara cancelar workflows duplicados
Resultado
Com esse setup, cada push passa por lint, testes e build. Se tudo passar, faz deploy. Se falhar, voce recebe notificacao e producao fica intacta. Sem estresse.