管道将参数传递给下游作业

Bra*_*sen 52 groovy jenkins 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]]
}
Run Code Online (Sandbox Code Playgroud)

这个工作正常,除了BooleanParameterValue.当我构建管道时,抛出以下错误:

java.lang.ClassCastException: hudson.model.BooleanParameterValue.value expects boolean but received class java.lang.String
Run Code Online (Sandbox Code Playgroud)

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

abg*_*guy 42

除了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))
    ]
Run Code Online (Sandbox Code Playgroud)

  • `build job:'deploy',参数:[booleanParam(name:'target',value:target)]`是布尔参数的等价句法 (11认同)

Jes*_*ick 37

假设

value: update_composer
Run Code Online (Sandbox Code Playgroud)

是问题,试试吧

value: Boolean.valueOf(update_composer)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 你的答案对我有用.在阅读常规文档时,我甚至找到了一种更短的方式.`update_composer.toBoolean()`也可以. (9认同)
  • @BramGerritsen评论+1 - 这对我来说甚至在Groovy沙箱中都有效,而``Boolean.valueOf`却没有:) (2认同)

dsa*_*don 9

像Jesse Jesse Glickabguy说你可以将字符串枚举成布尔类型:

Boolean.valueOf(string_variable)
Run Code Online (Sandbox Code Playgroud)

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

String.valueOf(boolean_variable)
Run Code Online (Sandbox Code Playgroud)

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

build job: 'downstream_job_name', parameters:
[
[$class: 'BooleanParameterValue', name: 'parameter_name', value: false],
], wait: true
Run Code Online (Sandbox Code Playgroud)


Rom*_*IDT 7

build job: 'downstream_job_name', parameters: [
    booleanParam(name: 'parameter_name', value: false)
]
Run Code Online (Sandbox Code Playgroud)

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


Cos*_*smo 6

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

if (myBoolean == "true")