testing容器结束时终止docker组成

目前,我正在运行一个docker-compose堆栈,用于执行基本的集成testing,包括量angular器testing运行器,服务于网页的nodejs服务器以及服务于java后端的wildfly服务器。

这个堆栈是在我的构build服务器(concourse ci)中的一个dind(Docker中的docker)容器中运行的。

但看起来容器在完成量angular器testing时并没有终止。

所以,因为wildfly和nodejs的容器仍在运行,构build任务永远不会结束。

testing结束后,我怎样才能使成功的成败落空?

# Test runner test-runner: image: "${RUNNER_IMG}" privileged: true links: - client - server volumes: - /Users/me/frontend_test/client-devops:/protractor/project - /dev/shm:/dev/shm entrypoint: - /entrypoint.sh - --baseUrl=http://client:9000/dist/ - /protractor/conf-dev.js - --suite=remember # Client deployment client: image: "${CLIENT_IMG}" links: - server # Server deployment server: image: "${SERVER_IMG}" 

与rspec q / a类似,您需要将testing作为独立任务运行,将退出状态报告给CI。

您可以将testing运行器分离到自己的yaml中,或将testing运行器修改为默认为no op命令/入口点。

分开testing跑步者

单独指定test-runnerconfiguration(您可能需要升级到版本2 networks而不是使用links跨多个撰写文件工作)。

 docker-compose up -d docker-compose -f test-runner.yml run test-runner rc=$? docker-compose down exit $rc 

没有运行testing运行

test-runner默认为no op入口点/命令,然后手动运行testing命令

 services: test-runner: image: "${RUNNER_IMG}" command: 'true' 

然后

 docker-compose up -d docker-compose run test-runner /launch-tests.sh rc=$? docker-compose down exit $rc 

返回码

如果您的configuration项具有“发布任务”的概念,则可以跳过rc捕获,并在完成testing运行者CI任务后运行docker-compose down 。 您的CI也可能为您清理容器。

我发现最优雅的解决scheme是在depends_on docker-compose.yml文件中使用depends_on

 services: dynamodb: ... test_runner: ... depends_on: - dynamodb 

现在你可以使用docker-compose run --rm test_runner来设置你的依赖关系,运行testing,拆除所有东西,并传播返回代码。

 docker-compose run test_runner false Starting test_dynamodb_1 ... done echo $? 1 docker-compose run test_runner true Starting test_dynamodb_1 ... done echo $? 

您可以使用Concourse中的任务步骤进行清理任务。 http://concourse.ci/ensure-step.html

在你的情况下,你可以在量angular器testing后添加一个ensure块,然后运行一个任务来拆卸docker-compose之前的东西。 你也可以使用on-success步骤http://concourse.ci/on-success-step.html来拆卸,如果你的testing失败, docker-compose的d容器将被保留。