Керуйте кулінарними книгами шеф-кухаря в командному середовищі


13

Я вчу шеф-кухаря і маю проблеми зі структуруванням всього, щоб працювати зі своєю командою.

Для початку здається, що вам слід створити папку chef-repo, де ви будете зберігати та змінювати кулінарні книги, які використовуються для управління вашими вузлами.

Я працюю над різними проектами, і кожен з них уже знаходиться під контролем джерела git. В ідеалі я б зберігав по одній папці шеф-кухаря в кожному з моїх проектів, а кухарські книги - це правильно?

Однак у папку chef-repo я повинен додати папку конфігурації (.chef) з моєю конфігурацією ножа та моїми ключами перевірок, і вони є специфічними для мене. Чи нормально просто додати папку .chef до файлу gitignore?

Я розумію, що кулінарні книги завантажуються на сервер шеф-кухаря, щоб потім їх розгорнути. Як інші команди відокремлюють постановку від виробничих середовищ, не дублюючи багато роботи? У нас є головна галузь, яка є нашою виробничою галуззю, відділ розробників, який є нашим відділенням для постановки (отримує менше 5% запитів на веб-сайті) та відділенням. Більшу частину часу гілка розробника, коли стабільна, зливається з основною гілкою. Як ми можемо завантажувати кулінарні книги окремо, щоб мати можливість мати два середовища окремо?

Дякую за допомогу!


Чи можете ви налаштувати .chefпапку для використання змінних середовища чи чогось іншого?
ceejayoz

Чи можете ви, будь ласка, описати свою мету більш докладно? Яку інфраструктуру ви хочете автоматизувати за допомогою шеф-кухаря? Ви згадали різні галузі - якщо ви говорите про розгортання програмного забезпечення, кращим рішенням може стати інструмент CI, як Дженкінс.
geewiz

Це так добре, як маріонетка підтримує такі середовища, як вдома.
Том О'Коннор

Відповіді:


15

Я працюю з декількома проектами, тому рішення cjc не допоможе мені. Існує також проблема загальної та власної конфігурації (адреси тощо є загальними для компанії, в налаштуваннях також є трохи магії). Схема, яку я нарешті влаштував, трохи зламала, але зручна у використанні.

Замість глобального ~/.chefя використовую підкаталог '.chef' в chef-repo, який не зберігається в git (додається до .gitignore). У мене також є файловий config/knife.rbфайл, який перевіряється в Git і містить спільну конфігурацію. Він починається з цього фрагмента:

root_dir = File.join(File.dirname(__FILE__), '..')
%w(knife-secrets.rb knife-local.rb).each do |conf_name|
  conf = File.join(root_dir, ".chef", conf_name)
  Kernel::load(conf) if File.exists? conf
end

Це завантажує файли, .chef/knife-local.rbщо містять власну конфігурацію (у базовій версії це просто OPSCODE_USER='username'константа, яка використовується згодом, але вона може містити будь-яку конфігурацію ножа) та .chef/knife-secrets.rbмістить спільні секрети (AWS-ключі тощо).

Нижче є конфігурація ножа, яка використовує константи, визначені в цих файлах, наприклад:

client_key               "#{root_dir}/.chef/#{OPSCODE_USER}.pem"

Таким чином я досягаю стандартизації конфігурації ножа по всій компанії, а це, в свою чергу, означає, що будь-який фрагмент коду або виклик ножа, що використовується у вікі, працюватимуть для всіх. У самому ножі достатньо плутанини та магії - різні конфігурації тільки погіршать його. Крім того, кожен отримує перевагу маленькими магічними фрагментами, як цей, щоб knife sshвикористовувати вхід, налаштований у користувачеві~/.ssh/config

Існує також проблема спільних секретів: ключ перевірки сервера шеф-кухаря, ключі AWS, що зберігаються в knife-secrets.rbприватному ключі SSH EC2, зашифровані ключі пакета даних тощо. Ми точно не хочемо, щоб вони зберігалися в сховищі - або, власне, в будь-якому місці, де вони не є безпечно зашифрованими. Тож ми поширюємо ці файли у вигляді .tar.gzфайлів, які зашифровані GPG всім компаніям та спільними для Dropbox.

