Ответ
Базовый CI/CD пайплайн для Python-проекта автоматизирует проверку качества кода, тестирование и развертывание. Он обычно состоит из нескольких ключевых этапов, запускаемых при каждом коммите в репозиторий.
Основные этапы пайплайна:
- Checkout: Загрузка исходного кода из репозитория.
- Setup Environment: Установка нужной версии Python и зависимостей проекта (обычно из
requirements.txt). - Linting & Formatting: Проверка кода на соответствие стилю с помощью инструментов вроде
flake8,blackилиruff. - Testing: Запуск автоматических тестов (например, с помощью
pytest) для проверки корректности работы кода. - (Опционально) Build: Сборка артефактов, например, создание Docker-образа.
- (Опционально) Deploy: Автоматическое развертывание приложения на тестовый или продакшн-сервер.
Пример: CI-пайплайн с использованием GitHub Actions
Это типичный файл конфигурации .github/workflows/ci.yml, который выполняет линтинг и тестирование для Python-проекта.
# Имя рабочего процесса
name: Python CI
# Триггеры для запуска: push в main или создание pull request
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
# Название задачи
build-and-test:
# ОС, на которой будет выполняться задача
runs-on: ubuntu-latest
strategy:
# Запуск тестов на нескольких версиях Python
matrix:
python-version: ["3.9", "3.10", "3.11"]
steps:
# 1. Клонирование репозитория
- name: Checkout repository
uses: actions/checkout@v3
# 2. Настройка Python нужной версии
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
# 3. Установка зависимостей
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install flake8 pytest
# 4. Проверка кода линтером
- name: Lint with flake8
run: |
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# 5. Запуск тестов
- name: Test with pytest
run: |
pytest Ответ 18+ 🔞
А, вот это тема, блядь! Сейчас я тебе на пальцах, как для полного чайника, объясню, что это за магия такая — CI/CD для питонячего кода. Представь, что ты не один, а целая банда распиздяев пишет в один проект. Чтобы они не насрали в общий код, и нужен этот самый пайплайн — он как злой надзиратель, который всех строит и заставляет делать всё по правилам.
Из чего эта хуйня состоит, по шагам:
- Checkout (Выкатка кода): Пайплайн лезет в твой репозиторий и выкачивает оттуда весь свежий код. Без этого нихуя не начнётся.
- Setup Environment (Подготовка площадки): Ставит нужную версию Питона и все библиотеки, которые твой проект жрёт.
pip install -r requirements.txt— святое дело, блядь. - Linting & Formatting (Причёсывание и обнюхивание): Тут приходят строгие училки вроде
flake8илиblack. Они смотрят, не пишешь ли ты криво, не нарушаешь ли стиль, и если что — сразу по рукам бьют. Чтобы код был красивый, а не как курица лапой. - Testing (Испытания огнём): Самое интересное. Запускаются все твои автотесты через
pytest. Если хоть один тест сдох — всё, пиздец, пайплайн красный и дальше не пускает. Значит, ты что-то сломал, мудак. - (По желанию) Build (Сборка): Если проект серьёзный, тут могут собрать Docker-образ или какой-нибудь пакет.
- (По желанию) Deploy (Выкат): И наконец, если все предыдущие этапы прошли без сучка и задоринки, автоматически выкатывает твоё творение на сервера. Красота, ёпта!
Живой пример на GitHub Actions
Вот смотри, как это выглядит в реальности. Файлик .github/workflows/ci.yml — это и есть наша инструкция для надзирателя.
# Как этот конвейер зовут
name: Python CI
# Когда его будить: когда кто-то пихает код в main или создаёт pull request
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
# Задача, которую он будет выполнять
build-and-test:
# На какой операционке работать
runs-on: ubuntu-latest
strategy:
# Хитрость: прогнать всё на нескольких версиях Питона, чтобы везде работало
matrix:
python-version: ["3.9", "3.10", "3.11"]
steps:
# 1. Выкачать код из гита
- name: Checkout repository
uses: actions/checkout@v3
# 2. Поставить нужный Питон
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
# 3. Нажрать все зависимости
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install flake8 pytest
# 4. Прогнать линтер (пусть покритикует)
- name: Lint with flake8
run: |
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# 5. Запустить тесты. Если упадут — будет овердохуища стыда.
- name: Test with pytest
run: |
pytest
Вот и вся магия, блядь. Настроил один раз — и потом можно спать спокойно. Система сама будет орать, если кто-то из твоей команды накосячит. Удобно же, в рот меня чих-пых!