Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Hudson构建特定的git提交_Git_Hudson - Fatal编程技术网

使用Hudson构建特定的git提交

使用Hudson构建特定的git提交,git,hudson,Git,Hudson,我有一个hudson构建服务器。源代码由git存储库管理。对于每个构建,将签出并编译最新版本。现在我想告诉hudson不要使用最新版本,而是使用旧版本的代码(由我指定) 在哈德逊,我有两个可以设置的参数。第一个“存储库名称”,默认值为“origin”,第二个refspec值为+refs/heads/*:refs/remotes/origin/*。我尝试了一些类似于origin/[commitid]或+refs/heads/*:refs/remotes/origin/[commitid]的东西。但

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

在哈德逊,我有两个可以设置的参数。第一个“存储库名称”,默认值为“origin”,第二个
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
    重置为预期提交
  • 将该分支
    build\u br
    推送到Jenkins或Hudson的远程回购监视器(这将是一个
    push--force
    ,如“”所示)
这样,构建分支
build\u br
意味着构建一个特定的提交,GIT\u提交将被正确设置。

不应在该特殊分支上进行任何开发,因为它会定期重置为您需要构建的任何提交。

我不确定Hudson的情况,但Jenkins的Git插件在“Repository browser”(存储库浏览器)字段正上方的右侧有一个“Advanced…”按钮。单击此处会显示许多附加选项,其中一个是“签出/合并到本地分支(可选)”。其帮助文本显示“如果给定,请签出此分支上的修订版本以作为HEAD。请注意,这尚未使用子模块进行测试”,因此这似乎是您的想法。

您可以使用的分支参数定义特定的提交id

詹金斯将只签出提交,而不是分支机构的负责人。

我只想回答得更清楚一些。 如何让您的工作一步一步地签出特定的提交:

  • 将字符串参数添加到名为的作业中,在我的示例中,将其设置为
    COMMIT
  • 选择Git作为SCM(由提供)
  • 在Git SCM属性中设置您的回购属性
  • 在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)
    
    请注意,在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)