PowerAssert在/脚本中工作,但在Jenkinsfile驱动的作业中不工作。为什么?有办法让它工作吗?
在Jenkinsfile作业中:
assert 1 == 2
at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:404)
... wall of stack trace
字符串
In /script窗口
Assertion failed:
assert 1 == 2
|
false
型
在这个简单的例子中,很容易弄清楚发生了什么。在实践中,“==”的一个或两个操作数将是一个变量。在/script版本中,它将显示值(参见上面的链接)。在Jenkinsfile控制台日志中,您只会得到assert语句,没有提示。
在@daggett问题之后添加:
node ()
{
stage('assert')
{
try
{
two = 2
assert 1==two
}
catch(Throwable t)
{
println t
error "assert failed"
}
}
}
型
产出:
Assertion failed:
assert 1==two
型
3条答案
按热度按时间nukf8bse1#
据我所知,这是不可能的。Jenkins管道groovy DSL在解释groovy时使用自定义CPS解释器。这意味着它绕过/覆盖了groovy的许多标准实现,因此也是assert实现。Jenkins管道CPS的assert实现可以在这里找到,而真实的groovy实现在assert求值期间使用此类,以便记录值并打印适当的异常。
为了在Jenkins管道CPS中获得类似的行为,需要重构groovy代码库和Jenkins CPS代码,或者复制上面链接的AssertionWriter类中的大量功能。
y4ekin9u2#
旧的讨论,但现在,2023-11-07,此管道执行
assert
:字符串
正如预期的那样,Jenkins失败并显示:
型
请注意,
steps{}
中的script{}
具有可以工作的assert
。eqfvzcg83#
这是一个黑客的例子,有点工作:
字符串
它远不如普通的groovy powerAssert那么健壮。