Jenkins 将 true 分配给 bool 变量并将 false 分配给 def 变量

标签 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
}

为什么????

将变量定义为 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/

相关文章:

javascript - 显示单元测试的图表

security - Jenkins Scriptler 插件的替代品?

docker - 将Shell输出传递给Jenkins作业中的变量

jenkins - 错误:Jenkins Groovy脚本中的 “Expected named arguments”并行

linux - centos安装jenkins时出现403禁止异常

java - 使用 Maven 和 Jenkins 的 Eclipse @NonNull 注释

authentication - jenkins 基于角色的策略 - 项目角色模式

Jenkins 管道总是失败

jenkins - 如何列出 Jenkins 管道作业中的所有 `env` 属性?

jenkins - 从 Jenkins 工作流(管道)插件获取登录 Jenkins 的用户名