67

我正在使用 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

如何解决此类型转换错误?或者更好的是,是否有一种不那么繁琐的方法可以将所有管道参数传递给下游作业。

4

7 回答 7

55

除了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))
    ]
于 2017-03-24T10:31:06.477 回答
41

假设

value: update_composer

是问题,试试

value: Boolean.valueOf(update_composer)

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

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

于 2016-05-05T11:40:16.570 回答
14

像 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
于 2017-06-21T11:43:52.243 回答
7
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

于 2020-09-24T13:38:54.563 回答
6

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

if (myBoolean == "true")

于 2018-06-26T20:58:21.713 回答
5

不确定这是否回答了这个问题。但我在寻找别的东西。强烈推荐观看这个 2 分钟的视频。如果您想了解更多详细信息,请参阅文档 - 处理参数和此链接

然后,如果您有blue ocean之类的东西,则选择将如下所示:

在此处输入图像描述

正如视频中所讨论的,Jenkins 是蓝色的,因为它使用的是Blue Ocean 插件

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

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}"
            }
        }
    }
}

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

然后像这样分配值:

在此处输入图像描述

于 2020-03-20T16:43:24.633 回答
1

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

于 2020-07-02T12:00:17.427 回答