Этот вопрос проверяет понимание стандартного процесса непрерывной интеграции в современной разработке программного обеспечения.
Типичный CI pipeline состоит из последовательных этапов, которые автоматически выполняются при каждом изменении кода. Основные этапы: сборка (build), тестирование (testing), анализ кода (code analysis) и создание артефактов (artifacts). Pipeline запускается при push в репозиторий, проходит все этапы и либо успешно завершается, либо сообщает об ошибках. Это обеспечивает быстрое обнаружение проблем и поддержание качества кода.
CI pipeline автоматизирует процесс проверки качества кода и подготовки его к развертыванию.
Этап 1: Сборка (Build)
Компиляция кода (если необходимо)
Установка зависимостей
Создание исполняемых файлов или пакетов
Этап 2: Тестирование (Testing)
Модульные тесты (Unit tests)
Интеграционные тесты (Integration tests)
Проверка покрытия кода (Code coverage)
Этап 3: Анализ кода (Code Analysis)
Статический анализ (linting)
Проверка безопасности (security scanning)
Проверка стиля кода (code style)
Этап 4: Создание артефактов (Artifacts)
Сборка Docker образов
Создание пакетов для развертывания
Генерация документации
# .github/workflows/ci.yml
name: CI Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:13
env:
POSTGRES_PASSWORD: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest pytest-cov flake8 black
- name: Lint code
run: |
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
black --check .
- name: Run tests
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5432/test_db
run: |
pytest --cov=./ --cov-report=xml
- name: Upload coverage reports
uses: codecov/codecov-action@v3
with:
file: ./coverage.xml
build:
runs-on: ubuntu-latest
needs: test
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v3
- name: Build Docker image
run: |
docker build -t my-app:${{ github.sha }} .
- name: Push to Registry
run: |
echo "Здесь будет push в Docker Registry"Быстрое выполнение: Pipeline должен завершаться за 10-15 минут
Раннее обнаружение ошибок: Тесты выполняются как можно раньше
Идемпотентность: Повторные запуски дают одинаковый результат
Оповещения: Уведомления о неудачных сборках
Воспроизводимость: Одинаковая среда на всех этапах
# Дополнительные этапы для production-ready pipeline
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run security scan
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
integration-test:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v3
- name: Run integration tests
run: |
docker-compose -f docker-compose.test.yml up -d
pytest tests/integration/
docker-compose -f docker-compose.test.yml down
performance-test:
runs-on: ubuntu-latest
needs: integration-test
steps:
- name: Run performance tests
run: |
# Запуск нагрузочного тестирования
k6 run performance-test.jsВывод: Хорошо настроенный CI pipeline — основа современной разработки. Он обеспечивает качество кода, быстрое обнаружение ошибок и уверенность при внесении изменений. Начинайте с простого pipeline и постепенно добавляйте этапы по мере роста проекта и команды.