【问题标题】:Jenkins Groovy URL get parameterJenkins Groovy URL 获取参数
【发布时间】:2017-06-26 05:35:35
【问题描述】:

在我的 Jenkins 多管道项目中,我有一个这样的输入步骤:

input message: 'Merge', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: true, description: '', name: "Merge ${branchConfig.merge} to ${env.BRANCH_NAME}?"]]

我通过调用这个 url 开始这项工作:

http://user:api-token@awesome.jenkins.de/job/myTest/job/dev/build

现在我想添加一个像这样的 GET 参数:

http://user:api-token@awesome.jenkins.de/job/myTest/job/dev/build?skipInput=true

我现在的问题是,如何在 groovy 中获取这个参数?

更新:在第一条评论之后,我做了以下事情:

// Add parameter to skip MergeInput.
properties([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'BooleanParameterDefinition', name: 'skipMergeInput', defaultValue: false]]]])

并像这样调整输入:

input message: 'Merge', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: params.skipMergeInput, description: '', name: "Merge ${branchConfig.merge} to ${env.BRANCH_NAME}?"]]

当我现在开始工作时,它会显示一个弹出窗口,询问应设置的值。但无论我决定什么,输入总是错误的。我正在尝试找出问题所在,然后会更新我的帖子。

更新 2: 所以我继续调试。我在我的 groovy 脚本中添加了以下内容:

// Add parameter to skip MergeInput.
def doMerge = properties([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'BooleanParameterDefinition', name: 'doMerge', defaultValue: true]]]])
println doMerge;

输出返回 NULL,当我在做类似的事情时

println params.doMerge

它告诉我 params 没有定义。知道出了什么问题吗?

更新 3:

调用网址:/job/dg_test/job/master/buildWithParameters?test=true

Groovy 脚本:

properties([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'BooleanParameterDefinition', name: 'test', defaultValue: false]]]])
println params.test

结果:

No such property: params for class: groovy.lang.Binding

【问题讨论】:

    标签: url jenkins groovy parameters


    【解决方案1】:

    这可以通过 3 个简单的步骤来实现:

    1. 为您的管道构建设置一个布尔参数:
    2. 使用“参数”。在输入消息步骤中访问参数的前缀:

      input message: 'Merge', parameters: [[$class: 'BooleanParameterDefinition', defaultValue: params.skipInput, description: '', name: "Merge ${branchConfig.merge} to ${env.BRANCH_NAME}?"]]
      
    3. 使用“buildWithParameters”api 命令而不是“build”:
      http://user:api-token@awesome.jenkins.de/job/myTest/job/dev/buildWithParameters?skipInput=true

    【讨论】:

    • 由于我使用的是 groovy 文件,我不能简单地将构建参数添加到我的作业配置中。这就是我现在所做的:(在我的帖子中更新)
    • 你确定你使用“/buildWithParameters”而不只是“/build”来调用api。看起来参数根本没有被传输。
    • 非常确定,请参阅我的更新 3
    【解决方案2】:

    我终于解决了,这个帖子对我很有帮助:https://stackoverflow.com/a/41276956/1565249

    这是我的实现:

    // Add fancy build parameter.
    properties([
      parameters([
        booleanParam(
          defaultValue: false,
          description: 'Some description',
          name: 'developmentMerge'
        ),
      ])
    ])
    
    if (developmentMerge == "true" || developmentMerge == true) {
      // Your code here
    }
    else {
      // Your code here
    }
    

    当我现在从 GUI 手动开始工作时,它会询问我应该为“developmentMerge”设置哪个值。

    我也可以通过调用这个 URL 来开始我的工作: "/job/dg_test/job/master/buildWithParameters?developmentMerge=true"

    “dg_test”是我的 Jenkins 项目的名称,“master”是我想要开始的工作。

    if 语句必须这样做:

    if (developmentMerge == "true" || developmentMerge == true)
    

    因为当您从 GUI 启动作业时,它会发送一个布尔值“true”,但是当您通过 URL 调用启动作业时,您会收到一个字符串。

    【讨论】:

    • 哦,我们从 url 获取字符串我还没有使用构建 url,很高兴知道!不错的收获:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多