Jenkins 管道收集方法 grep
Jenkins Pipeline Collection method grep
我正在尝试在声明性管道中使用 java.util.Collection 中的 grep 方法,但它似乎具有不同的签名。在脚本控制台中,我可以毫无问题地执行以下简单的示例代码:
[1,2,3,4].grep({ it == 4 })
它return是包含元素4的数组,这就是我想要的。然而,当我在管道内执行类似的代码时,它 return 是一个布尔值,这不仅不是我想要的,它甚至 return 都不是真的,当找到一些东西时,它总是假的。
pipeline {
agent {
label 'Cloud-Ubuntu-Slave'
}
options {
timestamps()
}
stages {
stage ('Debug') {
steps {
script {
echo "${[1,2,3,4].grep({ it == 4 })}"
}
}
}
}
我怀疑在给定管道上下文的情况下,它执行了一个名为 grep 的不同方法,而不是 Collection 中的方法,尽管代码是相同的,但我一直无法找出原因或原因如何改变这个。
同样奇怪的是,我能够正确执行 Collection 中的大多数方法(例如 collect)。
这显然只是我实际操作的简化示例。我真正想做的是基于 lambda 函数 returning true 和 false 的集合过滤器。任何替代解决方案,不涉及仅遍历它并手动构建一个新数组,这已经是我当前非常丑陋的解决方法,同样受到欢迎。
请改用 ${[1,2,3,4].findAll { it == 4 }}
,在这种情况下它的作用与 grep
相同。
我正在尝试在声明性管道中使用 java.util.Collection 中的 grep 方法,但它似乎具有不同的签名。在脚本控制台中,我可以毫无问题地执行以下简单的示例代码:
[1,2,3,4].grep({ it == 4 })
它return是包含元素4的数组,这就是我想要的。然而,当我在管道内执行类似的代码时,它 return 是一个布尔值,这不仅不是我想要的,它甚至 return 都不是真的,当找到一些东西时,它总是假的。
pipeline {
agent {
label 'Cloud-Ubuntu-Slave'
}
options {
timestamps()
}
stages {
stage ('Debug') {
steps {
script {
echo "${[1,2,3,4].grep({ it == 4 })}"
}
}
}
}
我怀疑在给定管道上下文的情况下,它执行了一个名为 grep 的不同方法,而不是 Collection 中的方法,尽管代码是相同的,但我一直无法找出原因或原因如何改变这个。
同样奇怪的是,我能够正确执行 Collection 中的大多数方法(例如 collect)。
这显然只是我实际操作的简化示例。我真正想做的是基于 lambda 函数 returning true 和 false 的集合过滤器。任何替代解决方案,不涉及仅遍历它并手动构建一个新数组,这已经是我当前非常丑陋的解决方法,同样受到欢迎。
请改用 ${[1,2,3,4].findAll { it == 4 }}
,在这种情况下它的作用与 grep
相同。