devops/pipline/init_db/readme.MD

111 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Вот пример **описания пайплайна** (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` и т.д.).
```yaml
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. Пайплайн проинициализирует БД на указанном хосте.
---
### Пример использования
```bash
# Запуск через 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.**
---
```yaml
# .gitlab-ci.yml
#
# === ПАЙПЛАЙН: Инициализация PostgreSQL из Nexus ===
# Полное описание: см. ниже
# ...
```
Или хранить отдельно в `docs/ci-pipeline-init-db.md`.