Конфигурация включенных регионов в 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"]]])

Это еще не поддерживается, поскольку эта проблема подразумевает.

Другие вопросы по тегам