【问题标题】:Build Pipeline using a Branch Parameter使用分支参数构建管道
【发布时间】:2017-11-30 04:33:59
【问题描述】:

我似乎无法创建构建特定分支的 Jenkins 流水线作业,其中该分支是构建参数。

以下是一些配置截图:

(我尝试过使用 Git 参数和字符串参数,结果相同)

(我试过$BRANCH_NAME_PARAM${BRANCH_NAME_PARAM}${env.BRANCH_NAME_PARAM},所有变体的结果都一样)

以及构建日志:

hudson.plugins.git.GitException: Command "git fetch --tags --progress origin +refs/heads/${BRANCH_NAME_PARAM}:refs/remotes/origin/${BRANCH_NAME_PARAM} --prune" returned status code 128:
stdout: 
stderr: fatal: Couldn't find remote ref refs/heads/${BRANCH_NAME_PARAM}

    at org.jenkinsci.plugins.gitclient.CliGitAPIImpl.launchCommandIn(CliGitAPIImpl.java:1970)

我显然做错了什么 - 有什么想法吗?

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    https://issues.jenkins-ci.org/plugins/servlet/mobile#issue/JENKINS-28447

    似乎它与轻量级结帐有关。如果我在配置中取消选择此选项,我的参数变量将被解析

    【讨论】:

    • 这似乎是一个错误?
    【解决方案2】:

    结合VonC答案的例子更详细

    1。配置名为 BRANCH 的扩展选择参数:

    • 指定分隔符
    • 指定 groovy 脚本或 groovy 文件路径:
    def command = "git ls-remote -h $gitURL"
    def proc = command.execute()
    
    proc.waitFor()         
    
    if ( proc.exitValue() != 0 ) {
       println "Error, ${proc.err.text}"
       System.exit(-1)
    }     
    
    def branches = proc.in.text.readLines().collect {
    it.replaceAll(/[a-z0-9]*\trefs\/heads\//, '') 
    }   
    return branches.join(",")
    

    2。设置要构建的分支:$BRANCH

    3。在 Jenkins 作业配置的“Pipeline”部分禁用“Lightweight checkout”复选框:

    否则作业将失败并显示以下消息:"stderr: fatal: Couldn't find remote ref refs/heads/${BRANCH"}"

    4。 Build with parameter 执行 groovy 脚本,然后你会得到一个分支的下拉列表

    【讨论】:

    • 不错!我正在寻找那个时髦的脚本。 +1
    • 这不是 Git Parameter Plugin 已经给你的吗?我会在下拉列表中找到我当前的工作,其中包含所有分支机构的列表
    • 嗨@Igor Rabkin 我已按照上述说明进行操作,它从 Git 中提取了分支列表,并且我禁用了轻量级结帐,但我仍然收到您提到的错误。你知道为什么吗?
    • 你能帮帮我吗? @Hopetds
    • @Kanth,它应该可以工作...再次检查您的配置
    【解决方案3】:

    我已经尝试了上述解决方案,但它对我不起作用。我选择了一种稍微不同的方法。我发帖是因为它会在将来对某人有所帮助。

    1. Goto 配置管道作业。
    2. 选中“此项目已参数化”选项
    3. 添加 git 参数。 注意:如果没有显示该选项,请前往管理插件并安装git参数插件。
    4. 我的管道配置看起来像
    5. 取消选中轻量级结帐并更新管道部分中的“要构建的分支”。
    6. 保存配置。

    【讨论】:

    【解决方案4】:

    每次我有一个基于分支的工作时,我都必须输入一个groovy script with EnvInject plugin 以删除参数中选择的 git 分支的 ref/heads 部分。

    如果你保留refs/heads/xxx,Jenkins 会寻找分支ref/heads/ref/heads/xxx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-24
      • 2021-04-28
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多