一尘不染

让詹金斯从Mercurial提交构建项目

jenkins

有没有一种方法可以在单个存储库中指定钩子?

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

因此,我们要为每个存储库指定一个构建。

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

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

它在Ubuntu服务器上。


阅读 232

收藏
2020-07-25

共1个答案

一尘不染

好的,我找到了想要的东西(我是赏金;我的案件是Mercurial,有特定分支)。

在主/原始存储库中,放置一个具有所需构建脚本的钩子。Pregroupchange是用于维护传入的更改。我在主存储库上安装了一个rhodecode,它本身也有自己的钩子。

这样,我仍然可以触发Jenkins,并且在触发rhodecode推送通知和其他通知之后仍然可以进行更改。

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

在脚本中,放置所需的动作,同时也是詹金斯的触发器。不要忘记在Jenkins:Job:Configure:Build Triggers:checkboxTrigger builds中远程启用 +
将您的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。您的本地挂钩用于其他用途,例如电子邮件,日志,配置等。

2020-07-25