在我的CI系统中,jenkins执行shell脚本来构建... 像这样的脚本:
docker run -d --rm -v /code-path:/tmp docker-iamge-name sh -c " \
cd /tmp ;\
mkdir build ;\
cd build ;\
cmake ../ ;\
make ;\
./unit-test-execute-file1 ;\
...
"
但是当代码文件中有错误时,make命令退出,然后执行下一个命令(./ unit-test-execute-file1)。由于make
失败,所以不生成unit-test-execute-file,下一个命令也失败...最后,脚本退出代码为0,Jenkins显示构建成功..
有人可以帮忙吗?非常感谢!
答案 0 :(得分:1)
如果您希望脚本在脚本失败的任何时候退出,您应该使用set -e
作为bash脚本的第一行。
您的运行语句如下所示:
docker run -d --rm -v /code-path:/tmp docker-iamge-name sh -c " \
set -e ;\
cd /tmp ;\
mkdir build ;\
cd build ;\
cmake ../ ;\
make ;\
./unit-test-execute-file1 ;\
...
"
答案 1 :(得分:1)
而不是依赖于set -e
(其实 可靠,至少在没有完全理解不退出的所有例外的情况下shel),明确指出要运行的命令。在这种情况下,您可以简单地将命令与&&
链接在一起,以便每个命令仅在前一个命令成功时运行。链的退出状态是要运行的最后一个命令的退出状态(例如,如果cd build
失败,则其退出状态为sh -c
的退出状态。
docker run -d --rm -v /code-path:/tmp docker-iamge-name sh -c "
cd /tmp &&
mkdir build &&
cd build &&
cmake ../ &&
make &&
./unit-test-execute-file1 &&
...
"