在Groovy/Jenkinsfile声明性语法中,为什么对dictionary、dictionary和integer对象执行布尔AND
操作的结果是整数而不是布尔true/false
pipeline {
agent any
stages {
stage( "1" ) {
steps {
script {
a = [:]
a.a = [:]
a.a["a"] = "1"
a.a["b"] = "2"
echo "${a}"
echo "${a.a}"
echo "${a.a.size()}"
def my_bool = (a && a.a && a.a.size())
echo "my_bool ${my_bool}"
}
}
}
stage( "2" ) {
when {
expression { true == (a && a.a && a.a.size()) } // Fails because result is integer "2", not boolean "true"
}
steps {
script {
echo "hello, world!"
}
}
}
}
}
我对其他编程语言的偏见导致我认为a && a.a && a.a.size()
应该隐式地转换为布尔值。echo
表明该值为整数2
。
处理此问题的Jenkins/Groovy惯用方法是什么即如果一个阶段是以";字典是非空的并且具有非零大小";,习惯上正确/首选的写条件语句的方式是什么?
更新:注意:echo "my_bool ${my_bool}"
语句打印";my_bool 2
";。这是Jenkins 2.222.3版本。
expression { a?.a?.size() }
甚至
expression { a?.a }