Налаштування всього цього ускладнюється, і я хочу, щоб люди в команді фактично використовували цю річ, тому є останній елемент: rake initзавдання, яке створює .chefкаталог, посилається config/knife.rbтам, розшифровує та знімає chef-secrets.tgzфайл, забезпечує впевненість у тому, що приватний ключ платформи Opscode платформи користувача є і .chef/knife-local.rbналежним чином конфігурується, посилається на плагіни ножа та встановлює належні дозволи для каталогу та файлів всередині. Це завдання налаштовано так, що безпечно його виконувати багато разів у вже ініціалізованому сховищі (наприклад, для оновлення секретів або плагінів ножа).

Існує також допоміжна задача, яка запаковує всі секрети, шифрує тарбол для всіх і копіює його в Dropbox, щоб полегшити додавання нових співробітників або змінити секрети.

Щодо кількох середовищ: Шеф-кухар має функцію, яка називається середовищем . Я його ще не використовував, але він повинен робити все, що вам потрібно. Ви також можете суворо розділити виробниче середовище (щоб уникнути того, щоб розробники мали будь-які ключі, які так чи інакше стосуються виробництва env), маючи дві окремі організації з розміщеними шеф-кухарями або сервери шеф-кухарів. Цей фрагмент kni.rb показує, як налаштувати ніж по-іншому на основі перевіреної в даний час гілки - ви можете використовувати це для встановлення середовища, а також URL-адреси сервера шеф-кухаря. Існує також плагін для ножа, який називається "нож-потік" , що забезпечує більш повний робочий процес на дві організації.


Дякую за детальну відповідь. Принаймні, побачивши роботу, яка входить у її налаштування, означає, що я не пропустив чогось очевидного ...
Alex Recarey

3

Вам потрібно встановити два сервери шеф-кухарів, один для виробництва та один для розробки. Причина полягає в тому, що жоден сервер Chef не може підтримувати розгалужену розробку; навіть із середовищами.

Або ви можете відмовитися від концепції сервера Chef і використовувати шеф-кухаря-соло. Ви можете вести свої кулінарні книги в Git. Ви можете розгалужувати та об’єднувати. Ви можете ігнорувати проблеми з обліковими даними ножа, оскільки ви більше не будете користуватися ними.

Ви не зможете користуватися пошуком ножів або мішками даних **. Але деяким людям такі функції взагалі не потрібні.

** Добре ви можете сортувати: http://wiki.opscode.com/display/chef/Data+Bags#DataBags-UsingDataBagswithChefSolo


2

У мене вдома два каталоги, .chef та chef-repo. Шеф-кухар-репо знаходиться в git. .Chef - це приватний каталог, який за замовчуванням використовується для ножа. Вам не доведеться ставити свої секрети від .chef в git; ніж шукатиме ~ / .chef.


2

Ваш каталог ~ / .chef не повинен знаходитися в git repo.

У мене є ~ / Проекти / Директорія, в якій я тримаю репо-кухаря. У цьому йде конфігурація моїх серверів.

Моя остання робота була системним інженером у магазині Ruby-on-Rails. Наші конфігурації nginx, лаку та рейки (серед інших) переходять до шеф-кухаря, але самі програми Rails зберігалися в окремих git repos і були розгорнуті окремо.

Наше сценічне середовище являло собою єдиний сервер, який управляв усім середовищем інсценування. Це було не ідеально, оскільки воно не нагадувало виробництво, де Rails стоншується, а БД знаходилась на окремих ящиках. Що б я рекомендував, це використання середовища шеф-кухаря для розділення інсценізації та виробництва. (Так було, коли я туди потрапив, і я просто не мав часу на виправлення цього, перш ніж я пішов.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.