На прошлой неделе я активно использовал Chef и готовился (эмоционально и оперативно) прекратить использование Capistrano. (Мы размещаем приложение Rails.)
Мы следуем потоку GitHub, а это означает, что у нас есть только основная ветка и множество функциональных веток. Прямо сейчас мы используем Jenkins для непрерывной интеграции и непрерывного развертывания, а Capistrano — для развертывания master
на наших серверах, но только после того, как наши модульные, интеграционные и приемочные тесты пройдены.
Я использую ресурс Chef deploy_revision
и в восторге от того, насколько хорошо он работает. Мне не терпится перейти от «толкать» к «тянуть». Но я не хочу развертывать код, если наши тесты не пройдены. Я застрял на выборе между альтернативными подходами к достижению этого эффекта:
- Укажите Chef на тег (например,
2.0
) и периодически обновляйте этот тег в наших рецептах развертывания. (Мне это не нравится, потому что на самом деле это не непрерывное развертывание. Теперь мы снова держим наш код в руках каждый раз, когда хотим его выпустить.) - Укажите шеф-повару на ветку, чтобы Дженкинс объединил
master -> release
после прохождения набора тестов. (Мне это не нравится, потому что теперь мой сервер Jenkins имеет доступ для чтения/записи к моему репозиторию.) - Не настраивайте Chef на периодический запуск, вместо этого запустите Jenkins
chef-client
через SSH. (Мне это не нравится, потому что я с нетерпением ждал того дня, когда наша машина Jenkins больше не будет иметь SSH-доступ к нашим серверам.) - Разверните код, но отмените фиксацию, если впоследствии тест не пройден. (Слишком подвержен ошибкам, на мой взгляд.)
Думаю, я уже сделал достаточно домашней работы. Я следил за подробный отчет Стива Джанга, среди прочего, и потратил часы времени на документы Chef . Но во всех отличных руководствах сообщества по непрерывному развертыванию с помощью Chef я не вижу ни одного упоминания об этом конкретном случае использования.
Я мог бы жить с большинством вариантов выше, но я чувствовал бы себя лучше, если бы знал, что это проверенный подход. Я уверен, что другие организации уже решили эту проблему. Как ты сделал это?