如何通过Groovy配置Jenkins多分支任务定时触发?触发器未生效求助
解决Jenkins多分支流水线每40分钟触发一次的问题
你的问题出在使用了普通的TimerTrigger,而Jenkins多分支流水线属于文件夹类型项目,需要使用专门的PeriodicFolderTrigger来配置定期扫描分支并触发构建。以下是修正后的Groovy脚本:
import com.cloudbees.hudson.plugins.folder.* import com.cloudbees.hudson.plugins.folder.computed.DefaultOrphanedItemStrategy import com.cloudbees.jenkins.plugins.bitbucket.* import jenkins.branch.* import jenkins.scm.impl.trait.* import org.jenkinsci.plugins.workflow.multibranch.* import jenkins.* import jenkins.model.* import hudson.* import hudson.model.* def jobName = "PipelineBuild" def bitbucketUrl = "https://bitbucket.com" def credentialIdForBitbucket = "12346790" def repositoryName = "ApplicationRepo" def projectOwner = "Loop" def cronExpression = "H/40 * * * *" // 每40分钟执行一次 def multibranch = Jenkins.instance.getItemByFullName(jobName, WorkflowMultiBranchProject) if (!multibranch) { multibranch = Jenkins.instance.createProject(WorkflowMultiBranchProject, jobName) } def branch = new BitbucketSCMSource(projectOwner, repositoryName) branch.credentialsId = credentialIdForBitbucket branch.serverUrl = bitbucketUrl branch.traits = [ new BranchDiscoveryTrait(3), // 扫描所有分支 ] multibranch.getProjectFactory().setScriptPath("ServerApiJenkinsBuild") branchsource = new BranchSource(branch) multibranch.setSourcesList([branchsource]) multibranch.setDescription("") multibranch.setDisplayName(jobName) multibranch.setOrphanedItemStrategy(new DefaultOrphanedItemStrategy(true, "30", "30")) // 移除已存在的同类型触发器,避免重复添加 multibranch.getTriggers().each { trigger -> if (trigger instanceof PeriodicFolderTrigger) { multibranch.removeTrigger(trigger.getClass()) } } // 添加多分支项目专用的周期扫描触发器 def periodicTrigger = new PeriodicFolderTrigger(cronExpression) // 开启扫描后自动触发分支构建 periodicTrigger.setTriggerBuilds(true) multibranch.addTrigger(periodicTrigger) multibranch.save() Jenkins.instance.reload() Thread.start { sleep 3000 // 等待3秒后触发一次初始扫描 multibranch.scheduleBuild() }
关键修正说明:
- 替换
TimerTrigger为PeriodicFolderTrigger:这是Jenkins文件夹/多分支项目专属的周期触发器,负责定期扫描分支变更并触发对应构建。 - 启用
setTriggerBuilds(true):确保扫描分支后自动触发构建,而不只是更新分支列表。 - 清理旧触发器:避免多次执行脚本后添加重复触发器导致异常。
验证步骤:
- 执行脚本后进入多分支流水线配置页,查看「Scan Multibranch Pipeline Triggers」模块,确认已配置
H/40 * * * *的定时规则。 - 可手动触发一次扫描,或等待40分钟,确认分支项目会自动执行构建。
内容的提问来源于stack exchange,提问作者Leroi
相关产品推荐
相关产品推荐

