Jenkins或其他开源的CI是否有分布式系统?

我有一套组成分布式系统的全状态服务。 每个人都有一个Docker文件,可以构build它并运行其unit testing。 我需要检查他们如何以分布式方式互相交互。 要运行testing,我需要:

  • 能够在不同节点上同时运行多个Docker文件,这将被视为单个testing运行。
  • 能够在每个Docker文件的命令执行顺序中设置障碍。 换句话说,假设所有的Docker文件同时运行,我需要确保所有的文件在Y阶段开始之前已经完成了阶段X
  • 能够停止任何节点的故障。

有没有Jenkins插件/扩展这样的操作,还是有任何其他系统或方法可以解决这个问题?

使用gitlab和gitlab-ci进行自动缩放,

这是开箱即用的,请参阅自动缩放的跑步者Gitlab-CI ,它使用Docker Machine和驱动程序根据需要自动部署资源,甚至在数字海洋上。

你在.gitlab-ci.yml中描述你的构build和testing:

  • 定义不同的阶段,(build,test1 ….)
  • 在进入下一阶段之前,每个阶段的所有构build/testing都必须完成
  • 每个阶段都是平行的,当然取决于可用的资源。

看到我这个简单的dockerpipe道。

备注1:当保密是一个问题,你可以

  • 一个。 在gitlab上创build一个私有存储库
  • 湾 在您自己的服务器上托pipegitlab *

备注2:当代码托pipe在其他地方(例如github)时,可以在每次提交时将其推送到gitlab以启动构buildpipe道。

如果你需要一个专业人员来设置这样一个项目,你可以联系我,但这不在这个问题/答案的范围之内

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/

你总是可以写一个Jenkins可以执行的bash或powershell脚本来执行此操作。

首先将您的集成testing移到Docker构build步骤之外。 unit testing仍然可以在那里运行,但是我更愿意在容器之外单独执行这些testing,以最小化构build图像内的testing代码。

对于多容器集成testing,他们需要在docker run而不是docker build之后运行它们。 这允许您为每个容器指定一个dns连接的名称,并控制每个testing运行的顺序。 您甚至可以将每个testing存储为docker-compose.yml并处理结果。

通过从图像构build中分离出来的testing,您可以将testing添加为Jenkinspipe道中的一个步骤,从而使您能够并行运行部件,并在每个阶段上等待完成,然后继续。