Миграция базы данных и откат#
В рамках программного компонента реализована автоматическая миграция БД при запуске пода, но откатить такую миграцию невозможно. В рамках функциональности CDJE доступны плейбуки DB_UPDATE (миграция) и DB_ROLLBACK (отказ миграции). Начиная с версии программного компонента версии SEI-MAIL-4.11 (SP-01.025.00) эта функциональность поддерживается.
Подробнее о функциональности миграции и отката см. в документации CDJE.
Настройка CDJE#
Добавить в common репозиторий в файл environment.json
"{stand}": {
"playbooks_fpi": {
"DB_UPDATE": {
"id": порядковый_номер_плейбука,
"description": "Запуск liquibase скриптов"
},
"DB_ROLLBACK": {
"id": порядковый_номер_плейбука,
"description": "Запуск liquibase скриптов отката"
},
},
"toolingAnsibleTemplateVersion": "ansible-core2.9.14",
"toolingAnsibleForceVersion": "ansible-core2.9.14",
"yqToolName": "yq-4.20",
"kubectlToolName": "_kubectl_v1.22_"
}
Указанные версии toolingAnsibleTemplateVersion, toolingAnsibleForceVersion, yqToolName, kubectlToolName могут быть не установлены в Jenkins, в таком случае необходимо выбрать ближайшие в Jenkins Pipeline Syntax (tool -> Custom tool). Указанные версии рекомендованы командой CDJE как стабильные для целей миграции и отката.
После добавления указанных параметров необходимо запустить автореконфигурацию CDJE (запуск без параметров).
Настройка common репозитория#
Для запуска миграции и отката необходимо в common репозиторий в файл ansible/common.conf.yml добавить следующие параметры:
# -------------------------------------------------------------------------------------------------
## База данных SEI MAIL
## -------------------------------------------------------------------------------------------------
MAIL_POSTGRES_HOST: "хост_базы_данных"
MAIL_POSTGRES_LIQUIBASE_PORT: "порт_базы_данных_для_роли_as_admin"
MAIL_POSTGRES_DATABASE_NAME: "имя_базы_данных"
MAIL_POSTGRES_JDBC_URL: "jdbc:postgresql://{{ MAIL_POSTGRES_HOST }}:{{ MAIL_POSTGRES_LIQUIBASE_PORT }}/{{ MAIL_POSTGRES_DATABASE_NAME }}"
MAIL_POSTGRES_MAIL_DB_SCHEMA_NAME: "название_схемы_для_сервиса_mail-db"
MAIL_POSTGRES_MAIL_AUDIT_SCHEMA_NAME: "название_схемы_для_сервиса_mail-audit-adapter"
MAIL_POSTGRES_MAIL_SUDIR_SCHEMA_NAME: "название_схемы_для_сервиса_mail-sudir-adapter"
MAIL_POSTGRES_OWNER: "название_роли_с_правами_на_DDL (as_admin)"
MAIL_POSTGRES_RUNNER: "название_роли_с_правами_на_DML (as_TUZ)"
database_change_log_custom: "DATABASECHANGELOG"
database_change_log_lock_custom: "DATABASECHANGELOGLOCK"
Настройка ssl#
Для подключения к серверу PostgreSQL могут потребоваться сертификаты (в зависимости от настроек сервера в файле pg_hba.conf).
Для применения сертификатов необходимо добавить в common репозиторий в файл ansible/common.conf.yml в строку MAIL_POSTGRES_JDBC_URL параметр ssl=true, например MAIL_POSTGRES_JDBC_URL: «jdbc:postgresql://:/?ssl=true.
А также добавить в common репозиторий сам jks файл с сертификатами (например, в ansible/files/ssl/jdbc.jks), а также параметры в файл installer/system/efs/config/parameters/ssl.conf:
ssl.jdbc.keyStorePassword=пароль_JKS
ssl.jdbc.keyPassword=пароль_ключа_JKS
ssl.jdbc.trustStorePassword=пароль_JKS
ssl.jdbc.KeyStoreFromFile=путь_к_JKS_файлу (например, ansible/files/ssl/jdbc.jks)
ssl.jdbc.TrustStoreFromFile=путь_к_JKS_файлу (например, ansible/files/ssl/jdbc.jks)
Запуск миграции БД#
В CDJE Jenkins выбрать плейбук DB_UPDATE. В результате выполнения будет произведена миграция на актуальную версию программного компонента, будут созданы в БД объекты PostgreSQL, соответствующие мигрируемой версии программного компонента.
При этом перед миграцией будет создана в технических таблицах liquibase DATABASECHANGELOG метка (tag) с номером версии программного компонента, которая может быть использована для последующего отката (rollback).
Запуск отката миграции БД#
Для того, чтобы можно быть использовать откат миграции через CDJE, необходимо запускать миграцию только через плейбук CDJE DB_UPDATE (при этом создаются необходимые метки для запуска отката).
В CDJE Jenkins выбрать плейбук DB_ROLLBACK. В результате выполнения будет произведен откат миграции на ближайшую метку (tag), указанную в таблице liquibase DATABASECHANGELOG.