博客
关于我
Jenkins教程(六)脚本与方法执行效果不合预期,如何及时中止pipeline
阅读量:432 次
发布时间:2019-03-06

本文共 1557 字,大约阅读时间需要 5 分钟。

场景

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

最后

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

引用:

  • 流水线生成器注释

转载地址:http://jqauz.baihongyu.com/

你可能感兴趣的文章
Mysql 优化 or
查看>>
mysql 优化器 key_mysql – 选择*和查询优化器
查看>>
MySQL 优化:Explain 执行计划详解
查看>>
Mysql 会导致锁表的语法
查看>>
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>
Mysql 分页
查看>>
Mysql 分页语句 Limit原理
查看>>
MySql 创建函数 Error Code : 1418
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
查看>>