使用Hudson构建特定的git提交

时间:2010-11-17 17:46:16

标签: git hudson

我有一个哈德森构建服务器。源代码由git存储库管理。对于每个构建,都会检出并编译最新版本。现在我想告诉hudson不要使用最新版本,而是使用旧版本的代码(由我指定)。

在哈德森,我有两个可以设置的参数。第一个“存储库名称”,默认值为“origin”,第二个refspec值为+refs/heads/*:refs/remotes/origin/*。我试过origin/[commitid]+refs/heads/*:refs/remotes/origin/[commitid]之类的东西。但没有任何事情像预期的那样奏效。

我认为我必须使用参数化作业,以便我可以将提交作为参数提供给作业。

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

7 个答案:

答案 0 :(得分:57)

我只想更清楚地回答this。 如何让你的工作一步一步检查特定的提交:

  1. 使用名称为您的作业添加字符串参数,在我的示例中为COMMIT
  2. 选择Git作为SCM(由Jenkins Git plugin提供)。
  3. 在Git SCM属性中设置您的repo属性。
  4. 在Git SCM中,要构建的分支类型${COMMIT}这是对作业参数的引用,将在构建期间解析。
  5. 它,启动构建,在日志中你会看到类似的东西:

    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)
    

    请注意,在SCM结帐之前还有其他方法可以设置环境变量,即使用EnvInject Plugin中的Prepare environment for the run步骤(您甚至可以使用Groovy)。

    另外,如果您没有看到我正在谈论的选项或者他们不能工作,请确保您拥有新版本的Git插件在我的情况下它是2.2.0。

答案 1 :(得分:9)

您可以使用jenkins-git-plugin的分支参数来定义特定的提交ID。

然后詹金斯只会检查那个提交而不是分支的负责人。

答案 2 :(得分:7)

就像文档说的那样:

git plugin branch configure

将您的提交ID输入到"要构建的分支"设置。

答案 3 :(得分:4)

在“预备步骤”中尝试添加“执行shell”并添加:

   git pull
   git checkout <commit version>

答案 4 :(得分:4)

一种解决方法是:

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

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

答案 5 :(得分:2)

您可以配置Hudson作业以构建特定分支。然后你可以推送你希望Hudson构建到该分支上的任何更改。

答案 6 :(得分:1)

我不确定Hudson,但Jenkins的Git Plugin在“Repository browser”字段的右上方有一个“Advanced ...”按钮。点击那里会显示许多其他选项,其中一个是“Checkout / merge to local branch(optional)”。它的帮助文本说“如果给出,请检查修订以在此分支上构建为HEAD。请注意,这尚未使用子模块进行测试”,因此这似乎是您的想法。