求助:无法为Multibranch Pipeline Job创建pollSCM触发器
错误原因
Multibranch Pipeline Job的Job DSL触发器上下文(MultibranchWorkflowTriggerContext)不支持直接调用pollSCM()方法——该方法仅适用于普通Pipeline或自由风格任务。多分支任务的SCM轮询需要使用适配的配置方式。
解决方案
方案1:使用Job DSL内置的periodicFolderTrigger
Multibranch任务本质属于Folder类型,Job DSL提供了periodicFolderTrigger来配置轮询逻辑,替换原有错误的triggers块即可:
#!/usr/bin/env groovy multibranchPipelineJob('mb-build') { displayName('Multi Branch Build') orphanedItemStrategy { discardOldItems { daysToKeep(1) numToKeep(1) } } // 替换原pollSCM配置,用periodicFolderTrigger实现SCM轮询 triggers { periodicFolderTrigger('H/2 * * * *') { triggers(['SCMTrigger']) } } factory { workflowBranchProjectFactory { scriptPath('Jenkinsfile') } } branchSources { branchSource { source { git { id('some-id') remote('https://github.com/org/repo') credentialsId('my-cred-here') } } } } configure { def traitsBlock = it / sources / data / 'jenkins.branch.BranchSource' / source / traits traitsBlock << 'jenkins.plugins.git.traits.BranchDiscoveryTrait' {} } }
方案2:通过configure块手动添加SCM触发器
如果需要自定义触发器的更多参数,可以直接通过configure块底层注入SCM触发器,删除原有的triggers块后修改配置:
#!/usr/bin/env groovy multibranchPipelineJob('mb-build') { displayName('Multi Branch Build') orphanedItemStrategy { discardOldItems { daysToKeep(1) numToKeep(1) } } factory { workflowBranchProjectFactory { scriptPath('Jenkinsfile') } } branchSources { branchSource { source { git { id('some-id') remote('https://github.com/org/repo') credentialsId('my-cred-here') } } } } configure { node -> // 手动添加SCM轮询触发器 node / triggers << 'hudson.triggers.SCMTrigger' { spec('H/2 * * * *') ignorePostCommitHooks(false) } // 保留原分支发现特性配置 def traitsBlock = node / sources / data / 'jenkins.branch.BranchSource' / source / traits traitsBlock << 'jenkins.plugins.git.traits.BranchDiscoveryTrait' {} } }
内容的提问来源于stack exchange,提问作者Sachin Sheelavant
相关产品推荐
相关产品推荐

