【问题标题】:Managing resources (database, elasticsearch, redis, etc) for tests using Docker and Jenkins使用 Docker 和 Jenkins 为测试管理资源(数据库、elasticsearch、redis 等)
【发布时间】:2016-04-30 02:06:03
【问题描述】:

我们需要使用 Jenkins 来测试一些各自需要的 web 应用:

  • 一个数据库(在我们的例子中是 postgres)
  • 一种搜索服务(在我们的例子中是 ElasticSearch,但只是有时)
  • 缓存服务器,例如 redis

到目前为止,我们刚刚在 Jenkins 主服务器上运行了这些服务,但是当我们想要升级 Postgres、ES 或 Redis 版本时,这会导致问题。并非所有应用都可以同步移动,我们希望在将应用移动到生产环境之前在新版本上运行测试。

我们想做的是在每个作业运行的基础上提供这些服务,每个服务都在自己的容器中运行。

编排这些容器的最佳方式是什么?

  • 无论作业成功与否,如何启动这些辅助容器并拆除它们?

  • 如何防止端口冲突,例如,一个 Web 应用程序的作业运行中的数据库与另一个 Web 应用程序的作业中的数据库之间的端口冲突?

【问题讨论】:

    标签: postgresql elasticsearch jenkins docker redis


    【解决方案1】:

    检查docker-compose 并为您的测试编写一个 docker-compose 文件。 Docker(私有网络)的latest network features 将帮助您隔离并行运行的构建。

    但是,开始学习 docker-compose,就好像您同时只有一个版本一样。如果对此有信心,请进一步查找有关网络的高级 docker 文档。

    【讨论】:

    • 这当然是“正确”的答案,但我们被困在 Docker 1.8 上,您所指的功能需要更新版本的 docker api 才能工作。其他选项是什么?
    • 网络的“祖先”是“链接”。您应该能够为单个作业“链接”所有容器。为了能够并行执行多个作业,我将致力于提供链接的动态名称(例如:脚本生成具有唯一链接名称的 docker-compose yml 文件)。在您的机器上等待 Docker 升级时,这将是一个技巧。
    猜你喜欢
    • 2012-06-12
    • 2012-07-18
    • 2010-09-11
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 2022-07-25
    • 2021-08-22
    • 2019-02-17
    相关资源
    最近更新 更多