管道传递参数到下游作业

时间:2016-05-04 10:31:54

标签: jenkins groovy jenkins-pipeline

我使用Jenkins v2.1和集成的传递管道功能(https://jenkins.io/solutions/pipeline/)来编排两个现有的构建(构建和部署)。

在我的参数化构建中,我有3个用户参数设置,也需要在管道中进行选择。

管道脚本如下:

node: {
    stage 'build'
    build job: 'build', parameters: [[$class: 'StringParameterValue', name: 'target', value: target], [$class: 'ListSubversionTagsParameterValue', name: 'release', tag: release], [$class: 'BooleanParameterValue', name: 'update_composer', value: update_composer]]

    stage 'deploy'
    build job: 'deploy', parameters: [[$class: 'StringParameterValue', name: 'target', value: target]]
}

除了BooleanParameterValue之外,这项工作正常。当我构建管道时,抛出以下错误:

java.lang.ClassCastException: hudson.model.BooleanParameterValue.value expects boolean but received class java.lang.String

如何解决此类型转换错误? 或者甚至更好,有一种不那么麻烦的方式,我可以将所有管道参数传递给下游作业。

7 个答案:

答案 0 :(得分:34)

除了Jesse Glick回答之外,如果要传递字符串参数,请使用:

build job: 'your-job-name', 
    parameters: [
        string(name: 'passed_build_number_param', value: String.valueOf(BUILD_NUMBER)),
        string(name: 'complex_param', value: 'prefix-' + String.valueOf(BUILD_NUMBER))
    ]

答案 1 :(得分:31)

假设

value: update_composer

是问题,请尝试

value: Boolean.valueOf(update_composer)
  

有一种不那么麻烦的方式,我可以将所有管道参数传递给下游作业

我不知道,至少在没有使用Jenkins API调用和禁用Groovy沙箱的情况下。

答案 2 :(得分:6)

像Jesse Jesse Glickabguy一样,你可以将字符串枚举为布尔类型:

Boolean.valueOf(string_variable)

或相反的布尔值为字符串:

String.valueOf(boolean_variable)

在我的情况下,我不得不将下游布尔参数转换为另一个作业。 因此,您需要使用类 BooleanParameterValue

build job: 'downstream_job_name', parameters:
[
[$class: 'BooleanParameterValue', name: 'parameter_name', value: false],
], wait: true

答案 3 :(得分:3)

不确定是否可以回答此问题。但是我在寻找其他东西。强烈建议参阅this 2 minute video。如果您想了解更多详细信息,请参阅docs - Handling Parameters和此link

然后,如果您有蓝色海洋之类的选项,则选择应如下所示:

enter image description here

您可以这样定义和访问变量:

library(zoo)
z <- zoo(data, d)
z
## 2019-10-01 2019-10-03 2019-10-04 
##          1          2          3 

as.ts(z)
## Time Series:
## Start = 18170 
## End = 18173 
## Frequency = 1 
## [1]  1 NA  2  3

自动构建将获取默认参数。但是,如果您手动进行操作,则可以选择。

然后分配这样的值:

enter image description here

答案 4 :(得分:3)

build job: 'downstream_job_name', parameters: [
    booleanParam(name: 'parameter_name', value: false)
]

(比照https://www.jenkins.io/doc/pipeline/steps/pipeline-build-step/#-build-%20build%20a%20job

答案 5 :(得分:2)

Jenkins的“布尔值”参数实际上只是“选择参数”类型的快捷方式,其选项硬编码为字符串“ true”和“ false”,并带有用于设置字符串变量的复选框。但是最后,就是这样:一个字符串变量,与真正的布尔值无关。因此,如果您不想像这样进行字符串比较,则需要将字符串转换为布尔值:

if (myBoolean == "true")

答案 6 :(得分:1)

如今事情变得简单得多:内置的代码段生成器支持“构建”步骤(虽然从什么时候开始,我还不知道)。