Как я могу развернуть код «по запросу», используя клиент-серверную архитектуру шеф-повара?

Вот сценарий:

Я могу подключиться к своему Chef-Server по SSH. Но я не могу подключиться по SSH ни к одному из Chef-Client. Вот как я работаю: у меня есть рабочая станция для изменения или создания ролей. Все шеф-клиенты работают как демоны, поэтому, когда они просыпаются, они замечают изменения состояния и начинают обновлять себя.

Теперь мне нужно настроить развертывание кода на этих клиентах. Я подумал, что мог бы использовать для этого поваренную книгу приложений и добавлять рецепты к ролям, используя мою рабочую станцию. Но не приведет ли это к развертыванию каждый раз, когда клиенты-повара просыпаются и обнаруживают изменения версии? Я хочу развертывание по требованию: я хочу развертывать только тогда, когда код готов к развертыванию, а не для каких-либо других коммитов до этого момента.

Как мне этого добиться?


person Emil    schedule 10.11.2012    source источник


Ответы (2)


Пара вопросов

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

IE запускает тесты на огурцы, и если они все пройдены, развернуть, иначе ничего не делать?

Мы питаемся от Artifactory и используем веб-API, чтобы проверить последнюю доступную нам программу установки. Если это то же самое, что и ранее установленное (сделанное путем проверки/создания ключа реестра), мы говорим пользователю, что эта сборка уже установлена, поэтому мы пропускаем. Если это не то же самое, мы устанавливаем. Теперь я знаю, что это не тот же самый сценарий, но мне кажется, что здесь понадобится какой-то пользовательский код.

Либо так, либо используйте значения базы данных, чтобы сказать install=true или false в зависимости от состояния кода. Вы должны обновить элемент установки проекта a в базе данных, когда хотите развернуть, а в остальное время для него установлено значение false. Рецепт будет продолжаться только в том случае, если значение будет истинным?

person PatrickWalker    schedule 11.11.2012
comment
Будет пользователь, который будет знать, что развертывание готово. Он не основан на каком-либо автоматическом триггере. Если пользователь хочет развертывание в какой-то момент, оно должно быть развернуто. Здесь может быть более одного узла, который действует как AppServer. Если я установлю «install = true» в DataBag, клиенты будут обязаны установить для него значение «false» после завершения развертывания? У клиентов нет прав администратора для изменения объектов DataBag. - person Emil; 11.11.2012
comment
Тот же подход, но другой тип триггера. Как насчет установки порядкового номера сборки (просто текущей последовательности) в DataBag при запуске развертывания OnDemand, у клиентов должен быть файл бухгалтерского учета, в котором есть список порядковых номеров сборки, развернутых на этом узле. При следующем запуске клиент увидит тот же номер, поэтому развертывание не происходит. Я думаю, это должно сработать, как вы думаете? (Но, будучи начинающим шеф-поваром, я понятия не имею, как сделать рецепт с такой логикой! Возможно, мне следует найти несколько примеров рецептов с рубиновой логикой. Любые указатели?) - person Emil; 11.11.2012
comment
Я читал еще немного, и мой предлагаемый подход немного изменился. Вместо файла бухгалтерского учета на каждом узле для хранения обработанных номеров развертывания я думаю установить для этого атрибут узла. Я постараюсь написать рецепт, чтобы сделать это и обновить. - person Emil; 12.11.2012
comment
Вероятно, что-то вроде этого, но вместо логического значения я установлю идентификатор последовательности: wiki.opscode.com/pages/viewpage.action?pageId=15728818 - person Emil; 12.11.2012
comment
Атрибут, безусловно, поможет вам обойти любые проблемы с правами доступа к базе данных. Удачи! - person PatrickWalker; 12.11.2012

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

person efrey    schedule 20.09.2013