docker run bash脚本无法退出

时间:2017-08-16 06:54:27

标签: shell docker jenkins

在我的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显示构建成功..

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

2 个答案:

答案 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 &&
  ...
"