2016-02-10 2 views
0

Допустим, у меня есть двоичная «программная команда» программы, установленная в местоположении «/ usr/bin».Каким образом шеф-повар может установить/развернуть новую версию?

Теперь, когда команда приложения выпуск новой двоичная, я хочу, чтобы обновить бинарный файл на месте «/ USR/Bin»

Как достичь выше сценария в шеф-повара?

+0

Напомним, что это не форум и нацелен на решение конкретных проблем программирования. Возьмите [тур] и прочитайте [спросите], пожалуйста. Если у вас есть открытые вопросы по проверке шеф-повара http://discourse.chef.io, но не забывайте, что большинство людей помогает в свободное время, поэтому помогите нам помочь вам, давая четкий обзор того, чего вы пытаетесь достичь. – Tensibai

ответ

1

Помимо обычных способов, создавая пакеты, соответствующие вашей операционной системе (apt, yum и т. Д.), Наилучшим образом подходит для вашего случая, это IMHO ресурс remote_file.

Примером может служить следующее:

remote_file "/usr/bin/example" do 
    source "https://example.com/current/example" 
    mode "0755" 
end 

Если ваш сервер (один за example.com) поддерживает Last-Modified или E-Tag заголовки, Chef будет только скачать и заменить двоичный файл, если он был изменен по сравнению с тем, что находится на диски.

Помимо этого, существует много более сложных и безопасных механизмов, включая использование зависимого от версии URL, установленного на основе attribute, или получение файла из хранилищ артефактов, таких как Nexus или Artifactory. Предлагаемый метод по крайней мере позволяет быстро начать работу.

1

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

В идеале они помещают его в какой-то репозиторий пакетов (ruby-gems, для Linux что-то вроде RPM или deb, для кода, связанного с Java, что-то вроде Maven или Ivy и т. Д., Есть много других в разных ОС и языках) , Либо у шеф-повара package ресурс будет поддерживать его, либо, вероятно, есть community cookbook. Вы можете использовать их, чтобы указать, какая версия вам нужна для двоичного кода.

Если это всего лишь файл в общем месте, то вы можете использовать ресурс шеф-повара file, чтобы «синхронизировать» вашу версию и официальную версию, но помните, что это довольно ужасно (без проверки версий, без охранников против понижения рейтинга, просто «синхронизировать эти два файла»)

Если это ручной процесс, включающий электронную почту или подобное, вам необходимо автоматизировать этот процесс первых, я хотел бы сказать :-)

1

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

В качестве примера предположим, что вы хотите развернуть «customcommand» версии 2.32 от nexus до среды dev.

Шаг 1: Создайте пакет данных под названием «Dev» и элемент с информацией о пакете:

"id": "deploy", 
    "package": [ 
    { 
     "name": "customcommand", 
     "version": "2.32", 
     "type": "bin" 
    } 
    ] 

Шаг 2: Создайте файл DEV среды, которая будет использоваться во время сходятся, например: chef-client -E dev -r "recipe[name]"

Шаг 3: Создайте рецепт шеф-повара, который извлекает информацию из пакета данных с помощью data_bag_item(data bag,'data bag item')['package'].each do |item| и выполняет развертывание с использованием ресурса remote_file.

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

Смежные вопросы