Мы хотим настроить сервис непрерывной интеграции (CI) для нашего проекта. Эта служба CI должна контролировать все аспекты жизненного цикла проекта, включая развертывание.
То есть мы хотим, чтобы агент CI на каждой итерации брал чистую систему (в частности, Ubuntu Server), развертывал там наш проект и запускал тесты.
Мы, вероятно, сами напишем сервис CI, поскольку наша экосистема довольно необычна. Вопрос: как эффективно обеспечить систему чистого листа для каждой итерации КИ?
Развертывание проекта устанавливает несколько пакетов Debian, настраивает несколько сайтов nginx, а также устанавливает некоторые пакеты в общесистемном диспетчере пакетов для конкретного языка (LuaRocks). Нет ничего более навязчивого, чем это (я считаю). Таким образом, более важно иметь возможность быстро настроить чистый лист (в течение минуты на современном оборудовании, быстрее - лучше), чем обеспечить абсолютную изоляцию и чистоту.
Я вижу два способа сделать то, что нам нужно:
- Либо установить какую-нибудь тюрьму (например, lxc).
- Или установите виртуальную машину, которая может делать снимки, и используйте их.
Но на данный момент мне не хватает информации, чтобы принять решение.
Что бы вы посоветовали? Есть еще варианты? Какие-то конкретные названия инструментов?
Примечание. Служба CI будет работать внутри гостевой системы Citrix XenServer. Платные решения в порядке, если цены разумные. (Обычно они не являются разумными в этой области.) Решения удаленного CI не в порядке.
источник
Посмотрите на Дженкинса . Он имеет плагины, которые позволяют запускать сборки на виртуальных машинах в VMWare или VirtualBox или в облаке Amazon / a Eucalyptus . Для виртуальных машин, запускаемых в облаке, вы можете указать сценарий инициализации, в котором вы можете выполнять такие действия, как установка пакетов.
источник
Я бы использовал инфраструктуру VM и создал бы базовый шаблон, или использовал бы облако, как предложил @LarsKotthoff. Их легко раскрутить быстро, и вы можете быть уверены, с чего начали.
Однако в конечном итоге вам потребуется что-то вне этой виртуальной машины, чтобы организовать происходящее (настроить машину и запустить любой процесс, который вы хотите на машине). Я бы посмотрел на Дженкинса за его способность фиксировать вывод сценариев для последующей проверки.
Хотя Jenkins начинал как CI-сервер, многие организации, с которыми я работал, теперь используют его для гораздо большего, но на самом деле это инструмент, с которого можно начинать (вручную или по расписанию) и фиксировать результаты, а также проверять, что произошло, как и ожидалось. И это очень гибко.
источник
Дженкинс был упомянут довольно многими. Вы можете начать работу со сценариями, но Jenkins предоставит вам все ту же гибкость с меньшими накладными расходами, собрав их вместе.
Здесь пригодятся образы виртуальных машин. Вы можете настроить свой чистый образ и заставить каждую машину запускать его. Исходное изображение никогда не изменяется, но ваше тестирование не будет знать разницу. Вы определенно должны иметь возможность запустить образ начальной загрузки через минуту.
Если вы ищете для запуска нескольких машин одновременно, проверьте Nimbula (я бесстыдный; я работаю на них). Для небольших развертываний это бесплатно и позволяет вам собрать собственное частное облако для тестирования ... или чего-либо еще. Между Jenkins и файлом оркестровки вы можете раскрутить хост-серверы, тестировать клиентов и все остальное, чтобы автоматически выполнять полный спектр тестового кода без какого-либо взаимодействия.
источник