使用Hudson构建特定的git提交

36

我有一个Hudson构建服务器。源代码由git仓库管理。每次构建时,都会检出并编译最新版本。现在我想要告诉Hudson使用旧版本的代码来构建(由我指定)。

在Hudson中,我有两个可以设置的参数。第一个是“存储库名称”,默认值为“origin”,第二个是refspec,值为+refs/heads/*:refs/remotes/origin/*。我尝试过一些类似origin/[commitid]+refs/heads/*:refs/remotes/origin/[commitid]的东西,但都没有按预期工作。

我认为我需要使用参数化作业,以便可以将提交作为作业的参数。

如何告诉Hudson使用特定的提交而不是最新的提交?

7个回答

57

我只想使 这篇回答 更加清晰。以下是逐步实现检出特定提交的方法:

  1. 在你的作业中添加字符串参数,以我的示例为例,将其命名为 COMMIT
  2. 选择Git作为SCM(由Jenkins Git插件提供)。
  3. 在Git SCM属性中设置您的仓库属性。
  4. 在Git SCM中,在要构建的分支段落中输入${COMMIT},它是作业参数的引用,并将在构建期间解析。

就这样,启动构建,在日志中你会看到如下内容:

Cloning the remote Git repository
Cloning repository ssh://your-repo.git
Fetching upstream changes from ssh://your-repo.git
using GIT_SSH to set credentials 
Fetching upstream changes from ssh://your-repo.git
using GIT_SSH to set credentials 
Checking out Revision af63e2102b65953316e512c0bb659578bb143a33 (detached)

请注意,在进行版本控制系统检出之前,还有其他设置环境变量的方法,例如使用EnvInject插件中的Prepare environment for the run步骤(你甚至可以使用Groovy语言实现此功能)。

另外,如果你没有看到我所说的选项或者它们不起作用,请确保你安装了Git插件的新版本。在我的情况下,版本号是2.2.0。


感谢详细的步骤,完美地解决了问题! - Chris J
你如何“启动构建”?当我按下“立即构建”时,只有一个分支被构建(主分支)。 - user239558
2
对于懒惰的人来说,这也可以不使用构建参数而工作,您可以直接将提交标识符粘贴到“要构建的分支”中。 - Ring
我点赞了,因为我发现我的一些同事更喜欢直接修改作业配置,对他们来说这更直观和易于理解。 - izzekil
取消“轻量级结帐”复选框的选择。然后它对我有效。否则不行! - Codev
显示剩余2条评论

9
你可以使用jenkins-git-plugin的branch参数来定义一个特定的提交ID。
然后Jenkins只会检出该提交,而不是分支的头。

5
如果你点击字段旁边的小问号(?),它会显示:“……可以通过在该字段中指定该修订版本的SHA1哈希来检出特定的修订版本”。这对我来说感觉像是“正确的方法”。 - Ben
哪个问号?我找不到任何问号。我应该遵循什么格式来指定修订版本?如果我正在使用管道,怎么办?文档几乎没有用。 - cauchi

7

如文档所述:

git插件分支配置

在“要构建的分支”设置中输入您的提交ID。


我很想找到那份文档。在官网上我找不到任何类似于那个截图的东西。 - cauchi
2
@cauchy,这份文档不在网站上,而是在你的Jenkins实例中,在作业配置下的源代码管理->要构建的分支->? - Akom
这对我来说完美地运作了。为了使其工作,选项“轻量级检出”必须被禁用 - Codev

4

一种解决方法是:

  • 将Git插件设置为构建特殊的“build_br”分支。
  • 重置分支build_br到预期的提交
  • 将该分支build_br推送到由Jenkins或Hudson监视的远程仓库(这将是一个push --force,如在“git reset --hard and a remote repository”中所示)

这样,构建该分支build_br将意味着构建特定的提交,并且GIT_COMMIT将被正确设置。
不应在该特殊分支上进行开发,因为它经常被重置到您需要构建的任何提交。


4
在“预备步骤”中尝试添加“执行 shell”并添加以下内容:
   git pull
   git checkout <commit version>

5
注意:这意味着GIT_COMMIT环境变量不再与实际检出的提交匹配。 - Karl

2

您可以配置您的Hudson工作来构建特定的分支。然后,您可以将希望Hudson构建的任何更改推送到该分支。


1
我不确定Hudson,但Jenkins的Git插件右侧有一个“高级…”按钮,就在“仓库浏览器”字段上方。点击它会显示许多其他选项,其中之一是“检出/合并到本地分支(可选)”。它的帮助文本说:“如果给定,将该修订版作为此分支上的HEAD进行构建。请注意,这未经子模块测试”,所以这似乎是你想要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接