Noções Básicas de CI/CD
10 exemplos para estruturar CI (validação de pull request) e CD (deploy de release) para serviços Node.js 24 TypeScript - 7 básicos e 3 intermediários.
Busque em todas as páginas da documentação
10 exemplos para estruturar CI (validação de pull request) e CD (deploy de release) para serviços Node.js 24 TypeScript - 7 básicos e 3 intermediários.
mkdir node-service && cd node-service
npm init -y
npm pkg set type=module
npm install express@5
npm install -D typescript@5.6 vitest eslint @types/nodePara detalhes específicos do GitHub Actions, consulte GitHub Actions para Node e Quality Gates.
PR aberto / push
-> install (npm ci)
-> lint
-> typecheck
-> unit test
-> (opcional) integration test
-> bloquear merge se qualquer etapa falhar
Tag / merge para main
-> install + test (repetir gates)
-> build (tsc / docker build)
-> scan image / audit
-> push artifact (registry / S3 zip)
-> deploy staging
-> smoke test staging
-> deploy production (aprovação manual ou progressiva)
package.json{
"scripts": {
"lint": "eslint src",
"typecheck": "tsc --noEmit",
"test": "vitest run",
"build": "tsc -p tsconfig.json",
"audit:ci": "npm audit --audit-level=high"
}
}tsc --noEmit captura erros de tipo sem emitir arquivospackage.json devDependencies# .github/workflows/ci.yml
name: CI
on:
pull_request:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "24"
cache: npm
- run: npm ci
- run: npm run lint
- run: npm run typecheck
- run: npm run testcache: npm acelera as instalações quando o lockfile não mudapull_request e push para mainsteps:
- run: npm ci
- run: npm run lint # segundos
- run: npm run typecheck # segundos
- run: npm run test # minutos
- run: npm run build # após os testes passarem| Ambiente | Gatilho | Propósito |
|---|---|---|
ci | Cada PR | Apenas validação |
staging | Merge para main | Integração pré-produção |
production | Tag ou workflow aprovado | Tráfego do cliente |
- name: Build and push image
run: |
IMAGE=ghcr.io/acme/api:${{ github.sha }}
docker build -t "$IMAGE" .
docker push "$IMAGE"github.sha, não apenas :latest# .github/workflows/reusable-node-ci.yml
on:
workflow_call:
inputs:
node-version:
required: false
type: string
default: "24"
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
cache: npm
- run: npm ci
- run: npm run lint && npm run typecheck && npm run test# .github/workflows/ci.yml
jobs:
call-ci:
uses: ./.github/workflows/reusable-node-ci.yml# .github/workflows/release.yml
name: Release
on:
push:
tags: ["v*.*.*"]
jobs:
deploy-staging:
runs-on: ubuntu-latest
environment: staging
steps:
- uses: actions/checkout@v4
- run: npm ci && npm test && npm run build
- run: ./scripts/deploy.sh staging ${{ github.sha }}
deploy-production:
needs: deploy-staging
runs-on: ubuntu-latest
environment: production
steps:
- run: ./scripts/deploy.sh production ${{ github.sha }}environment do GitHub adiciona revisores necessários para produção- name: Validate commit messages on PR
uses: wagoid/commitlint-github-action@v6Ambientes de preview opcionais por PR - Preview Environments. Padrão: apenas validação, deploy no merge.
Sim. Reexecute os gates em main para capturar desvios de merge. Algumas equipes confiam apenas em PR; reexecutar em main é mais seguro.
Pipeline de release após os testes, ou pipeline de PR apenas para alterações no Dockerfile com gate de scan. Nunca pule os testes antes do push da imagem.
Filtros de caminho: paths: ['services/api/**'] disparam apenas workflows afetados. Use Turborepo ou Nx para detecção de afetados.
CI constrói o artefato zip; CD executa aws lambda update-function-code com o mesmo objeto S3 nomeado por SHA.
Segredos do GitHub Actions e OIDC para AWS. Sem chaves AWS de longa duração no repositório. Veja Gerenciadores de Segredos.
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (Active LTS), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 e NestJS 11.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026