【问题标题】:Starting new Docker container with every new Bamboo build run and using the container to run the build in在每次新的 Bamboo 构建运行时启动新的 Docker 容器,并使用容器在其中运行构建
【发布时间】:2015-03-21 05:16:38
【问题描述】:

我是 Bamboo 的新手,正在尝试使用 Bamboo 和 Docker 获得以下流程:

  1. 开发人员将代码提交到 Bitbucket 分支
  2. 构建计划检测到更改
  3. 构建计划然后在安装了 Docker 的专用 AWS 实例上启动 Docker 容器。在 Docker 容器中,也启动了一个远程代理。我使用atlassian/bamboo-java-agent:latest docker 容器。
  4. 远程代理向 Bamboo 注册
  5. 构建计划的其余部分在容器中运行
  6. 计划完成后容器和代理将被移除

我设置了一个测试构建计划,在计划中我的第一个任务是启动一个 Docker 实例,如下所示:

sudo docker run -d --name "${bamboo.buildKey}_${bamboo.buildNumber}" \
   -e HOME=/root/ -e BAMBOO_SERVER=http://x.x.x.x:8085/ \
   -i -t atlassian/bamboo-java-agent:latest

第二个任务是获取源代码并进行部署。第三个任务是测试,第四个任务是关闭容器。

Bamboo 上还有其他在线代理,我的构建计划有时会使用这些代理,而不是我在构建计划中启动的 Docker 容器。

我有办法做到以上几点吗?

我希望这一切都有意义。我对此真的很陌生,任何帮助都将不胜感激。

【问题讨论】:

  • 每次构建都需要启动和停止竹代理吗?通常外部代理一直在运行(在这个例子中是在 docker 中)并像往常一样运行构建作业。这不需要任何进一步的码头处理。或者你对这个程序有什么好处?
  • @ChristophLSA 问题是当 docker 映像更改时指纹不再有效,您必须通知您的竹管理员接受修改后的 docker 远程代理,真的很烦人 Jacobus van heerden 你找到了解决方案?

标签: docker bamboo


【解决方案1】:

我们(Atlassian 构建工程)创建了一组插件,用于在集群 (ECS) 中运行基于 Docker 的代理,该集群 (ECS) 上线、构建单个作业然后退出。我们最近开源了该解决方案。

更多详情请见https://bitbucket.org/atlassian/per-build-container

【讨论】:

  • 我们实施了同样的方法,但我们面临问题,因为代理需要大约 5-7 分钟才能上线然后开始构建,我想知道如何减少注册代理的时间如果运行相同的构建,PBC 是否可以使用相同的代理。
  • @AbhijeetKamble 通过 mkleint@atlassian.com 联系我,提供有关您的设置的更多详细信息。我们使用 datadog 跟踪我们的启动时间,并且代理通常会在一分钟左右启动(除非集群正在扩展)。竹代理 java 代理启动有大约 20+ 秒的罚款。
  • 感谢您的回复,将通过电子邮件向您发送完整的详细信息。
【解决方案2】:

首先,您需要确保“主” docker 容器在运行时没有退出。

检查

docker ps -a

你应该看到它正在运行

现在假设它正在运行,您可以在容器内执行命令

进入容器

docker exec -it containerName bash

从容器外执行容器内的命令

docker exec -it containerName commandToExecuteInsideTheContainer

您可以作为容器 dockerfile 的一部分在其中复制一个执行某些操作的脚本。

然后您可以使用上述方法从容器外部执行该脚本。

希望这能提供一些见解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多