使用Docker按需运行远程Bamboo代理

我试图看看是否可以自动启动一个CI构build环境的竹容器

理想情况下,我希望任意数量的随机容器能够自动启动并销毁自己的内部版本,而无需使用Docker撰写任何修改远程服务器的修补程序。

我们有很多不同项目,有不同的依赖关系。 所以当一个开发人员运行一个构build时,我的目标是应该出现一个特定于该构build的容器,将其添加到可用的远程代理的列表中,运行该构build,然后自行销毁。

有没有人尝试类似或有任何build议,看看这是否可行?

谢谢

我已经在Docker上和Bamboo以及远程代理人一起工作了一段时间,而且碰巧试图达到同样的目的。 简单地回答你的问题: 不,这在我看来是不可行的 。 你想要做的事情基本上是Atlassian所说的弹性代理,但现在只适用于AWS。

在目前情况下,构build排队时无法产生新的代理。 然而,你可以做的是为你的每个计划设置一个第一阶段,以启动执行第二阶段所需的Docker容器。 您的下一个阶段将需要设置Bamboo依赖项,以便只有您产生的Docker容器才能够处理它。

虽然这将工作,让我告诉你什么缺陷,你应该期望这样做:

  • 下一个阶段将在Docker容器中运行,在构build结束时将容器自身closures将导致Bamboo构build失败。 你可以在主机上的一个代理程序的最后阶段做到这一点,但如果你的构build由于某种原因失败,你将永远不会到达这个阶段
  • 并发构build和错误检查将更难以处理

我们在我工作的地方做了什么只是支付许可证,允许更多的代理,并在他们自己的Docker容器中运行,以实现更多的代理隔离。 你可以期望通过浪费你的时间来build立这样的系统,而不是为更多的代理商付出更多的钱。

如果你的问题不是关于金钱,而是更多关于处理大量不同的configuration,你可以考虑在一个阶段开始时运行Docker容器,并使用docker exec将所有命令转发给它。 尽pipe如此,这仍然不容易。

我们(Atlassian Build Engineering)已经创build了一系列插件,用于在联机的群集(ECS)中运行多个基于Docker的代理,构build一个作业,然后退出。 它应该能够做到你的愿望。 我们最近开源了解决scheme。

有关更多详细信息,请参阅https://bitbucket.org/atlassian/per-build-container

这就是为什么Docker对于CI构build来说很好的原因,你有一个竹代理驻留在一个服务器上,它可以访问Docker二进制文件。 在您的构build脚本中,您可以拖放,创build,运行和销毁任何需要运行的Docker映像的任何版本。 例如,需要针对不同版本的节点运行testing,只需要检出目录,然后a

docker拉/运行节点:0.X – >收集testing

docker拉/运行节点:4.X – >收集testing

docker拉/运行节点:6.X – >收集testing

这实际上就是我们如何在我们公司运行构build。 我前一段时间写了关于我们的设置: http : //blog.brianmkelley.com