如何将 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
for具有以下subA
配置:
checkout scm: [
$class: 'GitSCM',
branches: [[name: '*/master']],
userRemoteConfigs: [[url: 'https://[path]/parent.git']],
extensions: [[
$class: 'PathRestriction', includedRegions: 'subA/.*'
]]
]
Jenkinsfile
for类似,唯一的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/.*
分别在旧 Jenkins(版本 1.649)GUI 中会导致预期的行为。
更新:
添加excludedRegions
到 Jenkinsfiles,例如
checkout scm: [
$class: 'GitSCM',
branches: [[name: '*/master']],
userRemoteConfigs: [[url: 'https://[path]/parent.git']],
extensions: [[
$class: 'PathRestriction', excludedRegions: '', includedRegions: 'subA/.*'
]]
]
不会改变行为。尽管文件仅在一个子目录中更改,但仍会重建两个子项目。