【问题标题】:Append to Job properties附加到作业属性
【发布时间】:2017-08-31 14:36:00
【问题描述】:

我在 job-dsl.groovy 中定义的作业参数被管道中定义的参数覆盖。

我正在使用job-dsl-plugin 和 Jenkins 管道为每个 git 分支生成 Jenkins 作业。因为我的代码存储在 gitLab 中,所以它们需要 gitLab 集成。我使用gitlab-plugin 提供。问题在于“gitLabConnection”,它看起来只能从 Jenkins 管道内部应用。

所以如果在 job-dsl 我会这样做:

branches.each { branch ->
String safeBranchName = branch.name.replaceAll('/', '-')
if (safeBranchName ==~ "^release.*")
{
    return
}

def branch_folder = "${basePath}/${safeBranchName}"
folder branch_folder

pipelineJob("$branch_folder/build") {
    logRotator {
        numToKeep 20
    }
    parameters {
        stringParam("BRANCH_NAME", "${safeBranchName}", "")

        stringParam("PROJECT_NAME", "${basePath}", "")
    {
}

然后在我的 Jenkins 管道中添加“gitLabConnection”

node('node_A') {
properties([
    gitLabConnection('gitlab.internal')
])

stage('clean up') {
    deleteDir()
}
///(...)

我必须这样做:

node('node_A') {
properties([
    gitLabConnection('gitlab.internal'),
    parameters([
        string(name: 'BRANCH_NAME', defaultValue: BRANCH_NAME, description: ''),
        string(name: 'PROJECT_NAME', defaultValue: PROJECT_NAME, description: '')
    ])
])

stage('clean up') {
    deleteDir()
}
///(...)

这样我的 BRANCH_NAME 和 PROJECT_NAME 就不会被覆盖。 有没有另一种方法来解决这个问题? 是否可以将 'gitLabConnection('gitlab.internal')' 附加到 Jenkins 管道中的属性?

【问题讨论】:

  • 老实说,这是我在网上能找到的唯一参考资料。我知道已经有 2 年了,但我已经筋疲力尽了。你找到答案了吗?
  • 检查我的答案:)

标签: jenkins jenkins-pipeline jenkins-job-dsl


【解决方案1】:

不幸的是,似乎还没有办法做到这一点。 https://issues.jenkins-ci.org/browse/JENKINS-43758 对此进行了一些讨论,我最终可能会打开一个功能请求以允许人们“附加到属性”

【讨论】:

    【解决方案2】:

    有两种方法可以解决这个问题。第一个仅使用 Jenkins 管道代码,但如果您选择此路径,初始作业运行很可能会失败。这个初始失败将会发生,因为在第一次作业运行时,管道会创建 Jenkins 作业参数。一旦创建了参数,作业就可以工作了。

    1. 选项“1” - 仅使用 Jenkins 管道。
      'Pipeline Syntax'/'Snippet Generator' 检查:
      '这个项目是参数化的'。
      添加您需要的参数,然后点击“生成管道脚本”。就我而言,我得到:

      属性([ gitLabConnection(gitLabConnection:'my_gitlab_connection',jobCredentialId:'',useAlternativeCredential:false), [$class: 'JobRestrictionProperty'], 参数([ 字符串(默认值:“测试”,描述:“测试”,名称:“测试”,修剪:假) ]), throttleJobProperty(类别:[],limitOneJobWithMatchingParams:false,maxConcurrentPerNode:0,maxConcurrentTotal:0,paramsToUseForLimit:'',throttleEnabled:false,throttleOption:'project') ])

    2. 选项 '2' - 它更复杂,但也更强大。由于上述问题,我最终选择了那个。
      使用 Jenkins 工作 DSL 插件 - https://github.com/jenkinsci/job-dsl-plugin Gitlab 插件可以很好地配合它https://github.com/jenkinsci/gitlab-plugin#declarative-pipeline-jobs

    【讨论】:

    • 问题是如何在 Jenkinsfile 中定义“属性”,以便它们不会覆盖 JobDSL 已经在作业上设置的属性。
    • 是的@BrandonSquizzato,那将是选项 1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2011-10-03
    • 1970-01-01
    相关资源
    最近更新 更多