Ответ
Типичный CI/CD pipeline для Node.js проекта состоит из последовательных этапов, автоматизирующих сборку, тестирование и развертывание. Вот пример конфигурации для GitHub Actions:
.github/workflows/ci-cd.yml:
name: Node.js CI/CD Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test-and-build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
run: npm ci --audit=false
- name: Run linter (ESLint)
run: npm run lint
- name: Run tests with coverage
run: npm test -- --coverage
- name: Build project (для TypeScript)
run: npm run build
- name: Upload coverage report
uses: codecov/codecov-action@v3
deploy-staging:
runs-on: ubuntu-latest
needs: test-and-build
if: github.ref == 'refs/heads/develop'
steps:
- name: Deploy to Staging (AWS Elastic Beanstalk example)
run: |
# Команды для деплоя, например, с помощью AWS CLI
eb deploy myapp-staging --label ${{ github.sha }}
deploy-production:
runs-on: ubuntu-latest
needs: test-and-build
if: github.ref == 'refs/heads/main'
steps:
- name: Approve and Deploy to Production
# Часто требует ручного подтверждения (manual approval)
run: echo "Производственный деплой инициирован..."
Ключевые этапы локально и в CI:
- Установка:
npm ciдля воспроизводимых зависимостей. - Линтинг: Проверка стиля кода с помощью
ESLintиPrettier. - Тестирование: Запуск юнит- и интеграционных тестов (
Jest,Mocha). - Сборка: Транспиляция TypeScript, минификация, бандлинг (если применимо).
- Деплой: Автоматическое развертывание на staging/production среды (часто в Docker-контейнерах на платформах вроде AWS, GCP, Heroku).