我正试图在Jenkins的Multibranch Pipelines作业中自动触发'Branch Indexing'.
目前,只有一种方法似乎实际工作,即轮询,但我无法做到这一点,无论如何轮询是一个糟糕的解决方案.
该插件不支持"远程触发器构建(例如,从脚本)"(选项未保存),因此我无法通过推送等Web挂钩触发它.
我尝试在repo上创建一个"触发器"自由式构建,但是"构建后操作 - 构建其他项目"声称Multibranch Pipeline项目不是可构建的项目.
如果轮询是我能做到这一点的唯一方法,那么我需要禁用自动SCM触发(否则我们在重新索引时会得到重复的构建)因为我需要在分支项目上启用web钩子触发.
但这不起作用,因为我通过分支项目中的管道脚本设置Web挂钩,并且您需要至少构建一次以使该属性已注册.
我已经在圈子里走了一段时间,所以希望我错过了一些明显的东西,但任何帮助都会受到赞赏.
我想象能够做到以下之一
以某种方式触发多分支项目作为下游项目
轮询multibranch项目,只构建以前没有构建的分支项目
干杯
ComputedFolder.scheduleBuild()
可以从groovy脚本调用该方法.
我刚从一个不同的multibranch管道项目中的groovy代码触发了一个multibranch管道项目中的分支索引,然后触发该项目中的下游构建.
代码类似于:
@NonCPS
void scanRepo(String downStreamProjectName) {
Jenkins.instance.getItemByFullName(downStreamProjectName).scheduleBuild()
}
...
String downStreamProject = 'my-folder/my-multibranch-project'
String downStreamJob = "${downStreamProject}/${env.BRANCH_NAME}"
if (Jenkins.instance.getItemByFullName(downStreamJob) == null) {
scanRepo(downStreamProject)
while (Jenkins.instance.getItemByFullName(downStreamJob) == null) {
sleep(1)
}
}
build([job: downStreamJob, wait: false, quietPeriod: 0])
请注意,Jenkins.instance.getItemByFullName(downStreamProjectName)
是WorkflowMultiBranchProject
这不是Serializable
,所以一些护理需要采取.