Настройка 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-приложений, что улучшает стабильность и ускоряет процесс разработки.