如何正确编写关于Jenkins管道Jenkinsfile中的BooleanParameter的if语句?

Ita*_*not 8 jenkins jenkins-pipeline

我正在设置Jenkins管道Jenkinsfile,我想检查是否设置了booleanparameter.

这是文件的相关部分:

node ("master") {
        stage 'Setup' (
                [[$class: 'BooleanParameterValue', name: 'BUILD_SNAPSHOT', value: 'Boolean.valueOf(BUILD_SNAPSHOT)']],
Run Code Online (Sandbox Code Playgroud)

据我所知,这是访问booleanparameter的方法,但我不知道如何陈述IF语句本身.

我在想做类似的事情:

if(BooleanParameterValue['BUILD_SNAPSHOT']){...
Run Code Online (Sandbox Code Playgroud)

请写这句话的正确方法是什么?

Jom*_*n68 13

您的管道脚本可以通过 3 种方式访问​​布尔参数:

  1. 作为裸参数,例如: isFoo

  2. env地图,例如:env.isFoo

  3. params地图,例如:params.isFoo

如果您isFoo使用 1) 或 2)访问,它将有一个字符串值(“true”或“false”)。

如果您isFoo使用 3)访问,它将具有布尔值。

因此,isFoo在脚本中测试参数的最简单的方法 (IMO)是这样的:

if (params.isFoo) {
   ....
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以像这样测试它:

if (isFoo.toBoolean()) {
   ....
}??????????????????
Run Code Online (Sandbox Code Playgroud)

或者

if (env.isFoo.toBoolean()) {
   ....
}??????????????????
Run Code Online (Sandbox Code Playgroud)

toBoolean()需要转换"true"字符串成布尔true"false"字符串为布尔false


Pom*_*m12 11

答案实际上比这更简单!根据管道文档,如果您定义一个布尔参数,isFoo您可以使用其名称在Groovy中访问它,因此您的脚本实际上看起来像:

node {
   stage 'Setup'
   echo "${isFoo}"   // Usage inside a string
   if(isFoo) {       // Very simple "if" usage
       echo "Param isFoo is true"
       ...
   }
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你可能不应该调用你的参数,BUILD_SNAPSHOT但可能buildSnapshotisBuildSnapshot因为它是一个参数,而不是一个常量.

  • 好吧结果证明这没有很好的记录.我设法让这个工作,我在这里发布了一个类似问题的答案:http://stackoverflow.com/a/41276956/1092815 (5认同)
  • 我遇到了同样的问题.当`isFoo`为true时,您的解决方案有效,但当它设置为false时则无效.在我这边,`echo"$ {isFoo}"`打印"false",但我仍然看到"Param isFoo是真的".我使用生成器生成布尔参数属性. (4认同)

Bec*_*ter 6

简单地这样做if(isFoo){...}并不能保证它的工作:)为了安全起见,使用if(isFoo.toString()=='true'){ ... }

  • 那么为什么不使用“if (isFoo.toBoolean())”呢? (9认同)