有没有办法在单个存储库中指定一个钩子?
现在我们已经在“/ etc / mercurial / hgrc”文件中指定了钩子,但每次构建两次,并为每个存储库中的每次提交构建。
所以我们想要为每个存储库指定一个构建。
这就是我们实现钩子的方式:
[hooks]
changegroup = curl --silent http://jenkins:8080/job/ourProject/build
它位于Ubuntu服务器上。
答案 0 :(得分:7)
您应该在.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 :(得分:2)
你应该确保
您的Jenkins项目未轮询
您为Mercurial挂钩使用正确的notifyCommit网址:https://wiki.jenkins-ci.org/display/JENKINS/Mercurial+Plugin
答案 2 :(得分:0)
好的,我找到了我要找的东西(我是赏金;我的案子是Mercurial和一个特定的分支)。
在main / origin存储库中,放置一个包含所需构建脚本的钩子。 Pregroupchange用于维护传入的更改。我在主存储库上安装了一个rhodecode,它本身也有自己的钩子。
通过这种方式,我仍然会触发Jenkins,并且仍然会对rhodecode推送通知和其他人的触发器进行更改。
[hooks]
pregroupchange = /path/to/script.extention
在脚本中,放置所需的操作,也是Jenkins的触发器。不要忘记在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。您的本地钩子用于其他事情,如电子邮件,日志,配置等。