我有一个像这样的詹金斯(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。为什么会发生这种情况?
参数可从env
和params
获得。当您以$b1
访问它们时,您是从env
获得的,而不是params
。
所有环境变量是其性质的字符串,因此当您作为环境变量访问参数时,它们是始终字符串。
如果要在输入时访问它们,请使用params
:
script {
assert env.b1 instanceof String
assert params.b1 instanceof Boolean
}
至少对于管道脚本,布尔参数实际上是字符串。所以我做以下操作:
parameterAsBoolean = (MY_PARAMETER == "true")
您是否尝试过独立运行shell脚本?只是为了确保它按照您的意愿行事?
我认为您的语法可能是错误的,您的价值观始终是有效的,因为它们的存在,请检查该语法作为参考:如何在shell脚本中声明和使用布尔变量?