如何将管道中的布尔参数值传递给下游作业?

How to pass boolean parameter value in pipeline to downstream jobs?

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

在我的参数化构建中,我设置了 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

如何解决此类型转换错误? 或者更好的是,有没有更简单的方法可以将所有管道参数传递给下游作业。

假设

value: update_composer

是问题所在,尝试

value: Boolean.valueOf(update_composer)

is there a less cumbersome way in which I can just pass ALL the pipeline parameters to the downstream job

据我所知,至少在不使用 Jenkins API 调用和禁用 Groovy 沙盒的情况下是这样。

除了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))
    ]

就像 Jesse Jesse Glick and abguy 说你可以将字符串枚举成布尔类型:

Boolean.valueOf(string_variable)

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

String.valueOf(boolean_variable)

在我的例子中,我不得不将布尔参数下游到另一个作业。 因此,为此您需要使用 class BooleanParameterValue :

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

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

if (myBoolean == "true")

不确定这是否回答了这个问题。但我在寻找别的东西。强烈推荐查看 this 2 minute video. If you wanted to get into more details then see docs - Handling Parameters and this link

然后,如果您有类似 blue ocean 的内容,选择将如下所示:

如视频中所述,Jenkins 是蓝色的,因为它使用 Blue Ocean Plugin

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

pipeline {
    agent any

    parameters {
    string(defaultValue: "TEST", description: 'What environment?', name: 'userFlag')
    choice(choices: ['TESTING', 'STAGING', 'PRODUCTION'], description: 'Select field for target environment', name: 'DEPLOY_ENV')
    }

    stages {
        stage("foo") {
            steps {
                echo "flag: ${params.userFlag}"
                echo "flag: ${params.DEPLOY_ENV}"
            }
        }
    }
}

自动构建将采用默认参数。但是,如果您手动执行,则可以选择。

然后像这样赋值:

现在事情变得容易多了:内置的代码段生成器支持 'build' 步骤(虽然我不知道从什么时候开始)。

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