Как объединить Vagrant с Jenkins для создания идеальной среды непрерывной интеграции?

85

У вас есть проект, в котором есть некоторые требования к программному обеспечению для запуска (например: конкретная версия Apache, версия PHP, экземпляр базы данных MySQL и несколько других программных продуктов).

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

Вы также поняли преимущества системы непрерывной интеграции, такой как Jenkins .

Теперь вы хотите объединить эти два мира (Vagrant и Jenkins), чтобы получить идеальную среду непрерывной интеграции. Чтобы быть более конкретным, вы не хотели бы устанавливать программное обеспечение, необходимое для вашего проекта, на машине, на которой работает Jenkins, но вы хотели бы использовать виртуальную среду, предоставляемую Vagrant, для периодической сборки вашего проекта поверх нее. Программное обеспечение CI (Jenkins) построит для вас Vagrant box, а затем создаст и протестирует ваш проект поверх него.

Как бы вы настроили свою среду для этого?

Роберто Алои
источник
4
Кроме того, ваша установка Jenkins представляет собой Vagrant box, поэтому вы можете запускать эту среду CI на нескольких платформах, поскольку между ними существует множество различий.
Стефан Эггермонт,
1
Вы создали такую ​​среду? Комбинация Docker и Jenkins уже хорошо известна, однако ее будет недостаточно для сред Windows, и в этом случае единственный хороший вариант, IMO, - это Vagrant + Jenkins. Есть некоторые аспекты, которые следует учитывать, например, действительно ли нам нужны ведомые устройства и в каких контекстах или мы могли бы использовать один сервер для создания бродячей среды сборки для каждого проекта по запросу (во многих компаниях постоянно строятся только несколько проектов, большинство редко строятся), Или мы должны использовать это поверх системы дедупликации, чтобы уменьшить занимаемый диск.
majkinetor

Ответы:

35

это хорошее решение для системы сборки, мое предложение:

  1. Ваш текущий jenkins работает как главный CI (вероятно, запущен пользователем jenkins)
  2. Создайте другого пользователя на той же машине или другой машине для работы в режиме ведомого jenkins
    • Раб jenkins может быть вызван из мастера jenkins, и он может использовать другого пользователя, такого как бродяга, у которого есть разрешение и среда для бродяги, поэтому он не будет мешать исходному главному серверу jenkins
    • создайте свой базовый бродячий ящик, затем его можно повторно использовать для ускорения развертывания
  3. Большая часть информации об установке (пакетов) может управляться puppet (или шеф-поваром) для загрузки в ваш ящик vm.

Наверное, вы можете взглянуть на veewee , которое может создавать бродячие коробки на лету.

Вот как сделать CI проще с Jenkins CI и Vagrant для моего руководства по этому предложению.

Ларри Кай
источник
1
Ваша ссылка, к сожалению, не работает
langlauf.io
2
На случай, если кого-то заинтересует неработающая ссылка, вот копия Make CI проще с Jenkins CI и Vagrant
Gilberto Treviño
12

Вы можете попробовать плагин Vagrant для Jenkins, который в настоящее время поддерживает Jenkins CD 1.532.3.

Вы можете увидеть демонстрацию этого плагина на http://unethicalblogger.com/2012/03/13/vagrant-plugin-in-action.html

Кристоф Фурманиак
источник
7
этот плагин не поддерживает Jenkins выше 1.490, так что это большое ограничение :-(
kenyee
не поддерживает бродячий бег на рабах :(
Christophe Furmaniak
1
Да, но тогда вам придется самостоятельно обрабатывать весь жизненный цикл виртуальной машины (создавать, уничтожать или нет в конце работы, ...). Идея плагина заключается в том, что плагин делает это за вас, а затем вы можете сосредоточиться на своей основной цели: использовать виртуальную машину в качестве изолированного контейнера.
Christophe Furmaniak
2
У упомянутого плагина есть неприятные проблемы, которые до сих пор не исправлены ( issues.jenkins-ci.org/browse/JENKINS-26326 ), и разработка была остановлена ​​год назад. Не рекомендую.
Росс Иванцив
1
Запуск экземпляра бродяги по запросу для сборки - это правильное решение. Если этот плагин по-прежнему не работает?
Atifm
1

Лично я бы предложил использовать Hashicorp Packer для создания ваших Vagrant-боксов для разработчиков, а затем использовать его для вывода образа Docker, AWS или OpenStack, который вы можете запустить в своей системе CI. Vagrant - отличный инструмент, но накладные расходы на виртуальные машины могут быть немного высокими для системы CI, чтобы постоянно раскручивать их вверх и вниз, особенно если вам нужна действительно быстрая обратная связь.

У бывшего клиента мы в основном загружали машины Vagrant один раз вместе с системой, а затем запускали сборки Docker / virtualenv внутри этих виртуальных машин, и мы периодически уничтожали их, когда происходило серьезное обновление или проблема с некорректным поведением среды.

https://www.packer.io/docs/builders/openstack.html

дракон788
источник
Если я могу спросить, вы запускали jenkins как отдельный пользователь? Если да, то как вам удалось предоставить доступ бродяге ?? Спасибо
Джасвант Манигундан
Пока vagrant установлен нормально, он помещается в системный путь. Сами ящики обычно загружаются в домашний каталог текущего пользователя, но вы можете переопределить бродячий дом с помощью переменной среды. Мы объединили все это, а также заставили ящик тянуть с определенной версией части процесса сборки, чтобы он был кэширован один раз, а затем использовался повторно.
dragon788