我正试图在Jenkins的Multibranch Pipelines作业中自动触发'Branch Indexing' .
目前,只有一种方法似乎实际工作,即轮询,但我无法做到这一点,无论如何轮询是一个糟糕的解决方案 .
该插件不支持“远程触发器构建(例如,从脚本)”(不保存选项),因此我无法通过推送等Web挂钩触发它 .
我尝试在repo上创建一个“触发器”自由式构建,但是“构建后操作 - 构建其他项目”声称Multibranch Pipeline项目不是可构建的项目 .
如果轮询是我能做到这一点的唯一方法,那么我需要禁用自动SCM触发(否则我们在重新索引时会得到重复的构建)因为我需要在分支项目上启用web钩子触发 .
但这不起作用,因为我通过分支项目中的管道脚本设置Web挂钩,并且您需要至少构建一次以使该属性已注册 .
我已经在圈子里走了一段时间,所以希望我错过了一些明显的东西,但任何帮助都会受到赞赏 .
我想象能够做到以下之一
-
以某种方式触发多分支项目作为下游项目
-
轮询multibranch项目,只构建以前没有构建的分支项目
干杯
3 回答
可以从groovy脚本调用方法
ComputedFolder.scheduleBuild()
.我刚从一个不同的multibranch管道项目中的groovy代码触发了一个multibranch管道项目中的分支索引,然后触发该项目中的下游构建 .
代码类似于:
请注意
Jenkins.instance.getItemByFullName(downStreamProjectName)
是WorkflowMultiBranchProject
,它不是Serializable
,因此需要注意 .基于@jjc 's answer, I' ve创建了一个使用build步骤的版本也用于触发扫描:
这需要批准以下签名:
method jenkins.model.Jenkins getItemByFullName java.lang.String
staticMethod jenkins.model.Jenkins getInstance
到目前为止最简单的选择(我知道)是远程告诉Jenkins Git插件,它为已定义的存储库提供了新的提交 . 但是,这不会触发詹金斯立即开始工作 . 会发生什么是Git插件启动(重新)索引特定的存储库 . 如果检测到更改,则会启动Jenkins作业 .
从您的存储库(GitHub,GitLab等),您应该触发以下URL:
http://my-jenkins-host/git/notifyCommit?url=git@gitlab.example.com:group/repository.git&delay=0sec
url
的值必须与您在Jenkins作业(Git插件)中配置的SCM URL匹配!问:可能是你的Jenkins在根上下文(
/
)下部署了 not ,在这种情况下,URL将是http://my-jenkins-host/context-path/git/...