9.2 KiB
How To Add Debug Settings
Что это дает
Этот механизм позволяет подложить свои файлы настроек в Jenkins workspace для MR-пайплайна, не меняя прикладной репозиторий.
Поддерживаемые файлы:
jobConfiguration.jsonsonar-project.propertiestools/vrunner.jsontools/VAParams.json
Что нужно подготовить в Jenkins
1. Проверить plugin
Убедиться, что в Jenkins установлен plugin Config File Provider.
Если plugin не установлен:
- механизм подмен не сработает;
- пайплайн продолжит работу по старому сценарию.
2. Создать control JSON
В Jenkins нужно создать managed file с fileId:
jenkins-debug-overrides-control
Рекомендуемый тип файла при создании:
Json file
В этом файле хранится карта профилей и список подмен.
Допустимо также использовать Custom file, но для JSON удобнее Json file, потому что в Jenkins он лучше читается визуально.
Пример содержимого:
{
"profiles": {
"ci_uh_MR": {
"enabled": true,
"description": "Отладочные подмены для MR пайплайнов УХ",
"replacements": [
{
"fileId": "debug-ci-uh-mr-jobConfiguration",
"target": "jobConfiguration.json"
},
{
"fileId": "debug-ci-uh-mr-sonar-properties",
"target": "sonar-project.properties"
},
{
"fileId": "debug-ci-uh-mr-vrunner",
"target": "tools/vrunner.json"
},
{
"fileId": "debug-ci-uh-mr-vaparams",
"target": "tools/VAParams.json"
}
]
}
}
}
Как добавить свою настройку
Вариант 1. Изменить существующий профиль
Если вы работаете в уже существующем Jenkins folder, например ci_uh_MR, то:
- Откройте managed file
jenkins-debug-overrides-control. - Найдите профиль:
"ci_uh_MR": {
...
}
- Убедитесь, что:
"enabled": true
- Обновите список
replacements, если нужно добавить или убрать файлы.
Вариант 2. Создать новый профиль под другой folder
Если у вас другой Jenkins folder, добавьте новый ключ в profiles.
Пример:
{
"profiles": {
"ci_uh_MR": {
"enabled": true,
"replacements": [
{
"fileId": "debug-ci-uh-mr-jobConfiguration",
"target": "jobConfiguration.json"
}
]
},
"ci_erp_MR": {
"enabled": true,
"replacements": [
{
"fileId": "debug-ci-erp-mr-jobConfiguration",
"target": "jobConfiguration.json"
}
]
}
}
}
Ключ профиля должен совпадать с предпоследним сегментом JOB_NAME.
Пример:
CPC/ci_uh_MR/MR-1101-> профильci_uh_MRCPC/ci_erp_MR/MR-42-> профильci_erp_MR
Как создать свои файлы подмены
Для каждого файла из replacements нужно создать отдельный managed file в Jenkins.
Пример набора для ci_uh_MR:
debug-ci-uh-mr-jobConfigurationdebug-ci-uh-mr-sonar-propertiesdebug-ci-uh-mr-vrunnerdebug-ci-uh-mr-vaparams
Содержимое:
debug-ci-uh-mr-jobConfiguration-> вашjobConfiguration.jsondebug-ci-uh-mr-sonar-properties-> вашsonar-project.propertiesdebug-ci-uh-mr-vrunner-> вашtools/vrunner.jsondebug-ci-uh-mr-vaparams-> вашtools/VAParams.json
При создании каждого managed file:
IDдолжен точно совпадать со значениемfileIdиз control JSON;Nameможно оставить таким же, какID;Contentдолжно содержать полный текст соответствующего файла;- тип файла лучше выбирать по содержимому:
- для
debug-ci-uh-mr-jobConfiguration->Json file - для
debug-ci-uh-mr-sonar-properties->Properties file - для
debug-ci-uh-mr-vrunner->Json file - для
debug-ci-uh-mr-vaparams->Json file
- для
- при желании все эти файлы можно хранить и как
Custom file, механизм библиотеки от этого не меняется.
Как временно отключить свою настройку
Самый простой способ:
"enabled": false
Тогда профиль останется в control JSON, но подмены применяться не будут.
Что происходит во время сборки
- В
pre-stageбиблиотека определяет профиль поJOB_NAME. - Загружает
jenkins-debug-overrides-control. - Если профиль найден и включен, раскладывает файлы в workspace.
jobConfiguration.jsonиспользуется сразу.- Остальные файлы сохраняются в
stash. - На нужных downstream agents файлы восстанавливаются через
unstash.
Как проверить, что подмена сработала
В логах сборки должны появиться сообщения вида:
Debug overrides: resolved profile key = ci_uh_MR
Debug overrides: applying 4 replacement(s)
Debug overrides: wrote jobConfiguration.json from managed file debug-ci-uh-mr-jobConfiguration
Debug overrides: stashed files for downstream agents
Debug overrides: restored files from stash
Если профиль не применился, в логах будет одно из сообщений:
Debug overrides: profile <name> not found, skip
Debug overrides: profile <name> is disabled, skip
Debug overrides: control file is unavailable, skip
Debug overrides: Config File Provider plugin is unavailable, skip
Что искать в логах Jenkins
Если профиль найден и подмена реально произошла, ищите такие строки:
Debug overrides: resolved profile key = ci_uh_MR
Debug overrides: applying 4 replacement(s)
Debug overrides: wrote jobConfiguration.json from managed file debug-ci-uh-mr-jobConfiguration
Debug overrides: wrote sonar-project.properties from managed file debug-ci-uh-mr-sonar-properties
Debug overrides: wrote tools/vrunner.json from managed file debug-ci-uh-mr-vrunner
Debug overrides: wrote tools/VAParams.json from managed file debug-ci-uh-mr-vaparams
Debug overrides: stashed files for downstream agents
Если потом на другом Jenkins agent файлы были успешно восстановлены, будет строка:
Debug overrides: restored files from stash
Если подмена не была применена, в логах будет один из вариантов:
Debug overrides: profile ci_uh_MR not found, skip
Debug overrides: profile ci_uh_MR is disabled, skip
Debug overrides: control file is unavailable, skip
Debug overrides: Config File Provider plugin is unavailable, skip
Debug overrides: downstream stash is absent, skip restore
Содержимое самих файлов в лог не выводится. В логе виден только:
- найденный профиль;
- факт подмены;
fileId, из которого был взят файл;- факт восстановления файлов на downstream stages.
На что обратить внимание
fileIdв control JSON должен точно совпадать сfileIdmanaged file в Jenkins.targetдолжен быть относительным путем внутри workspace.- Абсолютные пути и
..вtargetне поддерживаются. - Если в профиле нет downstream-файлов, stash не создается.
- Повторный запуск build просто перезапишет подложенные файлы, это штатно.
Минимальный пример для быстрого старта
Если хотите проверить только подмену jobConfiguration.json, достаточно:
- Создать managed file:
debug-ci-uh-mr-jobConfiguration
- Указать его в control JSON:
{
"profiles": {
"ci_uh_MR": {
"enabled": true,
"replacements": [
{
"fileId": "debug-ci-uh-mr-jobConfiguration",
"target": "jobConfiguration.json"
}
]
}
}
}
После этого пайплайн начнет читать ваш jobConfiguration.json из Jenkins, а не из репозитория.