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块完成刚才说的功能~

最后

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

引用:

  • https://stackoverflow.com/questions/42718785/how-to-throw-exception-in-jenkins-pipeline
  • https://blog.csdn.net/liurizhou/article/details/86670092
  • 流水线生成器注释
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东北小狐狸-Hellxz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值