使用Hudson构建特定的git提交
我有一个hudson构建服务器。源代码由git存储库管理。对于每个构建,将签出并编译最新版本。现在我想告诉hudson不要使用最新版本,而是使用旧版本的代码(由我指定) 在哈德逊,我有两个可以设置的参数。第一个“存储库名称”,默认值为“origin”,第二个使用Hudson构建特定的git提交,git,hudson,Git,Hudson,我有一个hudson构建服务器。源代码由git存储库管理。对于每个构建,将签出并编译最新版本。现在我想告诉hudson不要使用最新版本,而是使用旧版本的代码(由我指定) 在哈德逊,我有两个可以设置的参数。第一个“存储库名称”,默认值为“origin”,第二个refspec值为+refs/heads/*:refs/remotes/origin/*。我尝试了一些类似于origin/[commitid]或+refs/heads/*:refs/remotes/origin/[commitid]的东西。但
refspec
值为+refs/heads/*:refs/remotes/origin/*
。我尝试了一些类似于origin/[commitid]
或+refs/heads/*:refs/remotes/origin/[commitid]
的东西。但一切都没有达到预期效果
我想我必须使用一个参数化作业,这样我才能将commit作为参数提供给作业
如何告诉hudson使用特定的提交而不是最新的提交?您可以将hudson作业配置为生成特定的分支。然后,您可以在该分支上推动希望Hudson进行的任何更改 在“预步骤”中,尝试添加“执行shell”并添加:
git拉
git签出
一个解决方法是:
- 设置Git插件以构建一个特殊的“
”分支build\u br
- 将分支
重置为预期提交build\u br
- 将该分支
推送到Jenkins或Hudson的远程回购监视器(这将是一个build\u br
,如“”所示)push--force
build\u br
意味着构建一个特定的提交,GIT\u提交将被正确设置。不应在该特殊分支上进行任何开发,因为它会定期重置为您需要构建的任何提交。我不确定Hudson的情况,但Jenkins的Git插件在“Repository browser”(存储库浏览器)字段正上方的右侧有一个“Advanced…”按钮。单击此处会显示许多附加选项,其中一个是“签出/合并到本地分支(可选)”。其帮助文本显示“如果给定,请签出此分支上的修订版本以作为HEAD。请注意,这尚未使用子模块进行测试”,因此这似乎是您的想法。您可以使用的分支参数定义特定的提交id 詹金斯将只签出提交,而不是分支机构的负责人。我只想回答得更清楚一些。 如何让您的工作一步一步地签出特定的提交:
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签出之前,还有其他方法可以设置环境变量,即使用中的Prepare environment for the run
步骤(您甚至可以使用Groovy)
另外,如果你看不到我所说的选项或它们不起作用,请确保你有一个Git插件的新版本,在我的例子中,它是2.2.0。如文档所述:
将提交id输入到“要生成的分支”设置。注意:这意味着GIT_commit环境变量不再匹配签出的实际提交。感谢提供详细步骤。工作得很有魅力!如何“启动构建”?当我按下“Build Now”时,只生成了一个分支(master)。再次检查我的答案,我建议引入一个参数。当作业参数化时,用户在点击“Build”链接时会看到BuildWithParameters表单,而不是立即开始构建。对于懒惰者,这也可以在不使用构建参数的情况下工作,您只需将提交标识符粘贴到“Branchs to Build”中即可。我发现我的一些同事更喜欢直接修改作业配置,对于他们来说,这更简单明了。如果单击字段旁边的小问号(?),它会显示:
…可以通过在该字段中指定该修订的SHA1哈希来签出特定修订。
我觉得这是“正确的做法”。哪个问号?我在任何地方都找不到问号。我应该遵循什么格式来指定修订?如果我用的是管道呢?这些文档实际上毫无用处。我很想找到这些文档。我在官方网站上找不到类似的截图。@cauchy,这个文档不在网站上,它在你的Jenkins实例中,在作业配置中,在“源代码管理”->“构建分支”->?这对我来说非常有效。为了工作,必须禁用“轻量级签出”选项。
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)