詹金斯dsl中的booleanParam

Rey*_* Sa 1 groovy jenkins

我有一个像这样的詹金斯风格的脚本:

    freeStyleJob(“test”) {
        properties { githubProjectUrl(‘…’) }
        description(‘’’job description’’’.stripMargin('|'))

        logRotator{ numToKeep(100) }

        parameters {
            stringParam(’STRINGP1’, "", “STRINGP1 description”)
            stringParam('STRINGP2’, "", “StringP2 description”)
            booleanParam(‘b1’, false)
            booleanParam(‘b2’, false)
            booleanParam(‘b3’, false)
            stringParam("EMAIL_LIST", "", "Emails")
        }

        scm {
            github(‘repo’, '${STRINGP1}', 'git', ‘giturl’)
        }

        steps {
            shell '''|#!/bin/bash
                |ARGS=""
                |fi
                |if [[ ‘${b1}’ ]]; then
                |   ARGS=$ARGS" —-p b1”
                |fi
                |if [[ ‘${b2}’ ]]; then
                |   OS_ARGS=$ARGS" —-p b2”
                |fi
                |if [[ ‘${b3}’ ]]; then
                |   ARGS=$ARGS" —-p b3”
                |fi                
                |echo ${ARGS}'''.stripMargin('|')

        }

        publishers {
            archiveArtifacts {
                pattern(‘pattern’)
            }

            extendedEmail {
                ....
                }
            }

        }

    ....
  }
Run Code Online (Sandbox Code Playgroud)

创建作业后,无论用户在UI中选中还是取消选中布尔参数,ARGS的值始终为“ --p b1 --- p b2 --p b3”。这意味着shell脚本中存在的三个(如果存在)将始终被评估为true。为什么会这样?

jhe*_*erb 5

至少对于流水线脚本来说,布尔参数实际上是字符串。所以我执行以下操作:

parameterAsBoolean = (MY_PARAMETER == "true")
Run Code Online (Sandbox Code Playgroud)


小智 5

env和均可使用参数params。当您$b1从中获取它们时访问它们env,而不是params

所有环境变量本质上都是字符串,因此当您将params作为环境变量访问时,它们始终是字符串。

如果要在键入时访问它们,请使用params

script {
  assert env.b1 instanceof String
  assert params.b1 instanceof Boolean
}
Run Code Online (Sandbox Code Playgroud)