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 #本项目使用jdk11
cd $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.10
cd $WORKSPACE/client
/usr/bin/yarn
/upload/node-v12.18.2-linux-x64/bin/tsc || true
再在构建时即解决了之前的报错退出问题。
再来一个简单的示例说明:
# 做可能会失败,但并不关注失败的命令
ls /home/dujifa
whoami
echo "测试操作"
测试结果
调整代码为:
ls /home/dujifa || true
true
whoami
echo "测试操作"
测试结果
当然,解决这个问题的方法众多,再比如通过 set -e 也是可以解决的,这里就不做测试了,希望能够帮助到你!