Pull to refresh

Comments 12

Вопрос к гуру Dev Ops: у меня есть проект на С++, для которого я хочу организовать CI на Windows, macOS и Linux на одном и том же физическом сервере. Пока что я плохо понимаю, как этого вообще можно добиться, не считая тупой вариации с тремя виртуальными машинами, в каждой из которых крутится свой Jenkins.
Jenkins X и Docker как-то помогут мне в решении этой задачи, или Docker не предоставляет достаточную степень виртуализации, чтоб на одном хосте запускать все три перечисленные ОС?
Из под linux без всякой вертуализации при помощи mxe, можно кросскомпилить под windows(если вас устраивает сборка под mingw).
Про mac нечего не могу сказать.
Я не гуру. Но, скорее всего, нужно собрать пайплайн со сборкой внутри трех разных докер контейнеров. У каждого базовый образ — нужная операционка, а сверху следующим слоем ставятся все девтулсы, вытаскивается волюм, куда кидаются исходники или настраивается сеть для их автоматического выкачивания по переданным в контейнер при запуске параметрам. Наверное можно даже параллельно запускать.
Так как официально Mac OS можно запускать только на их железе, то что бы запустить Mac OS на своем сервере, потребуется пропатченный ESXi или VMWare Player ну или хакинтош.
Запустить Windows в Docker контейнере можно только под Windows Server 2016 или Windows 10 Pro/Enterpise (И это будет Windows Server минимальный так что не уверен что там будет удобно делать сборку)
Так что наверно самый простой способ это поднять 3 виртуальные машины и поставить на них build агентов. Настроить pipeline который будет собирать на всех трех машинах параллельно. И Docker вам для этого не нужен.
Спасибо за отличный совет. Уже собирался ставить три отдельных независимых сервера Jenkins на три виртуалки, а вот о том, что можно так, как вы сказали, не знал.

Внутри докера linux ( и вроде windows с недавних пор). Поэтому если цель — проверить, собирается ли проект на всех трёх платформах, то только виртуалки, если нужна макось.

Докер точно не предоставляет макось и не предоставляет винду и никсы на одном хосте. Так что только виртуалки.

Помоему вы путаете виртуализацию и контейнеризацию.


По поводу виртуалок уточнение — внутри них крутится не Jenkins Master, а Jenkins Slave. А "управляете" вы с одного дженкинса.

Конечно, путаю. Даже на самом сайте Docker нет нормального объяснения, что оно такое на самом деле, сколько ни гуглил объяснения — всё запутанно. Но постепенно начинаю понимать.
Если очень грубо docker это образ в котором упаковано все зависимости которые нужны для приложения которое вы запускаете в контейнере, когда вы запускаете контейнер запускается 1 приложение, которое использует все зависимости именно из контейнера.
С первого взгляда можно подумать что контейнеры это продвинутый chroot хотя это и не так, но с chroot общего больше чем с виртуалками
Лично я использую VirtualBox виртуалки + buildbot. Для уменьшения хаоса управления этими виртуалками можно использовать vagrant. Скорее всего есть варианты получше. Тема CI для desktop приложений раскрыта куда менее обширно, чем CI для web
Да не нужен вам тут докер. Классика — три vm с разными ОС — слейвы Jenkins, еще одна VM на линуксе — мастер. Если стоит задача тестировать развертывание — присмотритесь к Vagrant, поддержку win они вроде обещали. У докера она в зачаточной стадии пока, и да, требует win-хоста, а еще нормально не заработает в винде внутри VM. Что делать с макосью — не уверен. На вашем месте я бы городил гибридное решение — на линуксовой версии тестировал бы максимально чисто, тут докер может принести пользу, винды — классика (обычный слейв) или решение на Vagrant'е, мак — классика (ну или поискать, может есть специфичные решения — зачатки контейнеризации в ядре вроде есть, может есть уже удобный софт на этот случай). Всё это хозяйство может управляться одним мастером Jenkins достаточно удобно
Sign up to leave a comment.