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

时间:2016-01-16 15:07:47

标签: docker continuous-integration bamboo

我正在尝试查看为CI构建环境自动启动Bamboo容器是否可行

理想情况下,我希望任意数量的随机容器能够自动启动并为构建销毁自己,而无需使用docker compose对远程服务器进行任何修改。

我们有大量不同的项目,具有不同的依赖性。所以当dev运行构建时,我的目标是应该出现一个特定于该构建的容器,将其自身添加到可行的远程代理列表中,运行该构建,然后自行销毁。

有没有人尝试过任何相似或有任何建议,看看这是否可行?

由于

3 个答案:

答案 0 :(得分:4)

我们(Atlassian Build Engineering)创建了一组插件,用于在群集(ECS)中运行基于Docker的代理,这些代理联机,构建单个作业然后退出。它应该能够做你想要的。我们最近开源了解决方案。

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

答案 1 :(得分:2)

我已经和Dock上的Bamboo和远程代理工作了一段时间,我碰巧试图达到同样的目的。简单地回答你的问题:不,我认为这不可行。 您尝试做的基本上是Atlassian所谓的弹性代理,但它现在仅适用于AWS。

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

虽然这样可行,但是让我告诉你这样做有什么缺陷:

  • 下一个阶段将在Docker容器内运行,在构建结束时终止容器本身将导致Bamboo构建失败。您可以在最后阶段从主机上的代理程序运行,但如果您的构建由于某种原因而失败,您将永远无法进入该阶段
  • 并发构建和错误检查将更难以处理

我们最终在工作的地方做的只是支付许可证,允许更多的代理商在自己的Docker容器中运行它们以获得更多的代理隔离。你可以通过浪费你的时间设置这样的系统而不是只为更多的代理商支付更多的钱。

如果你的问题不是钱,而是更多关于必须处理许多不同的配置,你可以考虑在阶段的开始运行Docker容器并使用docker exec将所有命令转发给它。但这仍然不容易设置。

答案 2 :(得分:0)

这正是Docker非常适合CI构建的原因,您有一个Bamboo代理驻留在服务器上,可以访问Docker二进制文件。在构建脚本中,您可以提取,创建,运行和销毁任何需要运行的Docker镜像版本。例如需要针对各种版本的Node运行测试只需要检出目录,然后是

docker pull / run node:0.X - >收集测试

docker pull / run node:4.X - >收集测试

docker pull / run node:6.X - >收集测试

这实际上是我们在公司运行构建的方式。我之前写过关于我们设置的文章:http://blog.brianmkelley.com