2016-11-10 1 views
1

Я управляю официальным контейнером Jenkins на докере. Мне нужно построить изображение докера как пост-действие успешной сборки, но контейнер Jenkins не имеет двоичного файла докеров.docker build внутри официального контейнера jenkins

Я вижу пару вариантов, сначала как вывод моего собственного контейнера Jenkins из официального изображения с доступным двоичным докере. Второй вариант - использовать преданный Jenkins slave с докере и другое необходимое время исполнения. Третий вариант - предоставить Jenkins-серверу доступным. Я хотел бы запускать все на контейнере, поскольку он чист, прост и легко повторяется.

Как вы решили эту проблему? Что является лучшим решением в долгосрочной перспективе и почему? Мой самый высокий приоритет - предоставить, настроить и загрузить всю инфраструктуру CI с помощью одной незаменимой команды. Кроме того, встроенный контейнер докеров будет перенесен в реестр и т. Д., Поэтому связь между компонентами должна быть оптимальной с минимальной сложностью или ручной настройкой.

ответ

3

Установить докер в контейнер - это не очень хорошая идея.

related article

Однако вы можете достичь Docker демона, которые работают на хосте, установив гнездо Докер. Он должен быть хорош для целей тестирования, но не запускайте его в рабочем режиме, так как он создает проблему безопасности.

related article

Вы можете, конечно, найти более чистое решение управления развертыванием/процесс сборки непосредственно из вашего хоста, наблюдая статус выхода вашего контейнера Дженкинс.

+0

https://hub.docker.com/r/axltxl/jenkins-dood/ – user2363318

0

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

Т.Л., д-р Еще Hacky способом, но это лучший вариант Behaving: Использование TCP соединение из контейнера в Докер хозяина который работает Дженкинс. Имейте в виду последствия для безопасности, хотя, как сказал @ Raphayol.

Вот что мы пробовали:

1) Выполнить докер в докер

Не очень хорошая идея. Результаты в различной ситуации висит, когда подсистемы IO просто лают и перезагружаются.

2) Построить на роя

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

3) Выделенный хост сборки

Хотя это работает бьёт цель рабочих узлов и автоматического масштабирования становится сложнее.

4) Смонтировать докер гнездо

Сортировка работ, но на большой нагрузке он производит случайные блокировки ввода-вывода и перезапутить Docker демона необходимо

5) Подключите обратно через TCP

Эта опция работает в течение нескольких месяцев теперь, и хотя это не ясное решение, если ваши серверы сборки jenkins хорошо изолированы, вы можете жить с этим.

[[email protected] ~]# docker ps 
CONTAINER ID  IMAGE        COMMAND    CREATED    STATUS    PORTS        NAMES 
e3630d84909e  registry.backbase.com/gocd-agent "/sbin/my_init"  2 minutes ago  Up 2 minutes  0.0.0.0:9040-9045->9040-9045/tcp docker_agent_1 
[[email protected] ~]# docker exec -it e3 env|grep DOCKER 
DOCKER_TLS_VERIFY=yes 
DOCKER_HOST=tcp://10.10.10.10:2376 
DOCKER_CERT_PATH=/var/go/docker-certs