Вот пример описания пайплайна (pipeline description), которое можно добавить в .gitlab-ci.yml в виде комментария или использовать как документацию к CI/CD-процессу. Оно описывает назначение, параметры и поведение пайплайна:


Описание пайплайна: Инициализация PostgreSQL из удалённых дампов

Этот пайплайн предназначен для инициализации удалённой PostgreSQL-базы данных с помощью схемы и данных, загружаемых из Nexus-репозитория. Он автоматически выполняет следующие действия:

  • Создаёт временную директорию для дампов.
  • Скачивает SQL-схему и архив с данными (data.tar.gz) с Nexus.
  • Ожидает доступности PostgreSQL-сервера.
  • Создаёт базу данных (если не существует).
  • Восстанавливает схему и (опционально) данные.

Основные функции

  • Загрузка схемы БД из schema.sql по URL.
  • Загрузка и восстановление данных из data.tar.gz (в формате pg_dump).
  • Поддержка опциональной загрузки данных через переменную LOAD_DATA.
  • Проверка доступности PostgreSQL перед восстановлением.
  • Работа с защищённым доступом к Nexus через аутентификацию (SED_NEXUS_USER / SED_NEXUS_PASS).

Триггеры

  • Пайплайн не запускается при push (например, в ветку).
  • Запускается вручную или через API (например, trigger, schedule, web и т.д.).
workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE == "push"
      when: never
    - when: always

Используется для целенаправленной инициализации БД, а не автоматического запуска при каждом коммите.


Переменные окружения

Переменная Обязательная Описание
POSTGRES_HOST Да Хост PostgreSQL-сервера
POSTGRES_PORT Нет (по умолч. 5432) Порт PostgreSQL
POSTGRES_DB Да Имя базы данных для создания/восстановления
POSTGRES_USER Да Пользователь с правами на создание БД и восстановление
POSTGRES_PASSWORD Да Пароль пользователя
SCHEMA_SQL_URL Да URL до schema.sql в Nexus
DATA_DUMP_TAR_GZ_URL Да* URL до data.tar.gz (*если LOAD_DATA=true)
LOAD_DATA Нет (по умолч. true) Включить/выключить восстановление данных
SED_NEXUS_USER / SED_NEXUS_PASS Да Учётные данные для доступа к Nexus (должны быть заданы в CI/CD Variables)

Переменные с описанием можно редактировать в интерфейсе GitLab при запуске пайплайна (например, LOAD_DATA — выпадающий список).


Этапы выполнения (init_db)

  1. create_dump_dir — Создаёт директорию /tmp/dump_data.
  2. download_schema — Скачивает schema.sql с Nexus.
  3. download_data — Скачивает data.tar.gz (только для проверки URL, далее скачивается снова в restore_data).
  4. wait_for_postgres — Проверяет доступность PostgreSQL (до 150 сек).
  5. create_database — Создаёт БД, если она не существует.
  6. restore_schema — Применяет SQL-схему к БД.
  7. restore_data — Восстанавливает данные через pg_restore (если LOAD_DATA != "false").

Если скачивание или восстановление завершается с ошибкой — пайплайн останавливается с кодом 1.


Теги выполнения

  • Выполняется только на раннере с тегом mmedo.

Использование

  1. Убедитесь, что переменные SED_NEXUS_USER и SED_NEXUS_PASS заданы в CI/CD Settings.
  2. Запустите пайплайн вручную через GitLab UI или API.
  3. Выберите нужные параметры (например, отключите LOAD_DATA, если нужны только схемы).
  4. Пайплайн проинициализирует БД на указанном хосте.

Пример использования

# Запуск через API с кастомными параметрами
curl --request POST \
     --form "variables[POSTGRES_HOST]=pg-prod.example.com" \
     --form "variables[POSTGRES_DB]=myapp_db" \
     --form "variables[LOAD_DATA]=false" \
     "https://gitlab.example.com/api/v4/projects/123/pipeline"

Назначение: Поддержка окружений (dev, test, staging) через быстрое разворачивание БД из эталонных дампов.
Рекомендуется использовать с осторожностью в production.


# .gitlab-ci.yml
#
# === ПАЙПЛАЙН: Инициализация PostgreSQL из Nexus ===
# Полное описание: см. ниже
# ...

Или хранить отдельно в docs/ci-pipeline-init-db.md.