vlambda博客
学习文章列表

Jenkins忽略Shell步骤中的报错继续执行

今天通过Jenkins部署一个springboot的项目,Shell脚本大致流程如下:

1、从git拉取代码

2、构建环境、gradle构建

3、根据jar包及文件生成dockerfile

4、拼接kubernetes Deployment/services yml文件

5、使用kubectl部署到rancher


其中,第2步构建环境的代码如下:

export JAVA_HOME=/opt/jdk-11.0.10 #本项目使用jdk11cd $WORKSPACE/client/usr/bin/yarn #安装package.json中的所有文件/upload/node-v12.18.2-linux-x64/bin/tsc #tsc生成dist目录
cd $WORKSPACE/opt/gradle-5.6.4/bin/gradle :app:clean #清除缓存,如之前的jar包/opt/gradle-5.6.4/bin/gradle :app:BootJar    #编译构建代码

然而在进行tsc操作时,产生了下边一堆报错,提示是缺少依赖,导致Jenkins整个构建被终止。经与开发人员沟通,其实可以忽略这一步的报错继续向下执行,只需要dist目录生成即可。


一个报错导致整个构建被终止,这是因为Jenkins在构建的时候,如果出现了返回值为非零,则会终止Job以失败告终。

 

所以要在构建出现了返回值为非零时,忽略错误,继续执行下面的脚本,解决办法如下:

添加 || true 到报错的命令结尾,这里代码调整为:

exportJAVA_HOME=/opt/jdk-11.0.10cd $WORKSPACE/client/usr/bin/yarn/upload/node-v12.18.2-linux-x64/bin/tsc || true

Jenkins忽略Shell步骤中的报错继续执行


再在构建时即解决了之前的报错退出问题。


再来一个简单的示例说明:

Jenkins忽略Shell步骤中的报错继续执行

# 做可能会失败,但并不关注失败的命令

ls /home/dujifa

whoami

echo "测试操作"


测试结果

Jenkins忽略Shell步骤中的报错继续执行

调整代码为:

ls /home/dujifa || truetruewhoamiecho "测试操作"

测试结果


当然,解决这个问题的方法众多,再比如通过 set -e 也是可以解决的,这里就不做测试了,希望能够帮助到你!