非常简单直接的问题:
假设我们有这个管道(我认为没有更简单的例子):
node {
env.someEnvVariable = false
boolean asBoolean = env.someEnvVariable ?: false
def asDef = env.someEnvVariable ?: false
echo "asBoolean: $asBoolean" // prints true because of Jenkins
echo "asDef: $asDef" // prints false
}
为什么????
将变量定义为
boolean
让 Jenkins 为其分配一个真值,但将其定义为 def
分配给它真正的假值将 Jenkins 带到哪里
true
值(value)从?编辑:另一个例子:
node {
env.someEnvVariable = false
boolean someBoolean = false
def someVar = false
echo "envVar: ${env.someEnvVariable}" // prints false
echo "someBoolean: ${someBoolean}" // prints false
echo "someVar: ${someVar}" // prints false
if (env.someEnvVariable != null) {
someBoolean = env.someEnvVariable
someVar = env.someEnvVariable
}
echo "envVar: ${env.someEnvVariable}" // prints false
echo "someBoolean: ${someBoolean}" // prints true because of hack
echo "someVar: ${someVar}" // prints false
}
最佳答案
我的假设是,当您分配环境变量时,它被解释为字符串 'false'
.这意味着在这两种情况下,您都尝试分配一个字符串,但将字符串分配给 boolean
如果变量不为空,则变量被解释为真。
三元运算符的工作方式相同,您检查环境变量是否为真(非空)。它不是这样返回变量本身的。
关于 Jenkins 将 true 分配给 bool 变量并将 false 分配给 def 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48707919/