我目前正在运行一个docker-comment堆栈,用于与量角器测试运行器、一个服务于网页的nodejs服务器和一个服务于java后端的野飞服务器进行基本集成测试。
堆栈是从我的构建服务器(con课程ci)中的dind(docker中的docker)容器运行的。
但是看起来容器并没有在完成量角器测试后终止。
因此,由于wildfly和NodeJ的容器仍在运行,构建任务从未完成。。。
当测试结束时,我怎样才能让作文以成功或失败告终?
# 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}"
我发现最优雅的解决方案是在docker compose中使用
文件。dependens\u
。yml
services:
dynamodb:
...
test_runner:
...
depends_on:
- dynamodb
现在,您可以使用docker-comment run--rmtest_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 $?
Compose已将--exit code from{container}
标志添加到docker Compose up
,这使得此操作更加容易。
docker-compose up --exit-code-from test-runner
有关更多详细信息,请参见Michael Spector的答案。
与此rspec q/a类似,您需要将测试作为独立任务运行,并向CI报告退出状态。
您可以将测试运行程序分离到它自己的yaml中,或者将测试运行程序修改为默认为无操作命令/入口点。
单独指定测试运行器配置(您可能需要升级到版本2网络
,而不是使用链接
跨多个撰写文件工作)。
docker-compose up -d
docker-compose -f test-runner.yml run test-runner
rc=$?
docker-compose down
exit $rc
将测试运行程序
默认为无操作入口点/命令,然后手动运行测试命令
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
如果您的CI具有“发布任务”的概念,您可能可以跳过rc
捕获,在测试运行器CI任务完成后只运行docker compose down
。您的CI也可能为您清理容器。
您可以使用这些docker-comact参数来实现:
--abort-on-conport-exout
如果任何容器被停止,则停止所有容器。
--exit code from
返回所选服务容器的退出代码。
例如,具有这个docker-compose.yml
:
version: '2.3'
services:
elasticsearch:
...
service-api:
...
service-test:
...
depends_on:
- elasticsearch
- service-api
以下命令确保elasticsearch
和service api
在service test
完成后关闭,并从service test
容器返回退出代码:
docker-compose -f docker-compose.yml up \
--abort-on-container-exit \
--exit-code-from service-test
问题内容: 我是python和线程的新手。我已经编写了充当网络爬虫的python代码,并在网站中搜索特定的关键字。我的问题是,如何使用线程同时运行类的三个不同实例。当实例之一找到关键字时,所有三个实例都必须关闭并停止爬网。这是一些代码。 如何使用线程让Crawler同时执行三个不同的爬网? 问题答案: 似乎没有一种(简单的)方法可以终止Python中的线程。 这是一个并行运行多个HTTP请求的简单
问题内容: 我想在控制台上键入: 在终止之前执行脚本。那可能吗? 问题答案: docker stop命令首先尝试通过向容器中的根进程(PID 1)发送SIGTERM信号来停止正在运行的容器。如果该进程在超时时间内仍未退出,则将发送SIGKILL信号。 实际上,这意味着您必须定义一个ENTRYPOINT脚本,该脚本将拦截(捕获)SIGTERM信号并执行适当的任何关闭逻辑。 样本入口点脚本可能如下所示
Docker containers are available that contain the complete PX4 development toolchain including Gazebo and ROS simulation: px4io/px4-dev: toolchain including simulation px4io/px4-dev-ros: toolchain incl
只是想知道在我完成输入后如何终止程序?因为在几次“输入”之后扫描仪仍然会继续,假设我要继续输入...我试过了: 和 它们不起作用....程序继续运行,打乱了初衷,
问题内容: 看一下这个人为的例子: 该程序的输出将仅为“ This will print”。goroutine的输出并且不会被发出,因为我想函数线程将在goroutines甚至有机会开始执行之前完成。 使类似的代码在Golang中工作并且不提前终止的惯用方式是什么? 问题答案: 最简单,最干净和“可扩展”的方法是使用: 输出(在Go Playground上尝试): 执行以下操作时要遵循的简单“规则
问题内容: Eclipse在以下代码中给我该警告: 我的代码有什么问题? 问题答案: 从中删除return语句。最终块被认为是清除块,通常不希望在其中返回。