有没有一种方法可以在单个存储库中指定一个钩子,现在我们已经在“/ etc/mercurial/hgrc”文件中指定了钩子,但每次构建两次,用于每个存储库中的每个提交。让jenkins从mercurial commit构建项目
所以我们想要指定每个回购的构建。
这就是我们如何实现钩子:
[hooks]
changegroup = curl --silent http://jenkins:8080/job/ourProject/build
它是一个Ubuntu的服务器上。
有没有一种方法可以在单个存储库中指定一个钩子,现在我们已经在“/ etc/mercurial/hgrc”文件中指定了钩子,但每次构建两次,用于每个存储库中的每个提交。让jenkins从mercurial commit构建项目
所以我们想要指定每个回购的构建。
这就是我们如何实现钩子:
[hooks]
changegroup = curl --silent http://jenkins:8080/job/ourProject/build
它是一个Ubuntu的服务器上。
你应该确保
您詹金斯项目不会轮询
你使用正确的notifyCommit网址为您的水银挂钩:https://wiki.jenkins-ci.org/display/JENKINS/Mercurial+Plugin
Jenkins没有进行轮询,插件已安装,它在我在浏览器中打开url时起作用,但它在推送时不起作用。 – MemLeak
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
好吧,我创办了我找了(我的恩惠,我的情况是善变与特定的分支)。
在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。您当地的挂钩用于其他事情,如电子邮件,日志,配置等
如果你有很多的项目,更简单的方法可能是使用Web界面的社区版(RhodeCode),允许更好的詹金斯管理 请看到这里:http:// stackoverflow。com/questions/41035844/build-jenkins-commit-to-repository – marcinkuzminski