詹金斯将 true 分配给布尔变量并将 false 分配给 def 变量

Pel*_*cho 5 jenkins jenkins-pipeline

非常简单直接的问题:

假设我们有这个管道(我认为没有更简单的例子):

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
}
Run Code Online (Sandbox Code Playgroud)

为什么????

将变量定义为boolean使 Jenkins 为其分配一个真值,但将其定义为def将其分配为真正的假值

詹金斯的true价值从何而来?

编辑:另一个例子:

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
}
Run Code Online (Sandbox Code Playgroud)

min*_*nas 4

我的假设是,当您分配环境变量时,它会被解释为 string 'false'。这意味着在这两种情况下,您都尝试分配一个字符串,但boolean如果它不为空,则将字符串分配给变量将被解释为 true。

三元运算符的工作方式相同,您检查环境变量是否为 true(不为空)。事实并非如此,它返回变量本身。