Introdução: Por que CI/CD é necessário para projetos JavaScript
O desenvolvimento de uma aplicação JavaScript moderna em Node.js é um processo complexo que envolve escrever código, testar, compilar e implantar. Sem automação, essas etapas são realizadas manualmente, o que leva a erros, atrasos e redução da qualidade do produto. CI/CD (Continuous Integration / Continuous Delivery) é uma prática de DevOps que automatiza a compilação, teste e implantação de código.
GitHub Actions é uma ferramenta integrada do GitHub que permite criar workflows para automatizar tarefas. Ela é ideal para projetos JavaScript, pois suporta Node.js, npm, Yarn e vários serviços populares. Neste artigo, vamos detalhar como configurar um pipeline CI/CD completo para seu projeto JavaScript usando GitHub Actions.
Você aprenderá: como executar testes, como compilar a aplicação, como fazer deploy em um servidor ou plataforma em nuvem e como evitar erros comuns.
Fundamentos do GitHub Actions para JavaScript
O que é GitHub Actions?
GitHub Actions é uma plataforma para automatizar workflows. Você descreve uma sequência de etapas em um arquivo YAML, que é colocado no repositório (geralmente .github/workflows/main.yml). Cada vez que um evento ocorre (por exemplo, push, pull request), o workflow é iniciado.
Um workflow consiste em jobs (tarefas) que são executados em um runner (máquina virtual). Para projetos JavaScript, geralmente é usado o runner Ubuntu, pré-instalado com Node.js.
Workflow básico para Node.js
Vamos começar com um workflow simples que executa testes a cada push ou pull request. Crie o arquivo .github/workflows/ci.yml:
name: CI para JavaScript
on: push: branches: [ main, develop ] pull_request: branches: [ main ]
jobs: test: runs-on: ubuntu-latest
strategy: matrix: node-version: [16.x, 18.x, 20.x]
steps: - uses: actions/checkout@v4 - name: Usar Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} cache: 'npm' - run: npm ci - run: npm test - run: npm run build --if-presentEste workflow faz o seguinte:
- Triggers: é acionado ao fazer push em main/develop ou ao abrir um pull request para main.
- Matrix de versões: testa no Node.js 16, 18, 20 — isso garante compatibilidade.
- Cache:
cache: 'npm'acelera a instalação das dependências. - Comandos:
npm ci(instalação limpa),npm test(testes),npm run build(compilação, se existir).
Configuração de um pipeline CI/CD completo
Agora vamos complicar a tarefa: adicionar linting, verificação de segurança e deploy automático após testes bem-sucedidos.
Passo 1: Linting e formatação
Adicione um job para ESLint e Prettier. Isso garante um estilo de código uniforme:
jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '18.x' cache: 'npm' - run: npm ci - run: npm run lint - run: npx prettier --check .No package.json devem existir os scripts "lint" e "format". Exemplo:
{ "scripts": { "lint": "eslint src/", "format": "prettier --write ." }}Passo 2: Segurança das dependências
Use npm audit para verificar vulnerabilidades:
security: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: npm audit --audit-level=highSe