Я пытаюсь создать систему, которая будет запускать краткосрочные (CI и тестовые сборки) программных компонентов, это обязательно в соответствии с моими требованиями, чтобы каждый жил на частном хосте. Я использую это определение, чтобы включить паравиртуализация варианты, как кажется, это избавит меня от много головной боли.
Я работаю над Mac, поэтому почти все технологии отсутствуют, libvirt и Quemuи т. д. просто не будут работать для меня. Однако я планирую развертывание в Debian; так что все, что работает в Debian, снова на столе, при условии, что я могу создать сценарий для подготовки хост-машины, а также ее гостевых доменов.
Моя предполагаемая установка заключалась в том, что я могу использовать для начальной загрузки установщика Debian, что что-то должно означать, что при загрузке машина автоматически инициализируется (Chef, Puppet, Babushka, не возражайте, правда) - и часть этой подготовки должна создавать шаблон rootfs, который можно использовать для загрузки контейнера. Сам контейнер также должен быть подготовлен, чтобы, когда контейнер появляется, он знал, что нужно сделать, и мог выполнить эту работу, а затем выйти.
Короче говоря, вот рабочий процесс, который мне нужен:
Я дошел до того, что попробовал следующее и отказался от них по причинам, указанным ниже:
Для хост-машины
Честно говоря, я не уверен, какие технологии люди должны использовать, чтобы превратить виртуальную машину из ничего в работающую, работающую и полезную систему. Для меня это три шага: а) операционная система, б) конфигурация системы (пользователи и т. Д.), А затем в) изменения файловой системы.
Для гостевых (виртуальных) машин:
debootstrap
и специальный раздел в контейнере LXC, который содержит работу, которая должна быть выполнена для этого конкретного экземпляра (манифест задания). Вставьте все обычные предупреждения о сборке ОС, загрузке, создании пользователей, проверке программного обеспечения из git и выполнении работы.Я действительно не уверен, какие инструменты использовать, похоже, проблема должна быть решена. Но я просто не могу понять, с чего действительно начать.
Большинство людей, кажется, предлагают для хост-машины выбрать технологию виртуализации, загрузить машину в рабочее состояние, а затем сделать снимок (libvirt кажется логичным фаворитом для этого). Использование снимка для вызова любых последующих установок для тестирования или в производстве.
Для гостевых машин lxc, по-видимому, предоставляет самый простой вариант, за исключением того, что фоновое создание контейнера и подключение к нему позже через консоль не работают во всех существующих ядрах, а новейшая версия lxc, доступная для стабильного Debian, старше 18 месяцев. , и ему не хватает многих широко используемых функций.
Обычно я разработчик приложений и не часто работаю с технологией серверного уровня (и я уверен, что SF отметит этот вопрос как «слишком субъективный»), но я действительно не уверен, к каким инструментам обратиться.
Последнее слово: я знаю один проект с аналогичным составом (travis-ci.org), который использует для этого боксы Vagrant. Это кажется довольно грубым инструментом, большими, медленными, ориентированными на рубины инструментами, предназначенными для мелкомасштабной подготовки рабочих столов к тестовым виртуальным машинам, используемым для критически важной сервисной инфраструктуры, но я также знаю некоторых из этих ребят, и они умнее меня, так что, возможно, они просто сдались.
Любая помощь приветствуется.
Некоторые идеи:
Читая ваш пост, я все думал, что vagrant и jenkins с vagrant plugin вполне подойдут вам. Любое устройство, которое у вас есть, которое действительно может обрабатывать количество виртуальных машин, о которых вы говорите, не должно даже замечать накладных расходов на инструменты, поддерживающие среду.
Используя кое-что, что работает на Apple и Debian, единственное, что я пробовал, - это виртуальный ящик. Что приятно использовать виртуальный бокс вот вы можете создать виртуальную машину в своей системе Mac и скопировать ее в систему Debian, используя ту же версию виртуального бокса, и она загрузится.
Сотни виртуальных машин с использованием виртуального бокса звучат так, будто вы потратите немало времени на использование vboxmange интерфейс для создания скрипта необходимой уникальной информации для каждой виртуальной машины. Как и uuids для жестких дисков, MAC-адрес в сетевых интерфейсах.
Если базовая система будет использовать то же программное обеспечение, настроенное таким же образом, вы можете создать снимок системы в виртуальном ящике и заморозить его. Таким образом, никакие сделанные изменения не записываются поверх вашего замороженного снимка, а вместо этого записываются в новую область временного хранения. Затем выключите виртуальную машину, вернитесь к снимок и вы работаете с чистой системой без каких-либо изменений, внесенных во время тестирования. Все это можно написать с помощью сценария vboxmange.
Используя ваш снимок вы также можете сделать сотни копий этого образа виртуальной машины. Используя vboxmange интерфейс сценариев для создания уникальных копий, то есть uuid и mac-адреса. Затем запустите сценарий запуска, который вызывает все изменения, конфигурации, которые необходимо применить к своим виртуальным машинам для тестирования, или запуск различных тестов.