jenkins - 使用 Kubernetes 在 Jenkins 上使用 docker-compose 进行 CI 测试
问题描述
- 我有使用
docker-compose
环境在本地运行的测试。 - 我想在我们的 CI 中使用 Jenkins 和 Google Cloud 上的 Kubernetes 来实施这些测试(按照这个设置)。
- 我一直不成功,因为docker-in-docker 不起作用。
似乎现在这个用例没有解决方案。我发现了与此问题相关的其他问题;这里,这里。
我正在寻找能让我跑步的解决方案docker-compose
。我找到了跑步的解决方案docker
,但没有找到跑步的解决方案docker-compose
。
我希望其他人有这个用例并找到了解决方案。
编辑:让我澄清一下我的用例:
- 当我检测到一个有效的触发器(即:推送到回购)时,我需要开始一份新工作。
- 我需要设置一个包含多个 docker/instances (docker-compose) 的环境。
- 此环境中的实例需要从 git 访问代码(安装卷/使用数据创建新图像)。
- 我需要在这个环境中运行测试。
- 然后我需要从这些实例中检索结果(供 Jenkins 解析的 JUnit 测试结果)。
我遇到的问题是2和3。
对于 2,由于 docker 上下文是共享的(docker-in-docker 问题),因此并行运行(不止一项作业)存在问题。如果它在多个节点上运行,那么我会因为共享资源(例如端口)而发生冲突。我的解决方法是仅将其限制为一个正在运行的实例并将其余实例排队(不适合 CI)
对于 3,由于共享 docker 上下文(docker-in-docker 问题),因此安装卷存在问题。我无法挂载我在作业中签出的代码,因为它不存在于负责运行我触发的 docker 实例的主机上。我的解决方法是从我的模板构建一个新图像,然后将代码复制到新图像中,然后将其用于测试(这有效,但意味着我需要使用 docker cp 技巧来取回数据,这也不是理想的)
解决方案
我认为更好的方法是使用纯 Kubernetes 资源直接由 Kubernetes 运行测试,而不是docker-compose
.
kompose
您可以使用实用程序将 docker-compose 文件转换为 Kubernetes 资源。
可能,您需要对转换结果进行一些调整,或者您应该手动将 docker-compose 对象转换为 Kubernetes 对象。可能,您可以只将作业与多个容器一起使用,而不是部署 + 服务的组合。
无论如何,我绝对建议您使用 Kubernetes 抽象,而不是像docker-compose
在 Kubernetes 内部那样运行工具。
此外,您仍然可以使用 Minikube 在本地运行测试,从而在您的 PC 上生成小型一体化集群。
推荐阅读
- greenplum - Greenplum - 主节点是瓶颈?
- css - 不能用组合框省略轮廓
- php - 用新外键替换列值的方法?
- c# - AutoMapper 高级映射
- powershell - 无法获取 Item 的字符串属性并将其转换为 Int
- java - 我的带有 FirebaseRecyclerAdapter 的 RecyclerView 没有在屏幕上显示任何内容
- python - 类型错误:序列项 0:预期的 str 实例,在 Django 应用程序中添加新闻项时找到元组
- sql-server - 如何获取与条件匹配的行的总和
- reactjs - 使用情感时如何解决汇总构建错误:@emotion\memoize\dist\memoize.cjs.js 未导出“默认”
- java - 如何使用 Jackson 库获取 JSON 响应的嵌套属性?