2013-10-10 50 views
3

有没有一种方法可以在单个存储库中指定一个钩子,现在我们已经在“/ etc/mercurial/hgrc”文件中指定了钩子,但每次构建两次,用于每个存储库中的每个提交。让jenkins从mercurial commit构建项目

所以我们想要指定每个回购的构建。

这就是我们如何实现钩子:

[hooks] 
changegroup = curl --silent http://jenkins:8080/job/ourProject/build 

它是一个Ubuntu的服务器上。

+0

如果你有很多的项目,更简单的方法可能是使用Web界面的社区版(RhodeCode),允许更好的詹金斯管理 请看到这里:http:// stackoverflow。com/questions/41035844/build-jenkins-commit-to-repository – marcinkuzminski

回答

5

1.select构建触发器下的Poll SCM选项。 2.确保时间表格式为空。

你应该创造.hg目录,/home/user/mercurial/.hg/hgrc并添加钩子

[hooks] 
commit.jenkins = wget -q http://localhost:8080/mercurial/notifyCommit?url=file:///home/user/mercurial > /dev/null 
incoming.jenkins = wget -q http://localhost:8080/mercurial/notifyCommit?url=file:///home/user/mercurial > /dev/null 
+1

第一步(勾选民意调查SCM)对我造成了很大的影响!谢谢。 – Jason

+0

正如@Jason所说,我也不得不剔选民意调查委员会来让这个工作。我也必须删除任何时间表,否则它不会立即触发。 – Luke

0

好吧,我创办了我找了(我的恩惠,我的情况是善变与特定的分支)。

在main/origin存储库中,放置一个包含所需构建脚本的挂钩。 Pregroupchange将维护传入的更改。我在主存储库上安装了一个rhodecode,本身也有它自己的钩子。通过这种方式,我仍然触发了Jnekins,并且仍然具有对rhodecode推送通知和其他触发器的更改。

[hooks] 
pregroupchange = /path/to/script.extention 

在脚本中,放置您想要的动作,也是詹金斯的触发器。不要忘记启用Jenkins:Job:Configure:Build Triggers:checkbox触发器远程构建+放在这里你的desired_token。 (对于我的情况:mercurial)因为你不能在mercurial中只触发一个特定的分支,所以我以这种方式找到了分支名称。另外,要从远程脚本触发,您需要在Jenkins中为匿名读取权限,或者使用凭据创建特定用户并将其放入触发器URL中。

bash的例子:

#!/bin/bash 
BRANCH_NAME=`hg tip --template "{branch}"` 
if [ $BRANCH_NAME = "branch_name" ]; then 
    curl --silent http://jenkins_domain:port/path/to/job?token=desired_token 
fi 

对于原题:

这样,你只能执行一个构建,对于一个想要的分支。如果您使用多个克隆,多个开发人员工作,钩子仅适用于主存储库。你可能有你的本地钩子,但是不要从本地触发Jenkins,对于每个开发者,当推送到来时(commit,incoming,groupchange),只从主仓库触发Jenkins。您当地的挂钩用于其他事情,如电子邮件,日志,配置等