+7 (495) 107-75-45 Подключение
+7 (495) 107-75-47 Тех. поддержка 24/7
Пример
01.11.2024

Настройка CI/CD пайплайна для Python-приложения с использованием GitLab CI

Введение

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

Требования

  • Репозиторий проекта на GitLab.
  • Файл с тестами для приложения (например, с использованием pytest).
  • Базовые знания Python и GitLab.

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.

CI CD деплой

Шаг 3. Настройка секретных переменных для деплоя

Для безопасного деплоя на удаленный сервер можно использовать секретные переменные GitLab. Это позволяет скрыть пароли и ключи.

  1. Перейдите в настройки проекта Settings > CI/CD > Variables.
  2. Создайте переменные для ваших учетных данных, например:
    • 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:

  1. Перейдите в Settings > Integrations > Slack notifications или Email notifications.
  2. Настройте уведомления для событий, таких как успешные или неудачные пайплайны.

Заключение

С настроенным GitLab CI/CD пайплайном можно автоматизировать тестирование и деплой Python-приложений, что улучшает стабильность и ускоряет процесс разработки.