Jenkins更改Parameterized Trigger Plugin以支持fail or abort结果

通常在Jenkins中,会使用 Build-timeout plugin给一个Jenkins Job设定一个timeout值,当超过这个值时,使这个build fail或abort。这个plugin 也会和Parameterized Trigger Plugin一起协作,在当前的build fail或abort时,来执行下游的Job,可能是资源清理,系统restore等工作。

在Jenkins core中是对build 的Result定义如下所示:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public static final Result SUCCESS = new Result("SUCCESS",BallColor.BLUE,0);  
  2.     /** 
  3.      * The build had some errors but they were not fatal. 
  4.      * For example, some tests failed. 
  5.      */  
  6.     public static final Result UNSTABLE = new Result("UNSTABLE",BallColor.YELLOW,1);  
  7.     /** 
  8.      * The build had a fatal error. 
  9.      */  
  10.     public static final Result FAILURE = new Result("FAILURE",BallColor.RED,2);  
  11.     /** 
  12.      * The module was not built. 
  13.      * <p> 
  14.      * This status code is used in a multi-stage build (like maven2) 
  15.      * where a problem in earlier stage prevented later stages from building. 
  16.      */  
  17.     public static final Result NOT_BUILT = new Result("NOT_BUILT",BallColor.NOTBUILT,3);  
  18.     /** 
  19.      * The build was manually aborted. 
  20.      * 
  21.      * If you are catching {@link InterruptedException} and interpreting it as {@link #ABORTED}, 
  22.      * you should check {@link Executor#abortResult()} instead (starting 1.417.) 
  23.      */  
  24.     public static final Result ABORTED = new Result("ABORTED",BallColor.ABORTED,4);  
那么在Parameterized Trigger Plugin中,可以看到各个配置对build result的匹配,

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. SUCCESS("Stable") {  
  2.         @Override  
  3.         boolean isMet(Result result) {  
  4.             return result == Result.SUCCESS;  
  5.         }  
  6.     },  
  7.     UNSTABLE("Unstable") {  
  8.         @Override  
  9.         boolean isMet(Result result) {  
  10.             return result == Result.UNSTABLE;  
  11.         }  
  12.     },  
  13.     UNSTABLE_OR_BETTER("Stable or unstable but not failed") {  
  14.         @Override  
  15.         boolean isMet(Result result) {  
  16.             return result.isBetterOrEqualTo(Result.UNSTABLE);  
  17.         }  
  18.     },  
  19.     UNSTABLE_OR_WORSE("Unstable or Failed but not stable") {  
  20.         @Override  
  21.         boolean isMet(Result result) {  
  22.             return result.isWorseOrEqualTo(Result.UNSTABLE);  
  23.         }  
  24.     },  
  25.     FAILED("Failed") {  
  26.         @Override  
  27.         boolean isMet(Result result) {  
  28.             return (result == Result.FAILURE);  
  29.         }  
  30.     },  
  31.     ALWAYS("Complete (always trigger)") {  
  32.         @Override  
  33.         boolean isMet(Result result) {  
  34.             return true;  
  35.         }  
  36.     };  
可以看到没有支持fail or abort的build result。abort有两种可能,一是job本身超时,由Build-timeout plugin触发,这个我们可以在Build-timeout plugin配置中,勾上“Fail the build” checkbox,使得在这种情况下,让build fail。在这个情况下,两个plugin的协作,完全可以解决这个问题。

另一个abort的可能,是用户手动cancel一个build,在这种情况下,Build-timeout plugin不会起作用。

如果特定的业务逻辑是:当当前build的result是unstable或比unstable差,触发下游job,那么就可以用

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. UNSTABLE_OR_WORSE("Unstable or Failed but not stable") 触发器。  
但如果业务逻辑是:仅当当前build的result是abort 或fail时,触发下游job。那么现有的Parameterized Trigger Plugin就不符合要求了。

解决方法,可以在Parameterized Trigger Plugin中支持这个新的trigger,也可以更加简单的重写

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. FAILED("Failed") trigger,  

如下所示:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. FAILED("Failed") {  
  2.         @Override  
  3.         boolean isMet(Result result) {  
  4.             return (result == Result.FAILURE <span style="color:#FF0000;">|| result == Result.ABORTED</span>);  
  5.         }  
  6.     },  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值