使用每个新的Bamboo构建运行启动新的Docker容器并使用容器运行构建

时间:2015-01-22 12:04:58

标签: docker bamboo

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

  1. 开发人员将代码提交给Bitbucket分支
  2. 构建计划检测到更改
  3. 构建计划然后在安装了Docker的专用AWS实例上启动Docker容器。在Docker容器中也启动了远程代理。我使用atlassian/bamboo-java-agent:latest docker容器。
  4. 远程代理向Bamboo注册
  5. 构建计划的其余部分在容器中运行
  6. 计划完成时删除容器和代理
  7. 我设置了一个测试构建计划并在计划中我的第一个任务是启动一个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
    

    第二项任务是获取源代码并进行部署。第3项任务是测试,第4项任务是关闭容器。

    Bamboo上还有其他在线代理,我的构建计划有时会使用那些而不是我作为构建计划的一部分启动的Docker容器。

    我有办法做到吗?

    我希望这一切都有道理。我对此非常陌生,任何帮助都将受到赞赏。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

检查

docker ps -a

你应该看到它正在运行

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

进入容器

docker exec -it containerName bash

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

docker exec -it containerName commandToExecuteInsideTheContainer

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

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

希望这能提供一些见解。