Dav*_*son 27 docker docker-compose concourse
我目前正在运行一个docker-compose堆栈,用于基本集成测试,包括量角器测试运行器,服务于网页的nodejs服务器和服务于java后端的wildfly服务器.
堆栈是从我的构建服务器(concourse ci)中的dind(docker in docker)容器中运行的.
但似乎容器在完成量角器测试时不会终止.
因此,由于wildfly和nodejs的容器仍在运行,因此构建任务永远不会完成......
如何在测试结束时使作曲成功或失败?
# 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}"
Run Code Online (Sandbox Code Playgroud)
Mic*_*tor 60
您可以使用这些docker-compose参数来实现:
--abort-on-container-exit 如果任何容器停止,则停止所有容器.
--exit-code-from 返回所选服务容器的退出代码.
例如,有这个docker-compose.yml:
version: '2.3'
services:
elasticsearch:
...
service-api:
...
service-test:
...
depends_on:
- elasticsearch
- service-api
Run Code Online (Sandbox Code Playgroud)
下面的命令确保elasticsearch和service-api后下井service-test完成,并返回了退出代码service-test容器:
docker-compose -f docker-compose.yml up \
--abort-on-container-exit \
--exit-code-from service-test
Run Code Online (Sandbox Code Playgroud)
won*_*ton 19
我发现最优雅的解决方案是depends_on在您的docker-compose.yml文件中使用.
services:
dynamodb:
...
test_runner:
...
depends_on:
- dynamodb
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用docker-compose run --rm test_runner哪个将设置依赖项,运行测试,拆除所有内容,并传播返回代码.
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 $?
Run Code Online (Sandbox Code Playgroud)
Mat*_*att 16
与此rspec q/a类似,您需要将测试作为独立任务运行,以将退出状态报告回CI.
您可以将测试运行器分隔到它自己的yaml中,或者将test-runner修改为默认为no op命令/入口点.
test-runner单独指定配置(您可能需要升级到版本2,networks而不是使用links跨多个撰写文件).
docker-compose up -d
docker-compose -f test-runner.yml run test-runner
rc=$?
docker-compose down
exit $rc
Run Code Online (Sandbox Code Playgroud)
默认test-runner为无操作入口/命令,然后手动运行测试命令
services:
test-runner:
image: "${RUNNER_IMG}"
command: 'true'
Run Code Online (Sandbox Code Playgroud)
然后
docker-compose up -d
docker-compose run test-runner /launch-tests.sh
rc=$?
docker-compose down
exit $rc
Run Code Online (Sandbox Code Playgroud)
如果您的CI具有"发布任务"的概念,您可以跳过rc捕获并docker-compose down在测试运行器CI任务完成后运行.您的CI也可以为您清理容器.
| 归档时间: |
|
| 查看次数: |
8564 次 |
| 最近记录: |