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
用于返回执行输出,还可以使用returnStatus
,returnStatus
与returnStdout
不能同时使用,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
- 流水线生成器注释
Jenkins教程(六)脚本与方法执行效果不合预期,如何及时中止pipeline相关推荐
- ngnix 执行php 慢,【nginx】PHP有什么办法可以排查那些脚本或方法执行慢,需要优化?...
mysql有慢查询日志,可以排查项目中那些语句需要优化. PHP有什么办法可以排查整个项目中,那些脚本或方法执行慢,需要优化? 最好能够给出详细的操作方法或者连接. 回答 xdebug,xhprof等 ...
- 崔华的printsql的脚本内容以及执行效果
create or replace procedure PRINTSQL (i_n_id in number, i_vc_idtype in varchar2) is /* 功能: 打印对应spid或 ...
- Linux命令每五分钟执行一次,Linux crontab 每5秒钟执行一次 shell 脚本 的方法
Linux crontab 每5秒钟执行一次 shell 脚本 的方法 由于 Linux 的 crontab 的定时命令格式如下: minute hour day-of-month month-of- ...
- Android脱离USB执行Shell脚本的方法
前言: 安卓自动化测试过程中,经常需要测试机脱离 Usb执行相关 shell 脚本,之前在网上看了很多的例子,没有真正可以直接断开 USB执行 shell 脚本的实例,所以一直也没太搞明白,最近有时间 ...
- python 任务计划_windows 10 设定计划任务自动执行 python 脚本的方法
我用 python 写了一些脚本,有一些是爬虫脚本,比如爬取知乎特定话题的热门问题,有一些是定期的统计分析脚本,输出统计结果到文档中.之前我都是手动执行这些脚本,现在我希望如何这些脚本能自动定时执行. ...
- 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 动态拦截函数 | 动态获取 MetaClass 中的方法 | evaluate 方法执行Groovy脚本 )
文章目录 一.基础示例 二.根据字符串动态获取 MetaClass 中的方法 二.使用 evaluate 执行字符串形式的 Groovy 脚本 二.完整代码示例 一.基础示例 定义类 Student ...
- 【Groovy】Groovy 脚本调用 ( Groovy 脚本中调用另外一个 Groovy 脚本 | 调用 evaluate 方法执行 Groovy 脚本 | 参数传递 )
文章目录 一.Groovy 脚本中调用另外一个 Groovy 脚本 1.调用 evaluate 方法执行 Groovy 脚本 2.参数传递 二.完整代码示例 1.调用者 Groovy 脚本 2.被调用 ...
- teraterm 执行sql命令_tera term的ttl脚本使用方法 | 学步园
1.环境构筑 1.安装Tera Term. 下载路径如下: 2.安装可运行的PFC环境 2.运用TTL脚本进行自动测试 TTL脚本的命名一览和相关介绍请参考Tera Term的help文件. TTL脚 ...
- mysql执行脚本的方法
2.执行sql脚本文件 方法一 使用dos命令执行(windows下,unix或linux在的其控制台下) [Mysql的bin目录]\mysql –u用户名 –p密码 –D数据库<[sql脚本 ...
最新文章
- MySQL · 引擎介绍 · Sphinx源码剖析(三)
- SharpDevelop 开源的 C# IDE ! 和 SharpZipLib
- 【人物】李开复:未来属于创新者和小公司
- textrank4zh是_GitHub - renxiaowei941015/TextRank4ZH: 从中文文本中自动提取关键词和摘要...
- 【已解决】Error: could not open `C:\Program Files\Java\jre1.8.0_121\lib\amd64\jvm.cfg‘
- 第一台计算机豹电器元件,电气基础和安全知识.ppt
- 怎么在电脑安装php文件夹在哪个文件夹,php进行文件上传时找不到临时文件夹怎么办,电脑自动保存的文件在哪里...
- 64位linux安装mysql数据库吗_Linux下安装Mysql数据库
- UVA497 Strategic Defense Initiative【LIS+DP】
- python数据存储系列教程——python(pandas)读写csv文件
- android 多线程 加锁,android 多线程 — 从一个小例子再次品位多线程
- 骑士php授权,骑士人才系统伪静态设置教程
- 适合游戏视频剪辑CPU排行榜,cpu天梯图
- 手机html设计规范,手机网页设计尺寸规范具体是多少?
- date format picture ends before converting entire input string
- html5合影拍照小游戏,html5实现简单别踩白块小游戏
- Linux数据库管理——day10——分库分表、数据库硬件优化
- 耳朵上的艺术品,飞利浦圈铁真无线耳机JT60无敌了!
- Python环境配置和安装包总结
- java画球_我的世界java版指令画球教程