Пост

CI/CD для веб-проектов: автоматизация разработки и развертывания

Полное руководство по настройке CI/CD для веб-проектов. Изучите автоматизацию сборки, тестирования и развертывания с помощью GitHub Actions, GitLab CI и других инструментов.

CI/CD для веб-проектов: автоматизация разработки и развертывания

Введение

CI/CD (Continuous Integration/Continuous Deployment) - это ключевая практика современной разработки. В этой статье мы рассмотрим, как настроить автоматизацию для ваших веб-проектов.

Преимущества CI/CD

  • Скорость: Быстрое развертывание изменений
  • Качество: Автоматическая проверка кода
  • Надежность: Стандартизированный процесс
  • Масштабируемость: Легкое масштабирование

Что такое CI/CD?

Основные концепции

Continuous Integration (CI)

  • Автоматическая сборка
  • Запуск тестов
  • Проверка качества кода
  • Раннее обнаружение проблем

Continuous Deployment (CD)

  • Автоматическое развертывание
  • Управление окружениями
  • Мониторинг приложений
  • Откат изменений

Настройка CI/CD

1. GitHub Actions

Базовая конфигурация

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
name: CI/CD Pipeline
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      
      - name: Setup Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '14'
          
      - name: Install dependencies
        run: npm install
        
      - name: Run tests
        run: npm test
        
      - name: Build
        run: npm run build

Развертывание

1
2
3
4
5
6
7
8
9
10
11
12
13
jobs:
  deploy:
    needs: build
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    
    steps:
      - uses: actions/checkout@v2
      
      - name: Deploy to production
        run: |
          # Команды развертывания
          echo "Deploying to production..."

2. GitLab CI

Базовая конфигурация

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
stages:
  - install
  - test
  - build
  - deploy

install:
  stage: install
  script:
    - npm install
  artifacts:
    paths:
      - node_modules/

test:
  stage: test
  script:
    - npm test
  dependencies:
    - install

build:
  stage: build
  script:
    - npm run build
  artifacts:
    paths:
      - dist/

deploy:
  stage: deploy
  script:
    - echo "Deploying to production..."
  only:
    - main

Автоматизация тестирования

1. Unit-тесты

Настройка Jest

1
2
3
4
5
6
7
test:
  script:
    - npm test
  coverage: '/All files[^|]*\|[^|]*\s+([\d\.]+)/'
  artifacts:
    reports:
      coverage: coverage/coverage-report.json

2. E2E тесты

Настройка Cypress

1
2
3
4
5
6
7
8
9
e2e-tests:
  stage: test
  script:
    - npm run test:e2e
  artifacts:
    when: always
    paths:
      - cypress/videos/
      - cypress/screenshots/

Автоматизация сборки

1. Сборка приложения

Настройка сборки

1
2
3
4
5
6
7
8
build:
  stage: build
  script:
    - npm run build
  artifacts:
    paths:
      - dist/
    expire_in: 1 week

2. Оптимизация сборки

Кэширование зависимостей

1
2
3
4
cache:
  paths:
    - node_modules/
  key: ${CI_COMMIT_REF_SLUG}

Развертывание

1. Развертывание на сервер

SSH-доступ

1
2
3
4
5
6
deploy:
  stage: deploy
  script:
    - echo "$SSH_PRIVATE_KEY" > deploy_key
    - chmod 600 deploy_key
    - ssh -i deploy_key user@server "cd /app && git pull"

2. Развертывание в облако

AWS S3

1
2
3
4
5
6
deploy:
  stage: deploy
  script:
    - aws s3 sync dist/ s3://my-bucket/
  environment:
    name: production

Мониторинг

1. Логирование

Настройка логов

1
2
3
4
5
6
7
8
logging:
  script:
    - echo "Deployment started at $(date)"
    - npm run deploy
    - echo "Deployment completed at $(date)"
  artifacts:
    paths:
      - logs/

2. Метрики

Сбор метрик

1
2
3
4
5
6
metrics:
  script:
    - npm run collect-metrics
  artifacts:
    reports:
      metrics: metrics.json

Безопасность

1. Сканирование зависимостей

Проверка уязвимостей

1
2
3
4
5
security:
  stage: security
  script:
    - npm audit
    - npm run security-scan

2. Проверка кода

Линтинг и форматирование

1
2
3
4
5
lint:
  stage: quality
  script:
    - npm run lint
    - npm run format:check

Управление окружениями

1. Разные окружения

Конфигурация окружений

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
deploy_staging:
  stage: deploy
  script:
    - echo "Deploying to staging..."
  environment:
    name: staging
  only:
    - develop

deploy_production:
  stage: deploy
  script:
    - echo "Deploying to production..."
  environment:
    name: production
  only:
    - main

2. Переменные окружения

Управление секретами

1
2
3
4
variables:
  NODE_ENV: production
  DATABASE_URL: ${DB_URL}
  API_KEY: ${API_KEY}

Откат изменений

1. Автоматический откат

Настройка отката

1
2
3
4
5
6
7
deploy:
  script:
    - npm run deploy
  rollback:
    script:
      - npm run rollback
    when: on_failure

2. Ручной откат

Команды отката

1
2
3
4
5
6
rollback:
  script:
    - git checkout $CI_COMMIT_SHA
    - npm run deploy
  environment:
    name: production

Заключение

CI/CD - важная часть современной разработки. Используйте автоматизацию для ускорения процессов разработки, повышения качества кода и упрощения развертывания приложений.

Полезные ресурсы

Авторский пост защищен лицензией CC BY 4.0 .

© Oleg Dobrynin. Некоторые права защищены.