Как совместить бродягу с Дженкинсом для идеальной непрерывной интеграции?

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

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

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

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

Как бы вы настроили среду для достижения этой цели?

Ответ 1

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

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

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

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

Ответ 3

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

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

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