有没有办法在单个存储库中指定一个钩子?
现在我们已经在“/etc/mercurial/hgrc”文件中指定了钩子,但是每次它构建两次,并且它为每个存储库中的每个提交构建。
所以我们想为每个存储库指定一个构建。
这就是我们实现钩子的方式:
[hooks]
changegroup = curl --silent http://jenkins:8080/job/ourProject/build
它在 Ubuntu 服务器上。
有没有办法在单个存储库中指定一个钩子?
现在我们已经在“/etc/mercurial/hgrc”文件中指定了钩子,但是每次它构建两次,并且它为每个存储库中的每个提交构建。
所以我们想为每个存储库指定一个构建。
这就是我们实现钩子的方式:
[hooks]
changegroup = curl --silent http://jenkins:8080/job/ourProject/build
它在 Ubuntu 服务器上。
您应该在 .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
你应该确保
你的 Jenkins 项目没有投票
您为 Mercurial 挂钩使用正确的 notifyCommit URL:https ://wiki.jenkins-ci.org/display/JENKINS/Mercurial+Plugin
好的,我找到了我要找的东西(我是赏金;我的案例是带有特定分支的 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。
重击示例:
#!/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。仅在推送到来时(提交、传入和组更改)从主存储库触发 Jenkins。您的本地挂钩用于其他事情,例如电子邮件、日志、配置等。