【发布时间】:2018-10-16 11:32:39
【问题描述】:
- 我有使用
docker-compose环境在本地运行的测试。 - 我想在我们的 CI 中使用 Jenkins 和 Google Cloud 上的 Kubernetes 来实施这些测试(遵循 this setup)。
- I have been unsuccessful 因为docker-in-docker does not work。
目前似乎没有针对此用例的解决方案。我发现了与此问题相关的其他问题; here 和 here。
我正在寻找可以让我运行docker-compose 的解决方案。我找到了solutions for running docker,但不是为了运行docker-compose。
我希望其他人已经有这个用例并找到了解决方案。
编辑:让我澄清一下我的用例:
- 当我检测到有效触发器(即:推送到 repo)时,我需要开始新工作。
- 我需要设置一个包含多个 docker/instances (docker-compose) 的环境。
- 此环境中的实例需要从 git 访问代码(装载卷/使用数据创建新映像)。
- 我需要在这个环境中运行测试。
- 然后我需要从这些实例中检索结果(供 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