6

有没有办法在单个存储库中指定一个钩子?

现在我们已经在“/etc/mercurial/hgrc”文件中指定了钩子,但是每次它构建两次,并且它为每个存储库中的每个提交构建。

所以我们想为每个存储库指定一个构建。

这就是我们实现钩子的方式:

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

它在 Ubuntu 服务器上。

4

3 回答 3

7
  1. 选择Build Triggers下的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
于 2015-03-12T08:44:33.503 回答
2

你应该确保

  1. 你的 Jenkins 项目没有投票

  2. 您为 Mercurial 挂钩使用正确的 notifyCommit URL:https ://wiki.jenkins-ci.org/display/JENKINS/Mercurial+Plugin

于 2013-10-11T13:35:54.573 回答
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。

重击示例:

#!/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。您的本地挂钩用于其他事情,例如电子邮件、日志、配置等。

于 2015-03-13T07:27:25.883 回答