运行 使用 Docker 按需远程 Bamboo 代理
Running Remote Bamboo Agents on Demand Using Docker
我正在尝试查看为 CI 构建环境
自动启动 Bamboo 容器是否可行
理想情况下,我希望任意数量的随机容器能够自动启动并自行销毁以进行构建,而无需使用 docker compose 在远程服务器上进行任何修补。
我们有大量具有不同依赖关系的不同项目。因此,当开发人员 运行 构建时,我的目标是应该出现一个特定于该构建的容器,将其自身添加到可行的远程代理列表中,运行 构建,而不是销毁自身。
有没有人尝试过类似的东西或有任何建议看看这是否可行?
谢谢
我已经在 Docker 上使用 Bamboo 和远程代理工作了一段时间,我碰巧试图实现同样的目标。简单地回答您的问题:不,我认为这不可行。
您尝试做的基本上是 Atlassian 所谓的弹性代理,但它目前仅适用于 AWS。
在当前情况下,无法在构建排队时生成新代理。但是,您可以做的是为每个计划设置第一阶段,以启动执行第二阶段所需的 Docker 容器。您的下一阶段将需要设置 Bamboo 依赖项,以便只有您生成的 Docker 容器能够处理它。
虽然这行得通,但让我告诉您这样做会出现什么缺陷:
- 下一阶段将 运行 在 Docker 容器内,在构建结束时终止容器本身将导致 Bamboo 构建失败。您可以在主机上的代理的最后阶段 运行 执行此操作,但如果您的构建由于某种原因失败,您将永远无法到达该阶段
- 并发构建和错误检查将更加难以处理
我们最终在我工作的地方所做的只是支付许可证费用,允许更多的代理和 运行 他们在自己的 Docker 容器中进行更多的代理隔离。通过浪费时间建立这样的系统,你可能会损失更多的钱,而不是仅仅支付更多的代理费用。
如果你的问题不在于钱,而在于必须处理大量不同的配置,你可以考虑在阶段开始时使用 运行 Docker 容器,并将所有命令转发到它使用 docker exec
。不过,这仍然不容易设置。
这正是 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
我们 (Atlassian Build Engineering) 创建了一组插件,用于 运行 集群 (ECS) 中基于数量 Docker 的代理,这些代理上线、构建单个作业然后退出。它应该能够做你想做的事。我们最近开源了该解决方案。
有关详细信息,请参阅 https://bitbucket.org/atlassian/per-build-container。
我正在尝试查看为 CI 构建环境
自动启动 Bamboo 容器是否可行理想情况下,我希望任意数量的随机容器能够自动启动并自行销毁以进行构建,而无需使用 docker compose 在远程服务器上进行任何修补。
我们有大量具有不同依赖关系的不同项目。因此,当开发人员 运行 构建时,我的目标是应该出现一个特定于该构建的容器,将其自身添加到可行的远程代理列表中,运行 构建,而不是销毁自身。
有没有人尝试过类似的东西或有任何建议看看这是否可行?
谢谢
我已经在 Docker 上使用 Bamboo 和远程代理工作了一段时间,我碰巧试图实现同样的目标。简单地回答您的问题:不,我认为这不可行。 您尝试做的基本上是 Atlassian 所谓的弹性代理,但它目前仅适用于 AWS。
在当前情况下,无法在构建排队时生成新代理。但是,您可以做的是为每个计划设置第一阶段,以启动执行第二阶段所需的 Docker 容器。您的下一阶段将需要设置 Bamboo 依赖项,以便只有您生成的 Docker 容器能够处理它。
虽然这行得通,但让我告诉您这样做会出现什么缺陷:
- 下一阶段将 运行 在 Docker 容器内,在构建结束时终止容器本身将导致 Bamboo 构建失败。您可以在主机上的代理的最后阶段 运行 执行此操作,但如果您的构建由于某种原因失败,您将永远无法到达该阶段
- 并发构建和错误检查将更加难以处理
我们最终在我工作的地方所做的只是支付许可证费用,允许更多的代理和 运行 他们在自己的 Docker 容器中进行更多的代理隔离。通过浪费时间建立这样的系统,你可能会损失更多的钱,而不是仅仅支付更多的代理费用。
如果你的问题不在于钱,而在于必须处理大量不同的配置,你可以考虑在阶段开始时使用 运行 Docker 容器,并将所有命令转发到它使用 docker exec
。不过,这仍然不容易设置。
这正是 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
我们 (Atlassian Build Engineering) 创建了一组插件,用于 运行 集群 (ECS) 中基于数量 Docker 的代理,这些代理上线、构建单个作业然后退出。它应该能够做你想做的事。我们最近开源了该解决方案。
有关详细信息,请参阅 https://bitbucket.org/atlassian/per-build-container。