为什么Groovy的权力不能在Jenkins的工作中发挥作用

Fre*_*ell 5 groovy jenkins

电源断言在/ 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)

Jon*_*n S 8

据我所知不可能。Jenkins 管道 groovy DSL 在解释 groovy 期间使用自定义 CPS 解释器。这意味着它绕过/覆盖了 groovy 的许多标准实现,因此也绕过了断言实现。Jenkins Pipeline CPS 的断言实现可以在这里找到,而真正的 groovy 实现在断言评估期间使用这个类来记录值并打印适当的异常。

为了在 Jenkins 管道 CPS 中获得类似的行为,需要重构 groovy 代码库和 Jenkins CPS 代码,或者复制上面链接的 AssertionWriter 类中的许多功能。

  • 看起来这应该是针对 Jenkins 的一个问题。这真的应该很容易。 (2认同)