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

标签 ruby-on-rails jenkins rspec docker continuous-integration

我有一个用 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 并且构建仍然成功。

如果我使用 docker ps -a 通过容器 ID 检查容器,我会得到“Exited (1) 2 分钟前”

你们知道这是怎么回事吗?

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

最佳答案

Docker compose 添加了从运行测试的特定容器/服务获取退出代码的功能:

docker-compose up \
  --abort-on-container-exit \
  --exit-code-from test-runner 

原始答案

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

docker-compose up 旨在编排许多容器。当您处理多个服务/容器时,关于成功和失败的构成存在一些灰色区域。所有这些docker-compose退出时的报告是docker-compose命令成功完成,但这并不是说它运行的所有容器都正常。

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

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

组合分离

如果您想让测试与应用程序容器分开,请创建第二个 docker-compose-test.yml文件包含仅用于测试的服务定义。

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

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

docker-compose -f docker-compose-test.yml run tests

关于ruby-on-rails - 使用 Docker 和 Jenkins 运行测试 - 测试结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37450011/

相关文章:

testing - 我将如何以 BDD 风格在 Rhomobile 中测试 Controller ?

ruby-on-rails - 使用 Zeus 和 Sidekiq 进行 Rails 测试

jquery - 在移动设备上禁用 Bootstrap 日期选择器的键盘弹出窗口(Rails 4、Jquery)

javascript - 将插件从 Redmine 1.x 迁移到 2.x - Javascript 不起作用

ruby-on-rails - Centos 7x64 - 使用 Nginx 和 Unicorn 部署 Rails

java - 如何解析 Windows 与 Linux 属性文件路径?

installation - 使用 jenkins 构建 RPM 包

SSL Poke 连接问题(Jenkins 到 Sonarqube)

ruby-on-rails - 为什么 rspec 不在 Guard/Spork 启动时运行?

ruby-on-rails - 载波和 mongoid 的回调问题