Вот пример описания пайплайна (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)
create_dump_dir— Создаёт директорию/tmp/dump_data.download_schema— Скачиваетschema.sqlс Nexus.download_data— Скачиваетdata.tar.gz(только для проверки URL, далее скачивается снова вrestore_data).wait_for_postgres— Проверяет доступность PostgreSQL (до 150 сек).create_database— Создаёт БД, если она не существует.restore_schema— Применяет SQL-схему к БД.restore_data— Восстанавливает данные черезpg_restore(еслиLOAD_DATA != "false").
Если скачивание или восстановление завершается с ошибкой — пайплайн останавливается с кодом 1.
Теги выполнения
- Выполняется только на раннере с тегом
mmedo.
Использование
- Убедитесь, что переменные
SED_NEXUS_USERиSED_NEXUS_PASSзаданы в CI/CD Settings. - Запустите пайплайн вручную через GitLab UI или API.
- Выберите нужные параметры (например, отключите
LOAD_DATA, если нужны только схемы). - Пайплайн проинициализирует БД на указанном хосте.
Пример использования
# Запуск через 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.