Настройка CI/CD пайплайна для Python-приложения с использованием GitLab CI
Введение
GitLab CI/CD — это встроенный инструмент для автоматизации тестирования, сборки и деплоя приложений. В этом руководстве мы создадим CI/CD пайплайн для Python-приложения, который будет автоматически запускать тесты и, при успешном прохождении, развертывать приложение.
Требования
- Репозиторий проекта на GitLab.
- Файл с тестами для приложения (например, с использованием
pytest). - Базовые знания Python и GitLab.

Шаг 1. Подготовка репозитория
Создайте репозиторий на GitLab или используйте существующий.
Убедитесь, что у вас есть тесты в проекте. В качестве примера можно добавить pytest в зависимости проекта:
pip install pytest
Затем создайте файл с тестами, например, test_sample.py:
# test_sample.py
def test_example():
assert 1 + 1 == 2
Добавьте requirements.txt с зависимостями приложения, которые будут устанавливаться в пайплайне. Например:
pytest
Шаг 2. Создание файла .gitlab-ci.yml
Файл .gitlab-ci.yml описывает этапы и задачи, которые будут выполнены в пайплайне. В корне вашего репозитория создайте этот файл:
# .gitlab-ci.yml
# Указываем образ Python для использования в пайплайне
image: python:3.10
# Определяем этапы пайплайна
stages:
- test
- deploy
# Шаг тестирования
test:
stage: test
script:
- pip install -r requirements.txt # Установка зависимостей
- pytest # Запуск тестов
# Шаг деплоя
deploy:
stage: deploy
script:
- echo "Deploying application..."
# Здесь может быть команда для деплоя, например, scp или ssh
only:
- main
Объяснение этапов
- stages: Определяет последовательные этапы пайплайна. В данном случае это
testиdeploy. - test: На этом этапе устанавливаются зависимости и запускаются тесты с использованием
pytest. Если тесты проходят успешно, пайплайн переходит к следующему этапу. - deploy: Этот этап выполняется только в ветке
main, что предотвращает деплой из других веток. Здесь можно настроить деплой на сервер, например, с помощью командsshилиscp.

Шаг 3. Настройка секретных переменных для деплоя
Для безопасного деплоя на удаленный сервер можно использовать секретные переменные GitLab. Это позволяет скрыть пароли и ключи.
- Перейдите в настройки проекта Settings > CI/CD > Variables.
- Создайте переменные для ваших учетных данных, например:
DEPLOY_HOST— IP-адрес сервера.DEPLOY_USER— имя пользователя для подключения.DEPLOY_KEY— приватный SSH-ключ для доступа.
Пример использования переменных в деплое:
deploy:
stage: deploy
script:
- apt-get update -y && apt-get install -y sshpass
- sshpass -p "$DEPLOY_PASSWORD" scp -r . "$DEPLOY_USER@$DEPLOY_HOST:/path/to/deploy"
only:
- main
Шаг 4. Проверка пайплайна
Коммит и пуш изменений:
git add .gitlab-ci.yml git commit -m "Добавление CI/CD пайплайна" git push origin main
Перейдите в проект на GitLab, выберите CI/CD > Pipelines и проверьте статус пайплайна. Если пайплайн прошел успешно, значит, тесты выполнились, и, если это main, — произошло развертывание.
Шаг 5. Отладка и доработка пайплайна
Для сложных пайплайнов можно добавить дополнительные этапы, например, для статического анализа кода или проверки стиля.
Добавление этапа статического анализа (например, с помощью flake8):
lint:
stage: lint
script:
- pip install flake8
- flake8 .
only:
- main
Использование окружений GitLab для разных стадий (например, для тестовой и продакшн среды):
deploy:
stage: deploy
environment:
name: production
url: http://example.com
script:
- echo "Deploying to production..."
# команды для деплоя
only:
- main
Шаг 6. Настройка уведомлений
Для контроля над выполнением CI/CD пайплайнов можно настроить уведомления через Slack или email:
- Перейдите в Settings > Integrations > Slack notifications или Email notifications.
- Настройте уведомления для событий, таких как успешные или неудачные пайплайны.
Заключение
С настроенным GitLab CI/CD пайплайном можно автоматизировать тестирование и деплой Python-приложений, что улучшает стабильность и ускоряет процесс разработки.


