Jenkins DSL脚本suppressFolderAutomaticTriggering属性不生效求助
suppressFolderAutomaticTriggering属性不生效,引发构建风暴 我编写了自动在Jenkins创建任务的脚本,按照相关内容提示,调整suppressFolderAutomaticTriggering属性可以阻止构建风暴,但运行脚本后该属性完全没效果。查看内部Job DSL API文档,这个选项确实存在(对应文档截图显示multibranchPipelineJob包含该属性)。现在构建风暴严重影响工作,求解决办法!
我的脚本如下:
def credentialsID = 'xxx' def repoOWNER = 'xxx' def branchDiscoverPatternWithTags = "(PR-\\d.*|qat|master|^v\\d.*)" [ [repo: 'xxx-styleguide'], [repo: 'xxx-phonebook-sync'], [repo: 'xxx-library-dpp'] ].each { Map config -> multibranchPipelineJob("${config.repo}") { description "\n WDDs ${config.repo} project" displayName("${config.repo}".replace('-', ' ')) branchSources { branchSource { source { bitbucket { credentialsId("${credentialsID}") repoOwner("${repoOWNER}") repository("${config.repo}") traits { headRegexFilter { regex("${branchDiscoverPatternWithTags}") } bitbucketTagDiscovery() bitbucketPullRequestDiscovery { strategyId(2) } bitbucketBranchDiscovery { strategyId(3) } } } } } } orphanedItemStrategy { discardOldItems { daysToKeep(1) } } // properties对象未生效,导致'suppressFolderAutomaticTriggering'失效,引发构建风暴 properties { suppressFolderAutomaticTriggering { branches(".*") strategy("INDEXING") } } triggers { bitBucketMultibranchTrigger { } } } }
可行的排查与解决方向
1. 检查Job DSL插件版本兼容性
suppressFolderAutomaticTriggering是较新的属性,确保你的Jenkins Job DSL插件版本和API文档匹配。如果插件版本过低,该属性可能无法被识别。
2. 修正属性嵌套层级
部分场景下,该属性需要嵌套在folderProperties而非顶层properties中,尝试调整脚本结构:
multibranchPipelineJob("${config.repo}") { // ... 其他原有配置 ... folderProperties { suppressFolderAutomaticTriggering { branches(".*") strategy("INDEXING") } } // ... 其他原有配置 ... }
3. 验证策略参数的正确性
部分版本的插件要求使用枚举值而非字符串作为strategy参数,比如Strategy.INDEXING:
suppressFolderAutomaticTriggering { branches(".*") strategy(Strategy.INDEXING) }
如果报错,可能需要先导入对应枚举类,或者查阅文档确认参数的合法类型。
4. 对比手动配置的XML结构
手动在Jenkins UI中配置好suppressFolderAutomaticTriggering,然后查看任务的config.xml,对比Job DSL生成的XML结构差异。如果生成的XML中没有该属性节点,说明脚本写法有误;如果有节点但不生效,可能是Jenkins或插件的bug。
5. 排查触发器与属性的冲突
你配置了bitBucketMultibranchTrigger,该触发器可能会自动触发构建,与suppressFolderAutomaticTriggering的规则冲突。可以暂时禁用触发器测试属性是否生效,再调整两者的配合规则。
内容的提问来源于stack exchange,提问作者Nobe's

