zoukankan      html  css  js  c++  java
  • Jenkins教程(六)脚本与方法执行效果不合预期,如何及时中止pipeline

    场景

    使用Jenkins的流水线时,有时明明某些Python或Shell执行结果错误,但仍会继续运行下去,甚至于最终提示成功。这并不合我们的预期——出现错误及时停止。当然,还有那种小错误不影响构建的,希望继续执行下去的情况。

    所以,场景有两个:

    • 希望发现错误,及时中止执行的情况。
    • 希望错误发生时,脚本仍继续执行的情况。

    本文以上两种场景分别给出示例。

    本文不考虑能被pipeline捕获的异常中断。

    及时中止,如何做?

    1、对于Jenkins流水线中,使用groovy语法实现的功能,可以考虑使用Java的异常。

    示例:

    stage('test'){
    	step{
    		script{
    			def res = someGroovyMethod()
    			if(res == false){
    				throw new RuntimeException('提示信息')
    			}
    		}
    	}
    }
    

    2、对于流水线中调用Shell,可以考虑匹配返回值,抛异常。

    示例:

    stage('test'){
    	step{
    		script{
    			def res = sh(label:"测试分支是否存在:", script: """
    						echo 'hello world!'
    						""", returnStdout: true);
    			if(!res.contains("hello world")){
    				throw new RuntimeException('提示信息')
    			}
    		}
    	}
    }
    

    除了 returnStdout 用于返回执行输出,还可以使用 returnStatusreturnStatusreturnStdout 不能同时使用,returnStatus 表示脚本执行完毕的返回值是0还是非0,非0值即有问题的。

    3、对于以上两种情况,只要能获取返回输出或状态,就可以终止流水线,使用 error

    示例:

    stage('test'){
    	step{
    		script{
    			def res = someGroovyMethod()
    			if(res == false){
    				error '提示信息'
    			}
    		}
    	}
    }
    

    报错忽略,如何做?

    1、使用异常捕获,try-catch block 或 try-catch-finally block。

    示例:

    stage('test'){
    	step{
    		script{
    			try{
    				someMethodMaybeThrowException()
    			} catch(Exception e){
    				// do something you want. e.g,print logs.
    			}
    		}
    	}
    }
    

    2、使用Jenkins 流水线中的 catchError 忽略异常或可能中断构建的错误。

    示例:

    stage('test'){
    	step{
    		script{
    			//无论是否会报错,这个stage以及构建结果都不会因这个错误而失败。
    			catchError(buildResult: 'SUCCESS', catchInterruptions: false) {
    			    someMethodMaybeThrowException()
    			}
    			//some post step will continued.
    		}
    	}
    }
    

    catchError 的玩法还有很多,典型应用场景是针对一些后置的操作,比如构建完成发消息给构建者,保证这个消息不会因为脚本执行中断而停止。当然了,声明式流水线还有post块完成刚才说的功能~

    最后

    简单记记,公司最近流水线改造,顺手记点内容。如果文中有什么错误,请留言评论告知我,谢谢。

    引用:

  • 相关阅读:
    计算闰年
    三个数比较大小
    剪刀石头布编辑
    二进制转换,八进制,十六进制转换
    原来我学的还是不够。。。
    认知是一切的基础
    spark学习笔记-java调用spark简单demo
    spark学习笔记-RDD
    Sublime Text3时间戳查看转换插件开发
    Spring Boot + Freemarker多语言国际化的实现
  • 原文地址:https://www.cnblogs.com/hellxz/p/how-to-terminal-jenkins-pipeline-when-exception.html
Copyright © 2011-2022 走看看