有没有一种方法可以在单个存储库中指定钩子?
现在,我们在“ / etc / mercurial / hgrc”文件中指定了该钩子,但是每次它生成两次,并且为每个存储库中的每次提交生成。
因此,我们要为每个存储库指定一个构建。
这是我们实现钩子的方式:
[hooks] changegroup = curl --silent http://jenkins:8080/job/ourProject/build
它在Ubuntu服务器上。
好的,我找到了想要的东西(我是赏金;我的案件是Mercurial,有特定分支)。
在主/原始存储库中,放置一个具有所需构建脚本的钩子。Pregroupchange是用于维护传入的更改。我在主存储库上安装了一个rhodecode,它本身也有自己的钩子。
这样,我仍然可以触发Jenkins,并且在触发rhodecode推送通知和其他通知之后仍然可以进行更改。
[hooks] pregroupchange = /path/to/script.extention
在脚本中,放置所需的动作,同时也是詹金斯的触发器。不要忘记在Jenkins:Job:Configure:Build Triggers:checkboxTrigger builds中远程启用 + 将您的desired_token(这里是Mercurial)放在这里。
Jenkins:Job:Configure:Build Triggers:checkbox
desired_token
因为您不能仅触发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。您的本地挂钩用于其他用途,例如电子邮件,日志,配置等。