【问题标题】:CI testing with docker-compose on Jenkins with Kubernetes使用 Kubernetes 在 Jenkins 上使用 docker-compose 进行 CI 测试
【发布时间】:2018-10-16 11:32:39
【问题描述】:

目前似乎没有针对此用例的解决方案。我发现了与此问题相关的其他问题; herehere

我正在寻找可以让我运行docker-compose 的解决方案。我找到了solutions for running docker,但不是为了运行docker-compose

我希望其他人已经有这个用例并找到了解决方案。


编辑:让我澄清一下我的用例:

  1. 当我检测到有效触发器(即:推送到 repo)时,我需要开始新工作。
  2. 我需要设置一个包含多个 docker/instances (docker-compose) 的环境。
  3. 此环境中的实例需要从 git 访问代码(装载卷/使用数据创建新映像)。
  4. 我需要在这个环境中运行测试。
  5. 然后我需要从这些实例中检索结果(供 Jenkins 解析的 JUnit 测试结果)。

我遇到的问题是 2 和 3。

对于 2,由于 docker 上下文是共享的(docker-in-docker 问题),因此并行运行(不止一项作业)存在问题。如果它在多个节点上运行,那么我会因为共享资源(例如端口)而发生冲突。 我的解决方法是仅将其限制为一个正在运行的实例,并将其余实例排队(不适合 CI)

对于 3,由于 docker 上下文是共享的(docker-in-docker 问题),因此安装卷存在问题。我无法挂载我在作业中签出的代码,因为它不存在于负责运行我触发的 docker 实例的主机上。 我的解决方法是从我的模板构建一个新图像,然后将代码复制到新图像中,然后将其用于测试(这可行,但意味着我需要使用 docker cp 技巧来取回数据,这也不理想)

【问题讨论】:

    标签: jenkins kubernetes continuous-integration google-cloud-platform docker-compose


    【解决方案1】:

    我认为更好的方法是使用纯 Kubernetes 资源直接由 Kubernetes 运行测试,而不是由docker-compose

    您可以使用 kompose utility 将您的 docker-compose 文件转换为 Kubernetes 资源。

    您可能需要对转换结果进行一些调整,或者您应该手动将 docker-compose 对象转换为 Kubernetes 对象。可能,您可以将 Jobs 与多个容器一起使用,而不是部署 + 服务的组合。

    无论如何,我绝对建议您使用 Kubernetes 抽象,而不是在 Kubernetes 中运行像 docker-compose 这样的工具。

    此外,您仍然可以使用 Minikube 在本地运行测试,从而在您的 PC 上生成小型一体化集群。

    【讨论】:

    • 谢谢 Anton,我找到了一个成功的解决方法,可以根据需要使用 docker-compose。但是它不能扩展(我通过创建新的 docker 镜像作为 CI 的一部分消除了挂载卷的需要,该 CI 已经包含了我想通过使用 ADD 挂载的数据)但是现在的问题是它们都在相同的上下文中运行( docker-in-docker 再次出现问题)所以我一直在考虑使用 Kubernetes-only 解决方案。但似乎还没有完全建立,你有一些链接可以展示如何大致做我正在尝试的事情吗?
    • 你可以查看that的文章例如。那家伙使用 Jobs 在 Kubernetes 中运行 e2e 测试。
    • 感谢您提供的链接,它可能很有用,但它并不是我想要的,它没有在 Jenkins 上使用 Kubernetes,而这正是我所需要的。
    • 您可以在没有插件的情况下从 Jenkins 调用 Kubernetes,直接通过 kubectl 或使用 Kubernetes API。所以,这是两件不同的事情——在集群内产生工人和产生工作。此外,即使您的 Jenkins 未连接到集群,您也可以生成作业。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2021-01-05
    • 1970-01-01
    • 2020-09-25
    • 2018-10-16
    • 2021-08-19
    相关资源
    最近更新 更多