Ответ
CI/CD (Continuous Integration / Continuous Delivery / Continuous Deployment) — это методология и набор практик для автоматизации этапов разработки, сборки, тестирования и выпуска программного обеспечения. Основная цель — сделать релизы быстрыми, частыми и надежными.
Составляющие CI/CD
-
Continuous Integration (CI, Непрерывная интеграция) Это практика регулярного слияния изменений кода от нескольких разработчиков в единый центральный репозиторий. После каждого слияния автоматически запускается сборка и набор тестов (unit-тесты, интеграционные тесты) для быстрого обнаружения ошибок.
-
Continuous Delivery (CD, Непрерывная доставка) Это расширение CI, при котором код, успешно прошедший все тесты, автоматически готовится к релизу и развертывается в тестовое или staging-окружение. Финальное развертывание на production-сервер требует ручного подтверждения.
-
Continuous Deployment (CD, Непрерывное развертывание) Это следующий шаг после Continuous Delivery. Каждое изменение, прошедшее все этапы CI/CD, автоматически развертывается на production-сервер без ручного вмешательства.
Ключевое различие
Критерий | Continuous Delivery | Continuous Deployment |
---|---|---|
Деплой в Production | Требует ручного одобрения | Полностью автоматический |
Цель | Всегда иметь готовую к релизу версию | Максимально быстро доставлять изменения пользователям |
Пример простого CI-пайплайна (GitHub Actions)
Этот .yml
файл описывает шаги для автоматической проверки кода при каждом push
в репозиторий.
# .github/workflows/ci.yml
name: Basic CI Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
# 1. Получаем исходный код репозитория
- name: Checkout code
uses: actions/checkout@v4
# 2. Настраиваем окружение Python
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
# 3. Устанавливаем зависимости
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
# 4. Запускаем тесты
- name: Run tests with pytest
run: |
pytest