docker运行bash脚本不能退出

在我的CI系统中,jenkins执行shell脚本来构build…这样的脚本:

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 testing执行文件,并且下一个命令也失败了……最后,脚本以代码0退出,Jenkins显示build成功。

有人可以帮忙吗? 非常感谢!

你应该使用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 ;\ ... " 

不要依赖set -e (这确实是可靠的,至less在没有完全理解所有不会退出的例外的情况下),应该明确指出要运行哪些命令。 在这种情况下,可以简单地将命令与&&链接在一起,以便每个命令只有在前一个命令成功时才运行。 链的退出状态是最后一个运行命令的退出状态(例如,如果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 && ... "