使用 Jenkins DSL 在 github scm 节点中指定一个 Git 可执行文件

Use Jenkins DSL to specify a a Git executable in a github scm node

我正在将一些 Jenkins 作业转换为 DSL 脚本。

其中一些使用 github 用于 SCM,因为 DSL 支持它,所以配置起来很容易。然而,在超过 100 个作业转换之后,我第一次需要指定一个 Git 可执行文件(到目前为止所有作业都使用默认值)并且似乎没有办法做到这一点。 job.xml 显示:

<scm class="hudson.plugins.git.GitSCM" plugin="git@2.4.4">
<configVersion>2</configVersion>
<userRemoteConfigs>...</userRemoteConfigs>
<branches>...</branches>
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
<gitTool>Ubuntu Git</gitTool>
<submoduleCfg class="list"/>
<extensions>
<hudson.plugins.git.extensions.impl.SparseCheckoutPaths>
<sparseCheckoutPaths>
<hudson.plugins.git.extensions.impl.SparseCheckoutPath>
<path>
octane.pricing/octane.trader/server/work/mif_interface/cfg
</path>
</hudson.plugins.git.extensions.impl.SparseCheckoutPath>
</sparseCheckoutPaths>
</hudson.plugins.git.extensions.impl.SparseCheckoutPaths>
</extensions>
</scm>

除了 <gitTool>Ubuntu Git</gitTool> 之外,我可以使用 DSL 完成所有这些工作。

DSL 中没有提到这一点,所以我认为这不受支持,所以我尝试使用配置块(请记住,我仍在学习如何使用它)。尝试了一些东西,但我最期待的是:

  configure { project ->
    project << 'hudson.plugins.git.GitSCM' {
      paramDefs << 'gitTool' {
        string('Ubuntu Git')
        }
     }
  }

但是没有骰子 - XML 仍然显示 "default" 选项。

我很惊讶这不能直接在 DSL 中指定,但是任何人都可以看到我在配置块中做错了什么吗?

最佳选择是使用 Git SCM 上下文的嵌套配置块:

job('example') {
  scm {
    git {
      remote {
        github('owner/repo')
      }
      configure { scmNode ->
        scmNode / gitTool('changeme')
      }
    }
  }
}

请参阅作业 DSL wiki 中的 configure in the Job DSL API Viewer and more info about the Configure Block