3

我有 3 个 Git 分支,master、br2 和 br3。我有 3 个 Jenkins 工作;每个人都克隆相同的 repo,但签出不同的分支。我的理解是,在 post-receive 钩子中使用以下命令(http://kohsuke.org/2011/12/01/polling-must-die-triggering-jenkins-builds-from-a-git-hook/ )它应该触发 Jenkins 为完成推送的分支启动工作。

卷曲http://smfosbuild:8080/git/notifyCommit?url=git@vfilvgit2:scmtest.git

在 br2 上进行更改并推送,正确的 Jenkins 作业将开始。但是推动对 master 或 br3 所做的更改不会导致关联作业启动。

我还激活了电子邮件触发器,并且我收到了所有推送的电子邮件,指示正确的分支。因此,接收后挂钩正在获取有关已更改分支的正确信息。有什么想法是我上面的命令不正确,还是我的 Jenkins 配置中缺少某些设置?

4

2 回答 2

1

好吧,为了调查这个问题,我必须查看您的 GIT 和 Jenkins 安装。但与此同时,我可以建议一条更简单的道路:

在项目配置中,您可以将任何构建设置为通过常规 HTTP 调用远程触发(作业 ->配置->构建触发器->远程触发构建(例如,从脚本))。这不会验证任何存储库信息,而是无论如何都执行构建。这实际上很有帮助,因为您描述的方法也给我们带来了很多麻烦。所以,把这个放在post-receive钩子里,我们只是像这样调用带有作业名称的 URL:

JENKINS_URL/job/Our$20Project%20-%20${BRANCH_NAME}/build?token=TOKEN_NAME

显然,分支名称是分支的名称。

后来,当我接手该构建时,我进行了更改,只对所有分支使用一个项目,并将分支名称作为参数传递。分支被添加到构建名称中(我们不再使用数字)并且它更容易和更灵活的解决方案。但它并不适合所有人。

如果你愿意,我可以为你提供一个源代码post-receive,但是它真的很容易编写——我们是基于Git 源中可用的post-receive-email制作的。

于 2012-05-10T22:30:26.163 回答
0

您是否知道,即使您使用 Kohsuke 博客文章中描述的通知方法,您也需要为该作业配置轮询?轮询间隔可以很长,例如“@daily”,但它必须存在,因为通知仅用于触发立即轮询。

此外,您的工作需要使用 git 存储库“git@vfilvgit2:scmtest.git”。请仔细检查您没有使用 ssh://git@vfilvgit2/scmtest.git。

于 2012-05-12T18:51:52.043 回答