让Jenkins从Mercurial提交中构建项目

时间:2013-10-10 14:50:15

标签: jenkins mercurial-hook mercurial-commit

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

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

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

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

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

它位于Ubuntu服务器上。

3 个答案:

答案 0 :(得分:7)

  1. 选择构建触发器下的投票SCM 选项。
  2. 确保计划表格为空。
  3. 您应该在.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)

你应该确保

  1. 您的Jenkins项目未轮询

  2. 您为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。您的本地钩子用于其他事情,如电子邮件,日志,配置等。