如何仅使用Jenkinsfile
更改特定子目录中的文件时才能限制Jenkins管道项目的范围?
我有一个带有两个目录的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,这是我所期望的。问题在于,如果在
subB
中更改了文件,也会触发Jenkins管道项目A,反之亦然。詹金斯版本:2.3
注意:
在旧的Jenkins(版本1.649)GUI中分别将设置
Additional Behaviours
-> Polling ignores commits in certain paths
-> Included Regions
设置为subA/.*
或subB/.*
会导致预期的行为。更新:
将
excludedRegions
添加到Jenkins文件中,例如checkout scm: [
$class: 'GitSCM',
branches: [[name: '*/master']],
userRemoteConfigs: [[url: 'https://[path]/parent.git']],
extensions: [[
$class: 'PathRestriction', excludedRegions: '', includedRegions: 'subA/.*'
]]
]
不会改变行为。尽管仅在一个子目录中更改了文件,但两个子项目仍在重建。
最佳答案
如this issue所示,尚不支持此功能。