我有一个用Rails编写的应用程序。为了测试它,我构建了一个泊坞窗图像。一切正常。
但是,当我配置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,我会在2分钟前退出(1)"
你们知道发生了什么吗?
当容器出现故障时,是否有一种简单的方法可以使构建失败?
答案 0 :(得分:3)
Jenkins使用流程的退出状态来判断成功或失败。
docker-compose up
旨在协调许多容器。当您处理多个服务/容器时,对于成功和失败的构成,存在一些灰色区域。所有<?php include 'footer.php'; ?>
报告退出的是list.flatMap(x => Option(x)).minBy {
case n: Number => n.doubleValue
case true => 1.0
case false => 0.0
}(Ordering.Double)
命令成功完成,而不是它运行的所有容器都可以。
docker-compose
将为服务运行单个命令,并返回该命令退出状态。
如果您依靠多个服务/容器进行测试,那么docker-compose
只会提供所需的服务。然后运行docker-compose run <service> <command>
进行测试。
如果要将测试与应用程序容器分开,请创建第二个docker-compose up
文件,其中包含仅用于测试的服务定义。
docker-compose run rubyservice rspec
启动主应用容器后,运行
docker-compose-test.yml