Power assertions在/ script中工作,但在Jenkinsfile驱动的工作中不工作。 为什么? 有办法使其工作吗?
在Jenkinsfile作业中:
assert 1 == 2
at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:404)
... wall of stack trace
在/ 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
答案 0 :(得分:4)
据我所知不可能。 Jenkins管道groovy DSL在groovy解释期间使用自定义CPS解释器。这意味着它绕过/替代了Groovy的许多标准实现,因此也绕过了assert实现。可以在here中找到Jenkins Pipeline CPS的assert实现,而实际的Groovy实现在assert评估期间使用this类以记录值并打印适当的异常。
为了在Jenkins管道CPS中获得相似的行为,要么需要重构Groovy代码库和Jenkins CPS代码,要么需要复制上面链接的AssertionWriter类中的许多功能。
答案 1 :(得分:0)
这是一种可以完成此类工作的骇客示例:
def ASSERT_EQ (def arg1, def arg2)
{
if (arg1 != arg2)
{
println ('arg1 = ' + arg1 + " " + arg1.getClass())
println ('arg2 = ' + arg2 + " " + arg2.getClass())
}
assert arg1 == arg2
}
它的鲁棒性不如正常的槽纹功率强。