使用Docker和Jenkins运行测试 - 测试结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Docker和Jenkins运行测试 - 测试结果相关的知识,希望对你有一定的参考价值。

我有一个用Rails编写的应用程序。为了测试它,我已经构建了一个docker镜像。一切正常。

但是,当我配置Jenkins运行这些测试时,会出现此问题。这就是我在建设步骤中所做的事情:

docker-compose up rspec

其中rspec是在docker-compose.yml中定义的服务,并包含以下命令:

command: "rspec spec/"

当rspec返回错误时,构建仍然成功。这是输出的一个例子:

    ...
21:42:24 [36mrspec_1  |[0m       should save second profile
21:42:24 [36mrspec_1  |[0m 
21:42:24 [36mrspec_1  |[0m Failures:
21:42:24 [36mrspec_1  |[0m 
21:42:24 [36mrspec_1  |[0m   1) New profile Should persist new_profile_pricture
21:42:24 [36mrspec_1  |[0m      Failure/Error: jump_to_four_phase_with(new_profile_picture)
21:42:24 [36mrspec_1  |[0m      RuntimeError:
21:42:24 [36mrspec_1  |[0m        Timeout for '#new_profile' (1) appearance reached!
...
21:42:25 [36mcomposes_rspec_1 exited with code 1
21:42:25 [0m[Profiler] $ /bin/sh -xe /tmp/hudson4606189750126491465.sh
21:42:25 Finished: SUCCESS

36mcomposes_rspec_1返回1,构建仍然成功。

如果我通过它的id与docker ps -a检查容器,我得到“退出(1)2分钟前”

你们知道发生了什么吗?

当容器出现故障时,是否有一种简单的方法可以使构建失败?

答案

Jenkins使用流程的退出状态来判断成功或失败。

docker-compose up旨在协调许多容器。当您处理多个服务/容器时,对于成功和失败的构成,存在一些灰色区域。 docker-compose报告退出的所有内容都是docker-compose命令成功完成,而不是它运行的所有容器都可以。

docker-compose run <service> <command>将为服务运行单个命令并返回该命令退出状态。

如果您依靠多个服务/容器进行测试,那么docker-compose up只会提供所需的服务。然后运行docker-compose run rubyservice rspec进行测试。

Compose seperation

如果要将测试与应用程序容器分开,请创建第二个qazxsw poi文件,其中包含仅用于测试的服务定义。

docker-compose-test.yml

在您的主应用程序容器启动后,运行

version: "2.1"
tests:
  build:
    context: .
    dockerfile: Dockerfile.tests
  cmd: rspec

以上是关于使用Docker和Jenkins运行测试 - 测试结果的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Jenkins 管道的 docker 容器中运行 jasmine 测试用例

如何在AWS中运行我的本地selenium测试脚本而不使用jenkins

带有容器的 Jenkins Docker Sidecar 运行守护程序命令

开发测试环境通过gitlab+jenkins+docker 实现一命令部署

从 docker 内部运行 docker 可以吗?

使用阿里云容器服务Jenkins实现持续集成和Docker镜像构建