【问题标题】:Is there Jenkins or other open-source CI for a distributed system?分布式系统是否有 Jenkins 或其他开源 CI?
【发布时间】:2016-09-20 01:59:24
【问题描述】:
我有一组组成分布式系统的有状态服务。每个都有一个 Docker 文件,可以构建它并运行它的单元测试。我需要检查它们如何以分布式方式相互交互。要运行测试,我需要:
- 能够在不同节点上同时运行多个 Docker 文件,这将被视为一次测试运行。
- 能够在每个 Docker 文件的命令执行顺序中设置障碍。换句话说,假设所有 Docker 文件同时运行,我需要确保所有文件在开始阶段
Y 之前完成阶段 X。
- 能够在任何节点发生故障时停止。
是否有针对此类操作的 Jenkins 插件/扩展,或者是否有任何其他系统或方法可以解决此类问题?
【问题讨论】:
标签:
jenkins
service
docker
continuous-integration
distributed-computing
【解决方案1】:
使用带有自动缩放功能的 gitlab 和 gitlab-ci,
这是开箱即用的支持,请参阅autoscale runners Gitlab-CI,它使用 Docker Machine 和驱动程序根据需要自动部署资源,即使在数字海洋上也是如此。
您在 .gitlab-ci.yml 中描述您的构建和测试:
- 定义不同的阶段,(build, test1 ....)
- 每个阶段的所有构建/测试都必须在进入下一阶段之前完成
- 每个阶段都并行运行,当然取决于可用的资源。
查看我的简单 docker 管道here。
备注 1:当机密性成为问题时,您可以
- 一个。在 gitlab 上创建一个私有仓库
- 乙。在您自己的服务器上托管 gitlab*
备注 2:当代码托管在其他地方(例如 github)时,您可以在每次提交时将其推送到 gitlab 以启动构建管道。
如果您需要专业人员来设置这样的项目,您可以联系我,但这超出了本问题/答案的范围
【解决方案3】:
您始终可以编写 Jenkins 可以执行的 bash 或 powershell 脚本来执行此操作。
【解决方案4】:
首先将您的集成测试移到 Docker 构建步骤之外。单元测试仍然可以在那里运行,但我更愿意在容器外部单独执行这些测试,以最大限度地减少构建映像中的测试代码量。
对于多容器集成测试,他们需要在docker run 而不是docker build 之后运行它们。这允许您为每个容器指定一个 dns 连接的名称,并控制每个测试运行的顺序。您甚至可以将每个测试存储为 docker-compose.yml 并处理结果。
通过将测试与映像构建分开,您可以将测试添加为 Jenkins 流水线中的一个步骤,让您能够并行运行各个部分,并在每个阶段等待完成后再继续。