我有一个哈德森构建服务器。源代码由git存储库管理。对于每个构建,都会检出并编译最新版本。现在我想告诉hudson不要使用最新版本,而是使用旧版本的代码(由我指定)。
在哈德森,我有两个可以设置的参数。第一个“存储库名称”,默认值为“origin”,第二个refspec
值为+refs/heads/*:refs/remotes/origin/*
。我试过origin/[commitid]
或+refs/heads/*:refs/remotes/origin/[commitid]
之类的东西。但没有任何事情像预期的那样奏效。
我认为我必须使用参数化作业,以便我可以将提交作为参数提供给作业。
我如何告诉hudson使用特定提交而不是最新提交?
答案 0 :(得分:57)
我只想更清楚地回答this。 如何让你的工作一步一步检查特定的提交:
COMMIT
。${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)
请注意,在SCM结帐之前还有其他方法可以设置环境变量,即使用EnvInject Plugin中的Prepare environment for the run
步骤(您甚至可以使用Groovy)。
另外,如果您没有看到我正在谈论的选项或者他们不能工作,请确保您拥有新版本的Git插件在我的情况下它是2.2.0。
答案 1 :(得分:9)
您可以使用jenkins-git-plugin的分支参数来定义特定的提交ID。
然后詹金斯只会检查那个提交而不是分支的负责人。答案 2 :(得分:7)
就像文档说的那样:
将您的提交ID输入到"要构建的分支"设置。
答案 3 :(得分:4)
在“预备步骤”中尝试添加“执行shell”并添加:
git pull
git checkout <commit version>
答案 4 :(得分:4)
一种解决方法是:
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。请注意,这尚未使用子模块进行测试”,因此这似乎是您的想法。