每次运行Bamboo构建时启动新的Docker容器,并使用该容器来运行构建。

16

我刚接触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 容器。
我能否实现上述操作?
希望以上内容都讲得很清楚。我对此确实很陌生,任何帮助都将不胜感激。

每次构建都需要启动和停止bamboo代理吗?通常,外部代理始终运行(例如在docker中),并像往常一样运行构建任务。这不需要进一步的docker处理。或者您有任何优势可以采用这种程序吗? - ChristophLSA
@ChristophLSA,问题是当更改Docker镜像时,指纹不再有效,您必须通知Bamboo管理员接受修改后的Docker远程代理,这真的很烦人。Jacobus van Heerden,您找到了解决方案吗? - user1791139
2个回答

3
我们(Atlassian构建工程)创建了一组插件,在ECS集群中运行基于Docker的代理,该代理上线,构建单个作业,然后退出。我们最近开源了这个解决方案。
请查看https://bitbucket.org/atlassian/per-build-container获取更多详细信息。

我们已经实施了相同的方案,但是我们遇到了问题,因为代理需要大约5-7分钟才能上线并开始构建。我想知道如何缩短在PBC中注册代理的时间,并且如果相同的构建已运行,是否可以利用相同的代理。 - Abhijeet Kamble
@AbhijeetKamble请通过mkleint@atlassian.com与我联系,提供更多有关您设置的详细信息。我们使用datadog跟踪启动时间,并且代理通常在一分钟左右启动(除非集群正在扩展)。对于bamboo代理java代理启动,肯定会有20秒以上的惩罚。 - mkleint
感谢您的回复,我会在电子邮件中发送完整详细信息。 - Abhijeet Kamble

0

首先,您需要确保在运行“main”Docker容器时不会退出。

请使用以下命令进行检查:

docker ps -a

你应该看到它正在运行

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

进入容器的方法

docker exec -it containerName bash

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

docker exec -it containerName commandToExecuteInsideTheContainer

你可以在容器的Dockerfile中包含一个脚本,该脚本会执行某些操作。

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

希望这能给你一些启示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接