Jenkins DSL的布莱安帕拉姆



我有一个像这样的詹金斯(Jenkins groovy)脚本:

    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 {
                ....
                }
            }
        }
    ....
  }

在创建工作之后,无论用户是检查还是取消选中UI中的布尔参数,args的值将始终为" -p b1 --- P b2 -p b3"。这意味着如果在shell脚本中存在的三个将始终评估为true。为什么会发生这种情况?

参数可从envparams获得。当您以$b1访问它们时,您是从env获得的,而不是params

所有环境变量是其性质的字符串,因此当您作为环境变量访问参数时,它们是始终字符串。

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

script {
  assert env.b1 instanceof String
  assert params.b1 instanceof Boolean
}

至少对于管道脚本,布尔参数实际上是字符串。所以我做以下操作:

parameterAsBoolean = (MY_PARAMETER == "true")

您是否尝试过独立运行shell脚本?只是为了确保它按照您的意愿行事?

我认为您的语法可能是错误的,您的价值观始终是有效的,因为它们的存在,请检查该语法作为参考:如何在shell脚本中声明和使用布尔变量?

最新更新