首页 > 解决方案 > 使用 Kubernetes 在 Jenkins 上使用 docker-compose 进行 CI 测试

问题描述

似乎现在这个用例没有解决方案。我发现了与此问题相关的其他问题;这里这里

我正在寻找能让我跑步的解决方案docker-compose。我找到了跑步的解决方案docker,但没有找到跑步的解决方案docker-compose

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


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

  1. 当我检测到一个有效的触发器(即:推送到回购)时,我需要开始一份新工作。
  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 技巧来取回数据,这也不是理想的)

标签: jenkinskubernetescontinuous-integrationgoogle-cloud-platformdocker-compose

解决方案


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

kompose 您可以使用实用程序将 docker-compose 文件转换为 Kubernetes 资源。

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

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

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


推荐阅读