Назад | Перейти на главную страницу

Эффективный способ обеспечить «систему с чистого листа» для услуг непрерывной интеграции

Мы хотим настроить службу непрерывной интеграции (CI) для нашего проекта. Эта служба CI должна контролировать все аспекты жизненного цикла проекта, включая развертывание.

То есть мы хотим, чтобы агент CI на каждой итерации брал чистую систему (в частности, Ubuntu Server), развертывал там наш проект и запускал тесты.

Вероятно, мы бы сами написали CI-сервис с нуля, поскольку наша экосистема довольно необычна. Возникает вопрос: как эффективно обеспечить систему с чистого листа для каждой итерации CI?

Развертывание проекта устанавливает несколько пакетов Debian, настраивает несколько сайтов nginx, а также устанавливает некоторые пакеты в диспетчере пакетов для конкретного языка реализации (LuaRocks) по всей системе. Нет ничего более навязчивого, чем это (я считаю). Таким образом, важнее иметь возможность быстро настроить с чистого листа (в течение минуты на современном оборудовании, быстрее - лучше), чем обеспечить абсолютную изоляцию и чистоту.

Я вижу два способа сделать то, что нам нужно:

Но на данный момент у меня недостаточно информации, чтобы принять решение.

Что бы вы посоветовали? Есть другие варианты? Какие-нибудь конкретные названия инструментов?

Примечание. Служба CI будет запускаться внутри гостевой системы Citrix XenServer. Платные решения приемлемы, если цены разумные. (Обычно они не подходят в этой области.) Решения удаленного CI не подходят.

Посмотри на Дженкинс. В нем есть плагины, которые позволяют запускать сборки на виртуальных машинах в VMWare или VirtualBox или в Амазонка / Эвкалиптовое облако. Для виртуальных машин, работающих в облаке, вы можете указать сценарий инициализации, в котором вы можете выполнять такие действия, как установка пакетов.

Взгляни на Повар / Бродяга. Не уверен, будет ли это достаточно быстро, но есть на что посмотреть.

На всякий случай, если вы не знакомы с Chef, это сервер, предназначенный для обеспечения простой подготовки серверов на основе кода. Я бы порекомендовал взглянуть на одну из интернет-трансляций. Интернет-конференция Django Chef

Бродяга, ви, шеф-соло и соло с ножом Я думаю, что это касается большей части того, чем вы хотите заниматься.

Сообщение в блоге Vagrant Сообщение в блоге, показывающее быструю настройку сервера с помощью Vagrant.

Мы хотим настроить службу непрерывной интеграции (CI) для нашего проекта. Эта служба CI должна контролировать все аспекты жизненного цикла проекта, включая развертывание.

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

То есть мы хотим, чтобы агент CI на каждой итерации брал чистую систему (в частности, Ubuntu Server), развертывал там наш проект и запускал тесты.

Развертывание проекта устанавливает несколько пакетов Debian, настраивает несколько сайтов nginx, а также устанавливает некоторые пакеты в диспетчере пакетов для конкретного языка реализации (LuaRocks) по всей системе. Нет ничего более навязчивого, чем это (я считаю). Таким образом, важнее иметь возможность быстро настроить с чистого листа (в течение минуты на современном оборудовании, быстрее - лучше), чем обеспечить абсолютную изоляцию и чистоту.

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

Платные решения приемлемы, если цены разумные. (Обычно они неразумны в этой области.) Решения удаленного CI не подходят.

Если вам нужно одновременно работать на нескольких машинах, обратите внимание на Нимбула (Я веду себя бессовестно, я работаю на них). Для небольших развертываний это бесплатно и позволяет собрать собственное частное облако для тестирования ... или чего-то еще. Между Jenkins и файлом оркестрации вы можете запускать хост-серверы, тестовые клиенты и все остальное, чтобы автоматически запускать весь спектр тестового кода без какого-либо взаимодействия.

Я бы использовал инфраструктуру виртуальной машины и создал базовый шаблон или использовал бы облако, как предложил @LarsKotthoff. Их легко быстро раскрутить, и вы можете быть уверены, с чего начали.

Однако в конечном итоге вам понадобится что-то за пределами этой виртуальной машины, чтобы организовать то, что происходит (настроить машину и запустить любой процесс, который вы хотите на машине). Я бы посмотрел на Jenkins за его способность фиксировать вывод скриптов для последующей проверки.

Хотя Jenkins начинал как CI-сервер, многие организации, с которыми я работал, теперь используют его для гораздо большего, чем это, на самом деле это инструмент для запуска (вручную или по расписанию) и сбора результатов, а также проверки того, что произошло, как ожидалось. И это очень гибко.