Введение
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 - важная часть современной разработки. Используйте автоматизацию для ускорения процессов разработки, повышения качества кода и упрощения развертывания приложений.
Полезные ресурсы