从Groovy脚本中使Jenkins构建失败

24

我有一个Groovy脚本用来推广代码。长话短说,在该脚本的某个时间点,我知道它是否成功。如果不成功,我想使构建失败。在Groovy中是否有一种方法可以使构建失败?

示例:

在“执行Groovy脚本”插件中,您可以编写代码。

(插入API调用以推广代码) if(checkPromote()){ //在此处使构建失败 }

其中'checkPromote'根据推广的状态返回true或false值。


从你的脚本中返回非零退出代码。应该使你的构建失败。 - Rik
我也尝试了 return false - Eddie
如果您提供一个构建文件的片段和设置的描述,那可能会有所帮助。 - Rik
什么类型的构建?看起来像是构建流程或自由风格。 - Rik
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/141676/discussion-between-eddie-and-rik。 - Eddie
显示剩余2条评论
6个回答

30

在我看来,中止程序最优雅的方式是使用断言。

assert condition : "由于...构建失败"


25

这不是一个管道作业。这是一个自由风格的项目。 - Eddie
@Eddie 你确定吗? 我不认为自由风格项目有 Groovy 脚本。 - SINGULARITY
2
@SINGULARITY,是的,他们这样做。 - Jim Andrakakis

8

你尝试过这个吗?你是否看到了以下错误 org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use new hudson.AbortException - acm
@acm 是的,它可以工作,不过你需要先批准 AbortException 的构造函数,请参见 https://dev59.com/eFoT5IYBdhLWcg3wrRKE#39412951。 - Jon S
很好,这不包括不必要的堆栈跟踪。 - Jeremy Gosling

4

在Jenkins世界中有不同类型的"Groovy脚本",每种类型的解决方案都不相同。

  1. "Execute Groovy script" plugin (a plain Groovy script which runs on a node)

     System.exit(1)
     // NOTE: Don't use it in System Groovy Script, Groovy Postbuild, Scriptler or Pipeline
     // because it runs on master and terminates the Jenkins server process!
    
  2. System Groovy Script / Groovy Postbuild / Scriptler (runs on master):

     import hudson.model.*;
     def currentBuild = Thread.currentThread().executable
     currentBuild.result = Result.FAILURE
    

    This works only for "System Groovy Script"

     return 1
    
  3. Pipeline:

     currentBuild.result = 'FAILURE'// one way
     error("Error Message") // another way
    

当然,还有更多的人工方法,比如抛出异常、执行错误命令、调用不存在的函数或使用错误的参数等等。


3

通常我使用像 throw new Exception("错误信息") 这样简单的语句,你可以尝试一下:

    if(checkPromote()){
         throw new Exception("Error Message")
     }

希望这对您也有用。

0

你应该使用

currentBuild.result = 'FAILURE'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接