我有3个Git分支,master,br2和br3。我有3个詹金斯工作;每个人克隆相同的回购,但检查出不同的分支。我的理解是,在post-receive钩子中使用下面的命令(http://kohsuke.org/2011/12/01/polling-must-die-triggering-jenkins-builds-from-a-git-hook/),它应该触发Jenkins为推进的分支启动作业。
curl http://smfosbuild:8080/git/notifyCommit?url=git@vfilvgit2:scmtest.git
对br2进行了更改并推送,正确的Jenkins作业将启动。但推动对master或br3所做的更改不会导致关联作业启动。
我也有电子邮件触发器处于活动状态,我收到一封电子邮件,指出所有推送指示正确的分支。因此,post-receive挂钩正在获取有关已更改的分支的正确信息。任何想法是我上面的命令是不正确的或我的Jenkins配置中有一些设置我不见了?
答案 0 :(得分: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进行了此操作。
答案 1 :(得分:0)
您是否知道即使您使用Kohsuke博客文章中描述的通知方法,您还需要为该作业配置轮询?轮询间隔可能很长,比如“@daily”,但它需要存在,因为通知仅用于触发立即轮询。
此外,您的工作需要使用git存储库“git @ vfilvgit2:scmtest.git”。请仔细检查您是否使用ssh://git@vfilvgit2/scmtest.git。