Jenkins中需要多次执行某条报错指令的解决方案

2023-05-16

问题描述: 最近使用arm官方提供的arm-ostl-linux-gnueabi-gcc编译cmake工程时,发现需要执行三次cmake才能编译成功,但将其部署到Jenkins中项目(使用pipeline)总是编译失败。

原因分析: Jenkins在执行shell脚本时加了-xe参数

  • -x:打印每一行执行到的命令
  • -e:当任何命令以非零值(当任何命令失败时)退出代码时,终止执行shell脚本

也就是说,只要指令执行报错,会返回一个非零值,检测到这个非零值,脚本就exit了

解决方案:
在需要报错继续执行的位置加入set +e指令,之后为了能正常报错,再恢复原有错误退出机制,即使用set -e指令。

  • set -e: 执行的时候如果出现了返回值为非零,整个脚本 就会立即退出, 经常用于脚本的开头使用,在脚本开始的时候如果不能执行,那么脚本下面的就会退出

  • set +e: 执行的时候如果出现了返回值为非零将会继续执行下面的脚本 , 在脚本会出现错的时候, 执行set +e , 当脚本出现有错的时候,继续执行下面的代码。

案例如下:

set +e # 
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake ..
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake ..
set -e
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake .. 
cmake --build .

但是我不想看前两条的报错信息,那么可以将终端输出流向一个文件:

set +e # 
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake .. >NULL 2>&1
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake .. >NULL 2>&1
set -e
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE=../cmake/arm_linux_controller_debug.cmake .. 
cmake --build .

嗯舒服了~


参考链接:

  • https://blog.csdn.net/qq_28686911/article/details/115732506
  • https://www.cnblogs.com/edgar-xie/p/13890883.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jenkins中需要多次执行某条报错指令的解决方案 的相关文章

随机推荐