使用Docker和Jenkins运行testing – testing结果
我有一个用Rails编写的应用程序。 为了testing它,我构build了一个docker镜像。 一切工作正常。
但是,当我configurationJenkins运行这些testing时出现这个问题。 以下是我在做的步骤:
docker-compose up rspec
其中rspec是在docker-compose.yml中定义的服务,包含以下命令:
command: "rspec spec/"
当rspec返回错误时,构build仍然成功。 这里输出的一个例子:
... 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,构build仍然成功。
如果我通过docker ps -a
检查容器的id,我会得到“已退出(1)2分钟前”
你们知道发生了什么事吗?
容器出现故障时是否有一种简单的方法可以使构build失败?
Jenkins使用过程的退出状态来判断成功或失败。
docker-compose up
被devise来编排许多容器。 当你处理多个服务/容器时,关于什么是成功和失败有一些灰色地带。 所有docker-compose
报告退出的是docker-compose
命令成功完成,而不是它运行的所有容器都可以。
docker-compose run <service> <command>
将运行一个服务的单个命令并返回该命令的退出状态。
如果你依赖多个服务/容器进行testing,那么docker-compose up
只会提出所需的服务。 然后运行docker-compose run rubyservice rspec
然后运行docker-compose run rubyservice rspec
进行testing。
撰写分离
如果要保持应用程序容器的testing不同,请创build第二docker-compose-test.yml
文件,其中包含仅用于testing的服务定义。
version: "2.1" tests: build: context: . dockerfile: Dockerfile.tests cmd: rspec
在您的主应用程序容器已经提出后,运行
docker-compose run -f docker-compose-test.yml tests