7

我们正在从 Jenkins 迁移到Concourse CI的过程中,到目前为止一切都非常顺利。但是现在我有问题,我不知道如何解决。我想从社区获得任何建议。

我想做的是一项可以使用 Selenium 运行集成或功能(Web)测试的工作。对我们来说有几个问题:

  1. 要运行 Web 测试,我需要设置数据库(以及可选的搜索引擎、代理等)代理以尽可能接近地模拟生产环境。理想情况下,它应该由docker-compose设置。
  2. 此数据库服务应与我的测试并行运行
  3. 这个数据库服务不应该返回任何东西,无论是错误还是成功,因为它只启动数据库而没有别的
  4. 在数据库准备好之前,我的网络测试不应该开始
  5. 完成所有 Web 测试后,应停止此数据库服务

如您所见,这是一项非常重要的任务。当然,我可以创建一个包含我需要的一切的大型超级容器,但这是一个糟糕的解决方案。另一种选择是为此创建一个 shell 脚本,但这不够灵活。

是否有任何示例我可以如何实施该问题或针对此问题的良好做法?

谢谢!

4

3 回答 3

9

从 1.3.0 版开始,您似乎可以在任务中运行 Docker-compose: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
于 2016-06-28T19:57:16.010 回答
3

这是Concourse作者的评论:

主机上没有 Docker 二进制文件或套接字——它们只是运行一个 Garden 后端(可能是 Guardian)。Concourse 在 Docker 之上的抽象层上运行,因此在那里提供任何类型的魔法都没有任何意义。

1.3 后缺少的一件事是 Docker 要求您自己设置 cgroup。我忘了那有多烦人。我希望他们能像 Guardian 所做的那样自动配置它,但你能做什么。

所以,完整的指令集是:

使用或构建一个包含 docker 的镜像,例如 docker:dind。在任务开始时运行以下命令:https ://github.com/concourse/docker-image-resource/blob/master/assets/common.sh#L1-L40 使用 docker daemon & 启动 Docker。

然后你可以正常运行 docker-compose 和朋友。

这样做的缺点是您每次都将获取图像。#230 将解决这个问题。

从长远来看,#324(评论)是我想要去的方向。

见这里https://github.com/concourse/concourse/issues/324

正如在接受的答案中,Slack 存档数据被删除(由于 Slack 限制)

专门用于用例的 docker 映像:https ://github.com/meAmidos/dcind

于 2017-03-09T10:14:11.373 回答
-1

对我来说这听起来并不复杂。我写了一篇关于如何让类似的东西在这里运行的帖子。我为堆栈和测试运行器使用了一些不同的容器,并从安装了 docker-compose 的官方 docker:dind 映像启动所有内容......

除了获取资源等通常的大厅 CI 内容之外。执行测试运行将包括:

  1. 使用 docker-compose up 启动 web、rest 和其他服务。
  2. 启动 Testrunner 服务并在与其余层通信的网页上触发测试套件,而其余层又依赖于其他服务的响应。
  3. 当测试运行器完成时执行 docker-compose down 并根据测试套件的返回码决定任务的返回码(0=失败,1=成功)。

要干净地设置和拆除堆栈和测试运行器,您可以执行以下操作,(如果您的服务在测试开始时没有启动,也许您可​​以使用取决于,对我来说,它可以在没有的情况下工作)

# 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
于 2016-12-26T21:46:10.943 回答