Запуск нового контейнера Docker с каждым новым запуском сборки Bamboo и использование контейнера для запуска сборки

Я новичок в Bamboo и пытаюсь получить следующий поток процессов с помощью Bamboo и Docker:

  • Разработчик записывает код в ветку Bitbucket
  • План сборки обнаруживает изменение
  • План сборки затем запускает контейнер Docker в специальном экземпляре AWS, где установлен Docker. В контейнере Docker также запускается удаленный агент. Я использую контейнер docker atlassian/bamboo-java-agent:latest.
  • Удаленный агент регистрируется с помощью Bamboo
  • Остальная часть плана сборки выполняется в контейнере
  • Контейнер и агент удаляются при завершении плана

Я настраиваю план сборки тестов и в плане. Моя первая задача - запустить экземпляр 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, который я начал в рамках плана сборки.

Есть ли способ сделать это выше?

Надеюсь, все это имеет смысл. Я действительно новичок в этом, и любая помощь будет оценена.

Ответы

Ответ 1

Мы (Atlassian Build Engineering) создали набор плагинов для запуска агентов на основе Docker в кластере (ECS), который поступает в сеть, строит одно задание и затем выходит. Недавно мы открыли решение.

Подробнее см. https://bitbucket.org/atlassian/per-build-container.

Ответ 2

сначала вам нужно убедиться, что "основной" контейнер докеров не выйдет, когда вы его запустите.

проверить с помощью

docker ps -a

вы должны увидеть, что он работает

теперь, полагая, что он запущен, вы можете выполнять команды внутри контейнера

чтобы попасть в контейнер

docker exec -it containerName bash

для выполнения команд внутри контейнера извне контейнера

docker exec -it containerName commandToExecuteInsideTheContainer

вы могли бы как часть контейнера dockerfile COPY a script в нем что-то делать.

Затем вы можете выполнить это script извне контейнера, используя описанный выше подход.

Надеюсь, это даст некоторое представление.