Лучшая практика использования докера внутри Дженкинса? - PullRequest
0 голосов
/ 08 мая 2018

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

Я запускаю Jenkins в контейнере Docker, и я хочу построитьизображение в конвейере.Поэтому мне нужно выполнить несколько команд докера в контейнере Jenkins.

Итак, вот в чем причина появления докера.Я понимаю, что нам нужно привязать монтируемый демон хоста docker (сокет) к контейнеру Jenkins, но этому контейнеру все еще нужны двоичные файлы для запуска Docker.

Я видел несколько подходов для достижения этого, и я запутался, чтоя должен делать.Я видел:

  • bind mount двоичного файла докера (/ usr / local / bin / docker: / usr / bin / docker)
  • установка докера в образе
  • если я не ошибаюсь, образ голубого океана идет с предустановленным Docker (я не нашел никакой документации по этому вопросу)

Также я не понимаю, что могут делать плагины Docker для Jenkinsдля меня.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

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

Jenkins - это Сервер Непрерывной Интеграции, который является причудливым способом сказать "сервис, который создает вещи в разное время согласно предопределенным правилам"

Если ваш конечный результат представляет собой изображение докера, которое нужно распространить, Дженкинс должен вызвать вашу команду docker build, собрать выходные данные и сообщить об успехе / неудаче команды docker build.

Если ваш конечный результат не является образом докера, у вас есть Jenkins, который вызывает вашу команду сборки без докера, собирает выходные данные и сообщает об успехе / неудаче сборки без докера.

Способ запуска сборки зависит от того, как вы будете собирать продукт. Make-файлы запускаются с make, Apache Ant с ant, Apache Maven с mvn package, докер с docker build и так далее. С точки зрения Дженкина, это не имеет значения, если вы предоставите полный набор правил для запуска сборки, сбора результатов и отчета об успехе или неудаче.

Теперь о плагине Docker для Дженкинса. Как сказал @yamenk, Дженкинс использует подчиненные сборки для выполнения сборки. Этот плагин будет запускать сборку ведомого в контейнере Docker. Объект, встроенный в этот контейнер, может быть или не быть изображением докера.

Наконец, запуск Jenkins внутри док-контейнера просто означает, что вам нужно привязать ваш докерский Jenkins к внешнему миру, как указывает @yamenk, иначе у вас будут проблемы с запуском сборок.

0 голосов
/ 18 декабря 2018

Привязка, монтирующая двоичный файл докера в образ jenkins, работает только в том случае, если образы jenkins «достаточно близки» - они должны содержать необходимые общие библиотеки!

Так что когда поете стандартные jenkins / jenkins: 2.150.1 в ubuntu 18.04, это не работает, к сожалению. (это выглядело так красиво и стройно;)

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

Многие люди, похоже, устанавливают докер в образе Дженкинса ....

0 голосов
/ 08 мая 2018

Docker имеет архитектуру клиент-сервер. Сервер - это docker deamon, а клиент - это интерфейс командной строки, который позволяет вам выполнять docker ... из командной строки.

Таким образом, при запуске Jenkins в Docker вам потребуется доступ для подключения к демону. Это достигается путем привязки /var/run/docker.sock к контейнеру.

На данный момент вам нужно что-то для связи с Деймоном, который является сервером. Вы можете сделать это, предоставляя доступ к исполняемым файлам Docker. Этого можно достичь, либо установив док-файлы, либо установив клиентские двоичные файлы внутри контейнера Jenkins.

В качестве альтернативы, вы можете общаться с демоном, используя Docker Rest API, не имея двоичных файлов клиента докера внутри контейнера Jenkins. Например, вы можете построить изображение, используя API .

Также я не понимаю, что плагины Docker для Jenkins могут сделать для меня

Плагин Docker для Jenkins бесполезен для описанного вами варианта использования. Этот плагин позволяет подготовить подчиненных Jenkins с помощью Docker. Например, вы можете запустить компиляцию внутри контейнера Docker, который автоматически предоставляется Jenkins

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...