Add pipline/init_db.yml
This commit is contained in:
parent
84de9763fe
commit
0b1feee9a0
146
pipline/init_db.yml
Normal file
146
pipline/init_db.yml
Normal file
@ -0,0 +1,146 @@
|
||||
image: postgres:16-alpine
|
||||
workflow:
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "push"
|
||||
when: never
|
||||
- when: always
|
||||
|
||||
|
||||
variables:
|
||||
GIT_CLEAN_FLAGS: -ffdx
|
||||
|
||||
POSTGRES_HOST:
|
||||
value: ""
|
||||
description: 'postgresql remote host'
|
||||
POSTGRES_PORT:
|
||||
value: "5432"
|
||||
description: 'port for postgresql remote host'
|
||||
POSTGRES_DB:
|
||||
value: "db for restore"
|
||||
description: '11'
|
||||
POSTGRES_USER:
|
||||
value: ""
|
||||
description: 'user for postgresql remote host'
|
||||
POSTGRES_PASSWORD:
|
||||
value: ""
|
||||
description: 'passwd for postgresql user remote host'
|
||||
|
||||
|
||||
# URL дампов в Nexus
|
||||
SCHEMA_SQL_URL:
|
||||
value: ""
|
||||
description: 'https://nexus.example.com/repository/raw/db/schema.sql'
|
||||
DATA_DUMP_TAR_GZ_URL:
|
||||
value: ""
|
||||
description: 'https://nexus.example.com/repository/raw/db/data.tar.gz'
|
||||
|
||||
# Локальные пути
|
||||
SCHEMA_SQL_PATH: "/tmp/schema.sql"
|
||||
DATA_DUMP_TAR_GZ_PATH: "/tmp/data.tar.gz"
|
||||
DATA_DUMP_DIR: "/tmp/dump_data"
|
||||
|
||||
|
||||
.create_dump_dir:
|
||||
script:
|
||||
- mkdir -p "$DATA_DUMP_DIR"
|
||||
|
||||
.download_schema:
|
||||
script:
|
||||
- |
|
||||
echo "Скачивание схемы: $SCHEMA_SQL_URL"
|
||||
curl -f -u $NEXUS_USER:$NEXUS_PASSWORD -o "$SCHEMA_SQL_PATH" "$SCHEMA_SQL_URL"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Ошибк при скачивании схемы"
|
||||
exit 1
|
||||
fi
|
||||
echo "Схема успешно загружена: $SCHEMA_SQL_PATH"
|
||||
|
||||
.download_
|
||||
script:
|
||||
- |
|
||||
echo "Скачиывание дампа данных: $DATA_DUMP_TAR_GZ_URL"
|
||||
curl -f -u $NEXUS_USER:$NEXUS_PASSWORD -o "$DATA_DUMP_TAR_GZ_PATH" "$DATA_DUMP_TAR_GZ_URL"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Ошибка при скачивании дампа данных"
|
||||
exit 1
|
||||
fi
|
||||
echo "Дамп данных успешно загружен: $DATA_DUMP_TAR_GZ_PATH"
|
||||
|
||||
.wait_for_postgres:
|
||||
script:
|
||||
- |
|
||||
echo "Ожидание готовности PostgreSQL ($POSTGRES_HOST:$POSTGRES_PORT)..."
|
||||
for i in {1..30}; do
|
||||
if pg_isready -h "$POSTGRES_HOST" -p "$POSTGRES_PORT" -U "$POSTGRES_USER"; then
|
||||
echo "PostgreSQL доступен."
|
||||
break
|
||||
fi
|
||||
echo "PostgreSQL не готов, ожидание... ($i/30)"
|
||||
sleep 5
|
||||
done
|
||||
if [ $i -eq 30 ]; then
|
||||
echo "PostgreSQL не стал доступен за отведённое время."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
.create_database:
|
||||
script:
|
||||
- |
|
||||
echo "Создание базы данных $POSTGRES_DB, если не существует..."
|
||||
PGPASSWORD=$POSTGRES_PASSWORD psql -h "$POSTGRES_HOST" -p "$POSTGRES_PORT" -U "$POSTGRES_USER" \
|
||||
-c "CREATE DATABASE \"$POSTGRES_DB\";" || echo "База данных $POSTGRES_DB уже существует."
|
||||
|
||||
.apply_schema:
|
||||
script:
|
||||
- |
|
||||
echo "Применение схемы из $SCHEMA_SQL_PATH..."
|
||||
PGPASSWORD=$POSTGRES_PASSWORD psql -h "$POSTGRES_HOST" -p "$POSTGRES_PORT" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -f "$SCHEMA_SQL_PATH"
|
||||
echo "Схема успешно применена."
|
||||
|
||||
.restore_
|
||||
script:
|
||||
- |
|
||||
echo "Распаковка архива $DATA_DUMP_TAR_GZ_PATH в $DATA_DUMP_DIR..."
|
||||
tar -xzf "$DATA_DUMP_TAR_GZ_PATH" -C "$DATA_DUMP_DIR"
|
||||
DUMP_FILE=$(find "$DATA_DUMP_DIR" -type f -name "*.dump" -o -name "backup" | head -n1)
|
||||
if [ ! -f "$DUMP_FILE" ]; then
|
||||
echo "Не найден файл дампа после распаковки."
|
||||
exit 1
|
||||
fi
|
||||
echo "Найден дамп: $DUMP_FILE"
|
||||
|
||||
echo "Восстановление данных из $DUMP_FILE в БД $POSTGRES_DB..."
|
||||
pg_restore -h "$POSTGRES_HOST" -p "$POSTGRES_PORT" -U "$POSTGRES_USER" -d "$POSTGRES_DB" -v "$DUMP_FILE"
|
||||
echo "Данные успешно восстановлены."
|
||||
|
||||
# Стадии
|
||||
stages:
|
||||
- init_db
|
||||
|
||||
# Job: Инициализация БД (вручную)
|
||||
init_db:
|
||||
stage: init_db
|
||||
before_script:
|
||||
- export PGPASSWORD=$POSTGRES_PASSWORD
|
||||
- export POSTGRES_HOST=$POSTGRES_HOST
|
||||
- export POSTGRES_PORT=$POSTGRES_PORT
|
||||
- export POSTGRES_USER=$POSTGRES_USER
|
||||
- export POSTGRES_DB=$POSTGRES_DB
|
||||
- export SCHEMA_SQL_URL=$SCHEMA_SQL_URL
|
||||
- export SCHEMA_SQL_PATH=$SCHEMA_SQL_PATH
|
||||
- export DATA_DUMP_TAR_GZ_URL=$DATA_DUMP_TAR_GZ_URL
|
||||
- export DATA_DUMP_TAR_GZ_PATH=$DATA_DUMP_TAR_GZ_PATH
|
||||
- export DATA_DUMP_DIR="/tmp/dump_data"
|
||||
- apk add --no-cache curl tar
|
||||
|
||||
script:
|
||||
- *create_dump_dir
|
||||
- *download_schema
|
||||
- *download_data
|
||||
- *wait_for_postgres
|
||||
- *create_database
|
||||
- *apply_schema
|
||||
- *restore_data
|
||||
|
||||
tags:
|
||||
- init_db
|
||||
Loading…
x
Reference in New Issue
Block a user