Ідемпотентне розгортання регламенту
Сторінка технічної документації є баченням майбутньої реалізації, актуальність якого може бути застарілою. |
Загальний опис
На етапі розгортання регламенту кроки запускаються лише якщо було внесено зміни в рамках останнього коміту. Таким чином якщо при попередньому запуску пайплайна крок був не успішним, а в поточному коміті зміни не було внесено, то крок буде проігноровано і відмічено як успішний.
Функціональні сценарії
-
Порівняння поточного стану регламенту з станом регламенту при останньому успішному виконанні кроку.
-
Збереження стану регламенту в секрет.
-
Розгортання регламенту з примусовим викликом всіх кроків (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");
Високорівневий план розробки
План розробки
-
Перейменування репозиторію застосунку для валідації.
-
Винесення операції для валідації в окрему команду validate.
-
Додавання команди для збереження стану регламенту в секрет
registry-regulation-state
-
Додавання команди для перевірки стану регламенту зі збереженим станом.
-
Зміна команд валідації регламенту.
-
Зміна перевірки на необхідність запускання всіх кроків пайплайну розгортання регламенту.