Опишите структуру простого CI/CD пайплайна на примере GitHub Actions или GitLab CI

Ответ

CI/CD (Continuous Integration / Continuous Delivery) пайплайн — это автоматизированный процесс, который включает этапы сборки, тестирования и развертывания приложения при каждом изменении в коде.

Основные этапы простого пайплайна:

  1. CI (Непрерывная интеграция):
    • Checkout: Загрузка исходного кода из репозитория.
    • Setup Environment: Настройка окружения (например, установка нужной версии Python, Node.js).
    • Install Dependencies: Установка зависимостей проекта (pip install, npm install).
    • Lint & Test: Запуск линтеров для проверки стиля кода и автоматических тестов для проверки логики.
  2. CD (Непрерывная доставка/развертывание):
    • Build: Сборка артефакта (например, Docker-образа).
    • Deploy: Развертывание артефакта на сервере (staging или production).

Пример: GitHub Actions для Python-приложения (только CI-часть)

Файл .github/workflows/ci.yml:

name: Python CI

# Триггер для запуска: push в main или pull request в main
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest # Запуск на виртуальной машине с Ubuntu

    steps:
      # 1. Загрузка кода
      - name: Checkout repository
        uses: actions/checkout@v4

      # 2. Настройка Python
      - name: Set up Python 3.10
        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

Пример: GitLab CI для того же приложения

Файл .gitlab-ci.yml:

# Определение стадий пайплайна
stages:
  - test
  - deploy

# Задача для стадии 'test'
test_job:
  stage: test
  image: python:3.10 # Использование Docker-образа с Python
  script:
    - echo "Installing dependencies..."
    - pip install -r requirements.txt
    - echo "Running tests..."
    - pytest

# Заглушка для стадии 'deploy'
deploy_job:
  stage: deploy
  script:
    - echo "Deploying application..."
    # Здесь будут команды для развертывания
  rules:
    - if: $CI_COMMIT_BRANCH == "main" # Выполнять только для ветки main