如果使用Jenkinsfile
更改特定子目录中的文件,我怎样才能将Jenkins管道项目的范围限制为仅构建?
我有一个包含两个目录的Git存储库。每个目录都包含一个单独的子项目,我想使用Jenkinsfile
由Jenkins分别构建每个子项目。该项目具有以下文件结构:
parent
|
+- subA
| |
| + Jenkinsfile
| + more files related to sub project A
|
+- subB
|
+ Jenkinsfile
+ more files related to sub project B
Jenkinsfile
的{{1}}具有以下配置:
subA
checkout scm: [
$class: 'GitSCM',
branches: [[name: '*/master']],
userRemoteConfigs: [[url: 'https://[path]/parent.git']],
extensions: [[
$class: 'PathRestriction', includedRegions: 'subA/.*'
]]
]
的{{1}}类似,唯一的区别是它已将Jenkinsfile
指定为subB
。
在Jenkins服务器中,我创建了两个管道项目,并分别将它们指向每个subB
。如果在文件夹includedRegions
中更改了文件,则会触发Jenkins管道项目A,如果在文件夹Jenkinsfile
中更改了文件,则会触发Jenkins管道项目B,这是我所期望的。
问题是如果在subA
中更改了文件,则会触发Jenkins管道项目A,反之亦然。
Jenkins版本:2.3
注意:
配置设置subB
- > subB
- >旧Jenkins(版本1.649)GUI中分别Additional Behaviours
到Polling ignores commits in certain paths
或Included Regions
会产生预期的行为。
更新
将subA/.*
添加到Jenkins文件中,例如
subB/.*
不会改变行为。尽管只在一个子目录中更改了文件,但两个子项目仍在重建。
答案 0 :(得分:2)
这不支持,因为this issue暗示。
答案 1 :(得分:0)
存在一个无法正常使用的问题: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"]]])