Я использую Vagrant + Chef (поставщик chef_client) для создания и предоставления промежуточной среды для моего сервера. И у меня есть задание Jenkins, которое запускается каждый раз, когда я нажимаю на свою ветку разработки.
В задании Jenkins я хотел бы обновить и перестроить исходный код сервера в промежуточном поле и перезапустить его.
Я уже написал кулинарные книги, которые устанавливают зависимости, настраивают базу данных и т. Д. Но я не уверен, как запустить только обновление, восстановление и перезапуск из кулинарных книг. Я понимаю, что всегда могу снести всю коробку и восстановить ее, но подготовка коробки - длительный процесс, поэтому я хотел бы делать это как можно реже.
Я разделил свою книгу рецептов на 3 рецепта: зависимости, db_setup и server. В моей работе Jenkins я хочу запустить только «серверный» рецепт. Но я не понимаю, как я могу это сделать ... Если я укажу run_list на моем сервере Chef, я потеряю возможность подготовить весь ящик с нуля.
По сути, я хотел бы иметь возможность указывать Vagrant из командной строки, какие рецепты должен запускать Chef. Возможно ли это как-то?
Ура!
Ресурсы Chef должны быть идемпотентными, поэтому вы должны иметь возможность запускать chef-client снова и снова, не переустанавливая программное обеспечение, если на самом деле нет необходимых изменений. Вы можете создать свой рецепт для шеф-повара, чтобы делать новую сборку кода только в том случае, если есть изменения по сравнению с последним запуском.
Таким образом, у вас может быть рецепт, который выполняет обновление и перестройку только в случае изменения, а затем в части перестройки вы можете сделать уведомление: перезапустить все соответствующие службы (это процесс, которому я следую прямо сейчас).
См. Этот ответ для получения дополнительной информации об идемпотентности и повторяющихся вызовах шеф-повара. https://stackoverflow.com/questions/4913521/chef-repetitive-recipe-execution