如果测试失败,则使 docker 构建失败

Make docker build fail if tests fail

Docker 文件

FROM node:carbon

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install
RUN npm install gulp -g

COPY . .

run gulp build --build
run npm test

EXPOSE 80
CMD [ "npm", "start" ]

测试 运行 使用 mocha --recursive

build.sh

docker build -t my-app .
echo $?

我如何检测到一个摩卡测试失败,因此 npm test 应该不行,docker build 也不行?

我可能漏掉了一些东西。

我建议遵循一些 docker 和节点应用程序的最佳实践。您不应该在带有 npm install 和 运行 内部测试的容器中构建您的应用程序。构建和测试生命周期可以在 CI/CD 服务器上 运行(例如 TravisCI https://travis-ci.org/ or CircleCI https://circleci.com - public GitHub 存储库都是免费的) .在您的 CI 管道中,您可以检测到失败的 built/test 并且可以更轻松地配置 CI 以在失败后不构建您的图像。您的捆绑应用程序应该从 CI 服务器复制到您的 docker 容器内,然后您应该只在容器内启动您的应用程序。

如果命令的退出代码不为零,则 Dockerfile 中的

RUN 将失败。如果发生这种情况,docker build 也会失败并返回非零退出代码。

您的 npm test 脚本在测试失败时需要 return 非零退出代码。

作为参考,您可以这样检查退出代码:

$ npm test
$ echo $?

您可以将行 run npm test 更改为 run npm test || exit 1

运行 快速测试并确认构建失败。这是屏幕截图。