Ідемпотентне розгортання регламенту

Сторінка технічної документації є баченням майбутньої реалізації, актуальність якого може бути застарілою.

Загальний опис

На етапі розгортання регламенту кроки запускаються лише якщо було внесено зміни в рамках останнього коміту. Таким чином якщо при попередньому запуску пайплайна крок був не успішним, а в поточному коміті зміни не було внесено, то крок буде проігноровано і відмічено як успішний.

Функціональні сценарії

  • Порівняння поточного стану регламенту з станом регламенту при останньому успішному виконанні кроку.

  • Збереження стану регламенту в секрет.

  • Розгортання регламенту з примусовим викликом всіх кроків (FULL_DEPLOY)

Ролі користувачів

  • Моделювальник

Загальні принципи та положення

  • Для визначення чи необхідно виконувати той, чи інший крок, відбувається перевірка поточного стану регламенту з станом регламенту на момент останнього успішного виконання кроку.

  • Перевірка залежних файлів відбувається для кожного кроку окремо і фіксується лише для конкретного кроку, таким чином при обробці файлів які використовуються у декількох кроках не буде хибних записів про успішність опрацювання цих файлів.

  • Чек-суми по кроках зберігаються в секреті як JSON

  • Управління секретом відбувається за допомогою k8s API

Високорівневий дизайн рішення

Розширення застосунку командного рядка registry-regulations-cli двома командами save для підрахунку чек-сум всіх перелічених файлів та збереження значень у секрет k8s і plan для перевірки стану і необхідності запуску кроку розгортання.

Низькорівневий дизайн сервісів

registry-regulations-cli [command] [options]

COMMANDS:
    validate - валідація регламенту на наявність помилок
    plan - перевірка чи необхідні якісь дії для приведення реєстру до стану описаному в регламенті, в рамках окремої бізнес операції.
    save - збереження чек-суми частини регламенту повязаної з бізнес операцією до k8s секрету.
registry-regulations-cli [plan|save] [parameter] [options]

Приймає як параметер, логічна назва складової регламенту.

OPTIONS:
    -f --file - перелік папок і файлів [Обовʼязковий]

Перевірка стану регламенту і необхідності запуску кроку розгортання

Приклад використання на пайплайні розгортання
registry-regulations-cli plan data-model -f registry-regulations/data-model/ registry-regulations/settings.yaml

Вихідним параметром виконання команди є boolean флаг чи відрізняються файли які були використанні при виконанні даного кроку від поточного стану.

Правила коли необхідно повторно виконати крок:

  • В секреті відсутній крок з таким ім’ям

  • Чек-сума для хоча б одного з перелічених файлів відрізняється від чек-суми збереженої в секреті.

  • Інформація про чек-суму файла відсутня у секреті.

Збереження стану регламенту після успішного виконання кроку

Формат виклику команди збереження стану файлів для кроку розгортання регламенту.
registry-regulations-cli save ${group-name} -f %{dir1} %{dir2/subDir1} ${fileName}
Приклад
registry-regulations-cli save  data-model -f registry-regulations/data-model/ registry-regulations/settings.yaml

у разі успішного виконання кроку стан зберігається в секреті registry-regulation-state

Структура збереження стану регламенту в секреті.
{
  "redash-roles": {
    "registry-regulations/roles": "...:SHA256"
  },
  "roles": {
    "registry-regulations/roles": "...:SHA256"
  },
  "data-model": {
    "registry-regulations/data-model": "...:SHA256",
    "registry-regulations/settings.yaml": "...:SHA256"
  },
  "reports": {
    "registry-regulations/reports": "...:SHA256"
  },
  "notifications": {
    "registry-regulations/notifications": "...:SHA256"
  },
  "excerpts": {
    "registry-regulations/excerpts-csv": "...:SHA256",
    "registry-regulations/excerpts-docx": "...:SHA256",
    "registry-regulations/excerpts": "...:SHA256"
  },
  "bp-grouping": {
    "registry-regulations/bp-grouping": "...:SHA256"
  },
  "geoserver-configuration": {
    "registry-regulations/data-model": "...:SHA256"
  },
  "forms": {
    "registry-regulations/forms": "...:SHA256"
  },
  "global-vars": {
    "registry-regulations/global-vars": "...:SHA256"
  },
  "theme": {
    "registry-regulations/global-vars": "...:SHA256"
  },
  "trembita-integrations": {
    "registry-regulations/bp-trembita": "...:SHA256"
  },
  "bpmn-dmn": {
    "registry-regulations/bpmn": "...:SHA256",
    "registry-regulations/dmn": "...:SHA256"
  },
  "bp-auth": {
    "registry-regulations/bp-auth": "...:SHA256"
  },
  "autotests": {
    "registry-regulations/autotests": "...:SHA256"
  },
  "settings": {
    "registry-regulations/settings": "...:SHA256"
  }
}

Для підрахунку чексуми файлів використовується алгоритм SHA256 MessageDigest digest = MessageDigest.getInstance("SHA-256");

Високорівневий план розробки

Технічні експертизи

  • BE

План розробки

  • Перейменування репозиторію застосунку для валідації.

  • Винесення операції для валідації в окрему команду validate.

  • Додавання команди для збереження стану регламенту в секрет registry-regulation-state

  • Додавання команди для перевірки стану регламенту зі збереженим станом.

  • Зміна команд валідації регламенту.

  • Зміна перевірки на необхідність запускання всіх кроків пайплайну розгортання регламенту.