电源断言在/ script中起作用,但在Jenkinsfile驱动的作业中不起作用。为什么?有没有办法让它工作?
在Jenkinsfile作业中:
assert 1 == 2
at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:404)
... wall of stack trace
Run Code Online (Sandbox Code Playgroud)
在/脚本窗口中
Assertion failed:
assert 1 == 2
|
false
Run Code Online (Sandbox Code Playgroud)
在这个简单的示例中,很容易弄清楚发生了什么。实际上,“ ==”的一个或两个操作数将是一个变量。在/ script版本中,它将显示值(请参见上面的链接)。在Jenkinsfile控制台日志中,您仅按原样获取assert语句,而没有任何提示。
在@daggett问题之后添加:
node ()
{
stage('assert')
{
try
{
two = 2
assert 1==two
}
catch(Throwable t)
{
println t
error "assert failed"
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Assertion failed:
assert 1==two
Run Code Online (Sandbox Code Playgroud)
据我所知不可能。Jenkins 管道 groovy DSL 在解释 groovy 期间使用自定义 CPS 解释器。这意味着它绕过/覆盖了 groovy 的许多标准实现,因此也绕过了断言实现。Jenkins Pipeline CPS 的断言实现可以在这里找到,而真正的 groovy 实现在断言评估期间使用这个类来记录值并打印适当的异常。
为了在 Jenkins 管道 CPS 中获得类似的行为,需要重构 groovy 代码库和 Jenkins CPS 代码,或者复制上面链接的 AssertionWriter 类中的许多功能。