大厅 CI - 如何 运行 功能测试?
Concourse CI - how to run functional tests?
我们正处于从 Jenkins 迁移到 Concourse CI 的过程中,到目前为止一切都很顺利。但是现在我遇到了问题,我不知道如何解决。我想从社区获得任何建议。
我正在尝试做的是一项可以使用 Selenium 运行 集成或功能(网络)测试的工作。我们有几个问题:
- 为了 运行 网络测试,我需要设置数据库(以及可选的搜索引擎、代理等...)代理以尽可能接近地模拟生产环境。
理想情况下,应该通过 docker-compose.
来设置
- 此数据库服务应该 运行 与我的测试并行
- 这个数据库服务不应该 return 任何东西,既不是错误也不是成功,因为它只启动数据库而不是其他任何东西
- 在数据库准备好之前我的网络测试不应该开始
- 所有网络测试完成后,应停止此数据库服务
如您所见,这是一项非常重要的任务。当然,我可以创建一个包含我需要的一切的大型超级容器,但这是一个糟糕的解决方案。另一种选择是为此创建一个 shell 脚本,但这不够灵活。
是否有我可以如何实施该问题的示例或针对此问题的良好做法?
谢谢!
从版本 1.3.0 开始,您似乎可以 运行 Docker-撰写任务:https://github.com/concourse/concourse/issues/324
这似乎有效:
jobs:
- name: docker-compose
public: true
serial: true
plan:
- do:
- task: docker-compose
timeout: 20m
privileged: true
config:
platform: linux
image_resource:
type: docker-image
source: {repository: "mumoshu/dcind", tag: "latest"}
run:
path: sh
args:
- -exc
- |
source /docker-lib.sh
start_docker
docker ps
docker-compose version
对我来说听起来并不复杂。我写了一个 post 关于如何得到类似的东西 运行ning here。我为堆栈和测试 运行ner 使用了一些不同的容器,并从官方 docker:dind 图像启动了所有内容,其中安装了 docker-compose...
超出通常的范围 CI 获取资源等内容。
执行测试-运行 将包括:
- 使用 docker-compose up 启动网络、休息和其他服务。
- 启动测试运行ner 服务并启动测试套件
与其余层通信的网页,而其余层又是
取决于其他服务的响应。
- 在测试运行ner 完成时执行docker-compose
决定任务的 return-code (0=fail, 1=success) 基于
return 测试套件的代码。
要干净地设置和拆除堆栈并测试 运行ner 你可以做类似下面的事情,(也许你可以使用 depends 如果你的服务在测试开始时没有启动,对我来说它没有)
# Setup the SUT stack:
docker-compose up -d
# Run the test-runner container outside of the SUT to be able to teardown the SUT when testing is completed:
docker-compose run --rm test-runner --entrypoint '/entrypoint.sh /protractor/project/conf-dev.js --baseUrl=http://web:9000/dist/ --suite=my_suite'
# Store the return-code from the tests and teardown:
rc=$?
docker-compose down
echo "exit code = $rc "
kill %1
exit $rc
这是 Concourse 作者的评论:
There is no Docker binary or socket on the host - they're just running a Garden backend (probably Guardian). Concourse runs at an abstraction layer above Docker, so providing any sort of magic there doesn't really make sense.
The one thing missing post-1.3 is that Docker requires you to set up cgroups yourself. I forgot how annoying that is. I wish they did what Guardian does and auto-configure it, but what can ya do.
So, the full set of instructions is:
Use or a build an image with docker in it, e.g. docker:dind.
Run the following at the start of your task: https://github.com/concourse/docker-image-resource/blob/master/assets/common.sh#L1-L40
Spin up Docker with docker daemon &.
Then you can run docker-compose and friends as normal.
The downside of this is that you'll be fetching the images every time. #230 will address that.
In the long run, #324 (comment) is the direction I want to go.
看这里https://github.com/concourse/concourse/issues/324
与接受的答案一样,Slack 存档数据已删除(由于 Slack 限制)
专用于用例的 docker 图像:https://github.com/meAmidos/dcind
我们正处于从 Jenkins 迁移到 Concourse CI 的过程中,到目前为止一切都很顺利。但是现在我遇到了问题,我不知道如何解决。我想从社区获得任何建议。
我正在尝试做的是一项可以使用 Selenium 运行 集成或功能(网络)测试的工作。我们有几个问题:
- 为了 运行 网络测试,我需要设置数据库(以及可选的搜索引擎、代理等...)代理以尽可能接近地模拟生产环境。 理想情况下,应该通过 docker-compose. 来设置
- 此数据库服务应该 运行 与我的测试并行
- 这个数据库服务不应该 return 任何东西,既不是错误也不是成功,因为它只启动数据库而不是其他任何东西
- 在数据库准备好之前我的网络测试不应该开始
- 所有网络测试完成后,应停止此数据库服务
如您所见,这是一项非常重要的任务。当然,我可以创建一个包含我需要的一切的大型超级容器,但这是一个糟糕的解决方案。另一种选择是为此创建一个 shell 脚本,但这不够灵活。
是否有我可以如何实施该问题的示例或针对此问题的良好做法?
谢谢!
从版本 1.3.0 开始,您似乎可以 运行 Docker-撰写任务:https://github.com/concourse/concourse/issues/324
这似乎有效:
jobs:
- name: docker-compose
public: true
serial: true
plan:
- do:
- task: docker-compose
timeout: 20m
privileged: true
config:
platform: linux
image_resource:
type: docker-image
source: {repository: "mumoshu/dcind", tag: "latest"}
run:
path: sh
args:
- -exc
- |
source /docker-lib.sh
start_docker
docker ps
docker-compose version
对我来说听起来并不复杂。我写了一个 post 关于如何得到类似的东西 运行ning here。我为堆栈和测试 运行ner 使用了一些不同的容器,并从官方 docker:dind 图像启动了所有内容,其中安装了 docker-compose...
超出通常的范围 CI 获取资源等内容。 执行测试-运行 将包括:
- 使用 docker-compose up 启动网络、休息和其他服务。
- 启动测试运行ner 服务并启动测试套件 与其余层通信的网页,而其余层又是 取决于其他服务的响应。
- 在测试运行ner 完成时执行docker-compose 决定任务的 return-code (0=fail, 1=success) 基于 return 测试套件的代码。
要干净地设置和拆除堆栈并测试 运行ner 你可以做类似下面的事情,(也许你可以使用 depends 如果你的服务在测试开始时没有启动,对我来说它没有)
# Setup the SUT stack:
docker-compose up -d
# Run the test-runner container outside of the SUT to be able to teardown the SUT when testing is completed:
docker-compose run --rm test-runner --entrypoint '/entrypoint.sh /protractor/project/conf-dev.js --baseUrl=http://web:9000/dist/ --suite=my_suite'
# Store the return-code from the tests and teardown:
rc=$?
docker-compose down
echo "exit code = $rc "
kill %1
exit $rc
这是 Concourse 作者的评论:
There is no Docker binary or socket on the host - they're just running a Garden backend (probably Guardian). Concourse runs at an abstraction layer above Docker, so providing any sort of magic there doesn't really make sense.
The one thing missing post-1.3 is that Docker requires you to set up cgroups yourself. I forgot how annoying that is. I wish they did what Guardian does and auto-configure it, but what can ya do.
So, the full set of instructions is:
Use or a build an image with docker in it, e.g. docker:dind. Run the following at the start of your task: https://github.com/concourse/docker-image-resource/blob/master/assets/common.sh#L1-L40 Spin up Docker with docker daemon &.
Then you can run docker-compose and friends as normal.
The downside of this is that you'll be fetching the images every time. #230 will address that.
In the long run, #324 (comment) is the direction I want to go.
看这里https://github.com/concourse/concourse/issues/324
与接受的答案一样,Slack 存档数据已删除(由于 Slack 限制)
专用于用例的 docker 图像:https://github.com/meAmidos/dcind