让 Jenkins 从 Mercurial 提交构建项目



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

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

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

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

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

它在 Ubuntu 服务器上。

  1. 选择"生成触发器"下的"轮询 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

你应该确保

  1. 你的 Jenkins 项目不轮询

  2. 你对你的 Mercurial 钩子使用正确的 notifyCommit URL:https://wiki.jenkins-ci.org/display/JENKINS/Mercurial+Plugin

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

在主/源存储库中,放置一个带有所需构建脚本的钩子。 Pregroupchange是维护传入的更改。我在主存储库上安装了一个罗德代码,并且它本身有自己的钩子。

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

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

在脚本中,放置所需的操作,也是 Jenkins 的触发器。不要忘记在Jenkins:Job:Configure:Build Triggers:checkbox Trigger 构建中远程启用 + 将您的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,对于每个开发人员来说。仅在推送到来时从主存储库触发 Jenkins(提交、传入和组更改(。您的本地钩子用于其他事情,例如电子邮件、日志、配置等。

最新更新