Конфигурация включенных регионов в Jenkinsfile?
Как я могу ограничить область построения проекта конвейера Jenkins, только если файл в определенном подкаталоге был изменен с помощью Jenkinsfile
?
У меня есть один репозиторий Git с двумя каталогами. Каждый каталог содержит отдельный подпроект, и я хотел бы построить каждый подпроект отдельно с помощью Jenkins, используя Jenkinsfile
, Проект имеет следующую файловую структуру:
parent
|
+- subA
| |
| + Jenkinsfile
| + more files related to sub project A
|
+- subB
|
+ Jenkinsfile
+ more files related to sub project B
Jenkinsfile
за subA
имеет следующую конфигурацию:
checkout scm: [
$class: 'GitSCM',
branches: [[name: '*/master']],
userRemoteConfigs: [[url: 'https://[path]/parent.git']],
extensions: [[
$class: 'PathRestriction', includedRegions: 'subA/.*'
]]
]
Jenkinsfile
за subB
похоже, единственное отличие состоит в том, что он указал subB
как includedRegions
,
На сервере Jenkins я создал два конвейерных проекта и указал их каждому Jenkinsfile
соответственно. Если файл изменен в папке subA
Проект Jenkins, конвейер A запускается, и если файл изменяется в папке subB
, Запущен проект трубопровода Jenkins B, чего я и ожидаю.
Проблема заключается в том, что конвейерный проект Jenkins A также запускается, если файл изменяется в subB
и наоборот.
Дженкинс версия: 2.3
Примечание: настройка параметров Additional Behaviours
-> Polling ignores commits in certain paths
-> Included Regions
в subA/.*
или же subB/.*
соответственно в старом Дженкинсе (версия 1.649) графический интерфейс приводит к ожидаемому поведению.
Обновить:
Добавление excludedRegions
к Jenkinsfiles, например
checkout scm: [
$class: 'GitSCM',
branches: [[name: '*/master']],
userRemoteConfigs: [[url: 'https://[path]/parent.git']],
extensions: [[
$class: 'PathRestriction', excludedRegions: '', includedRegions: 'subA/.*'
]]
]
не меняет поведение. Оба подпроекта все еще перестраиваются, несмотря на то, что файлы изменяются только в одном подкаталоге.
1 ответ
Существует открытая проблема, препятствующая нормальной работе: https://issues.jenkins-ci.org/browse/JENKINS-36195
У него есть обходной путь, который заключается в отключении удаленного опроса ([$class: 'DisableRemotePoll']):
checkout([$class: 'GitSCM',
branches: [[name: "*/master"]],
extensions: [
[$class: 'PathRestriction', excludedRegions: '', includedRegions: '<fill me in with regex \n delimited, leave excludedRegions as empty>'],
[$class: 'DisableRemotePoll']
],
submoduleCfg: [],
userRemoteConfigs: [[url: "<my git url>", credentialsId: "$GIT_KEY"]]])
Это еще не поддерживается, поскольку эта проблема подразумевает.