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

Puppet: компиляция двоичных файлов

Мы используем марионетку для распространения нашего собственного программного обеспечения (то есть того, что мы пишем, которое мы хотим запускать на наших собственных серверах). Так что где-то мы должны скомпилировать это программное обеспечение.

Для меня имеет смысл использовать git pull и скомпилировать его на мастере марионеток. Скомпилируйте один раз, распространите, наши машины однородны, а двоичные файлы работают на своих помеченных хостах.

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

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

Q1: Звучит правильно / Я пропустил что-то важное?

Q2: Тогда как deb упаковывается и выгружается? Это процесс выпуска вручную? Это означает, что мы обновляем тестовый сервер до новых версий ОС и библиотек, чтобы скомпилировать и упаковать.

Q2B: Теперь предположим, что я устанавливаю этот CI-сервер, и я постоянно говорю своей команде, что я приступлю к установке. Насколько я могу судить, CI-сервер ничего не знает о dist-upgrade. Так должна ли эта часть оставаться ручной?

Ваш процедура сборки может быть либо ручным, либо автоматическим через CI с помощью ряда триггеров. Например (и это только один пример), вы можете пометить новую версию в Git или переместить существующий тег, и ваше приложение CI наблюдает за этим репозиторием или этим тегом и создает / загружает ваш пакет.

Ваш процедура выпуска также может быть ручным или автоматическим.

  • Использовать ensure => latest на твоей марионетке package ресурсы, чтобы, как только вы публикуете пакеты в своем репозитории, они выбираются и устанавливаются вашими узлами.
  • Использовать ensure => 'x.y.z' чтобы привязать пакет к определенной версии. При таком подходе вы можете вручную запускать версии на определенных узлах / ролях / средах.
  • Вы можете использовать гибридный подход, объединяющий два вышеупомянутых, используя hiera и параметризуя свои модули - вы можете гарантировать latest в вашей среде разработки / сборки и x.y.z в вашей производственной среде, например.

  • Вы можете полностью удалить Puppet из уравнения и выполнять выпуск вручную с помощью такого инструмента, как Capistrano.

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

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