分布式系统是不是有 Jenkins 或其他开源 CI?
Posted
技术标签:
【中文标题】分布式系统是不是有 Jenkins 或其他开源 CI?【英文标题】: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 插件/扩展,或者是否有任何其他系统或方法可以解决此类问题?
【问题讨论】:
【参考方案1】:使用带有自动缩放功能的 gitlab 和 gitlab-ci,
这是开箱即用的支持,请参阅autoscale runners Gitlab-CI,它使用 Docker Machine 和驱动程序根据需要自动部署资源,即使在数字海洋上也是如此。
您在 .gitlab-ci.yml 中描述您的构建和测试:
定义不同的阶段,(build, test1 ....) 每个阶段的所有构建/测试都必须在进入下一阶段之前完成 每个阶段都并行运行,当然取决于可用的资源。查看我的简单 docker 管道here。
备注 1:当机密性成为问题时,您可以
一个。在 gitlab 上创建一个私有仓库 乙。在您自己的服务器上托管 gitlab*备注 2:当代码托管在其他地方(例如 github)时,您可以在每次提交时将其推送到 gitlab 以启动构建管道。
如果您需要专业人员来设置这样的项目,您可以联系我,但这超出了本问题/答案的范围
【讨论】:
【参考方案2】:CloudBees(Jenkins 背后的团队)在 Jenkins 2 中为 Docker 支持付出了很多努力:https://jenkins.io/doc/pipeline/steps/docker-workflow/
在我看来还是有点不成熟,但这是朝着好的方向迈出的一步。
我更喜欢 gitlab-ci (https://about.gitlab.com/gitlab-ci/)。它非常易于使用且坚如磐石。不幸的是,对我来说,紧密的版本控制系统集成(如果你想使用 Gitlab-CI,你必须将你的代码放入 GitLab)是一个阻碍(必须将我的代码保留在 Github 上)。
您还可以考虑一些 SaaS 产品,例如: https://travis-ci.org/ https://buddybuild.com/
【讨论】:
【参考方案3】:您始终可以编写 Jenkins 可以执行的 bash 或 powershell 脚本来执行此操作。
【讨论】:
【参考方案4】:首先将您的集成测试移到 Docker 构建步骤之外。单元测试仍然可以在那里运行,但我更愿意在容器外部单独执行这些测试,以最大限度地减少构建映像中的测试代码量。
对于多容器集成测试,他们需要在docker run
而不是docker build
之后运行它们。这允许您为每个容器指定一个 dns 连接的名称,并控制每个测试运行的顺序。您甚至可以将每个测试存储为 docker-compose.yml 并处理结果。
通过将测试与映像构建分开,您可以将测试添加为 Jenkins 流水线中的一个步骤,让您能够并行运行各个部分,并在每个阶段等待完成后再继续。
【讨论】:
以上是关于分布式系统是不是有 Jenkins 或其他开源 CI?的主要内容,如果未能解决你的问题,请参考以下文章