Миграция базы данных и откат#

В рамках программного компонента реализована автоматическая миграция БД при запуске пода, но откатить такую миграцию невозможно. В рамках функциональности 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.