Zarządzaj książkami kucharskimi szefów kuchni w środowisku zespołowym

13

Uczę się szefa kuchni i mam problemy ze zorganizowaniem wszystkiego do pracy z moim zespołem.

Na początek wydaje się, że powinieneś utworzyć folder repo szefa kuchni, w którym będziesz przechowywać i modyfikować książki kucharskie używane do zarządzania twoimi węzłami.

Pracuję nad różnymi projektami i każdy z nich jest już pod kontrolą źródła git. Idealnie trzymałbym jeden folder repo szefa kuchni w każdym z moich projektów z książkami kucharskimi tych projektów, prawda?

Jednak w folderze chef-repo muszę dodać folder konfiguracji (.chef) z konfiguracją noża i kluczami, które są dla mnie specyficzne. Czy normalne jest po prostu dodanie folderu .chef do pliku gitignore?

Rozumiem, że książki kucharskie są przesyłane na serwer szefa kuchni, a następnie wdrażane. Jak inne zespoły oddzielają inscenizację od środowisk produkcyjnych bez powielania dużej ilości pracy? Mamy oddział główny, który jest naszym oddziałem produkcyjnym, oddział deweloperski, który jest naszym oddziałem przejściowym (otrzymuje mniej niż 5% żądań witryny) i oddziałami funkcji. Przez większość czasu gałąź dewelopera, gdy stabilna jest scalona z gałęzią główną. Jak możemy przesłać książki kucharskie oddzielnie, aby mieć dwa środowiska w osobny sposób?

Dzięki za pomoc!

Alex Recarey
źródło
Czy możesz skonfigurować .cheffolder do używania zmiennych środowiskowych lub czegoś takiego?
ceejayoz
Czy mógłbyś bardziej szczegółowo opisać swój cel? Jaką infrastrukturę chcesz zautomatyzować za pomocą Chef? Wspomniałeś o różnych gałęziach - jeśli mówisz o wdrażaniu oprogramowania, lepszym rozwiązaniem może być narzędzie CI takie jak Jenkins.
geewiz
Tak dobrze, jak kukiełka obsługuje takie środowiska, natywnie.
Tom O'Connor,

Odpowiedzi:

15

Pracuję z wieloma projektami, więc rozwiązanie cjc nie będzie dla mnie działać. Występuje również problem konfiguracji wspólnej z niestandardową (adresy itp. Są wspólne dla firmy, jest też trochę magii w konfiguracjach). Schemat, na którym ostatecznie się zdecydowałem, jest trochę włamaniem, ale jest wygodny w użyciu.

Zamiast globalnego ~/.chefużywam podkatalogu „.chef” w repozytorium szefów kuchni, który nie jest przechowywany w git (jest dodawany do .gitignore). Mam również plik config/knife.rb, który jest zapisany w Git i zawiera udostępnioną konfigurację. Zaczyna się od tego fragmentu:

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

To ładuje pliki .chef/knife-local.rbzawierające konfigurację niestandardową (w podstawowej wersji jest to po prostu OPSCODE_USER='username'stała, która jest później używana, ale może zawierać dowolną konfigurację noża) i .chef/knife-secrets.rbktóra zawiera wspólne sekrety (klucze AWS itp.).

Poniżej znajduje się regularna konfiguracja noża, która wykorzystuje stałe zdefiniowane w tych plikach, np .:

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

W ten sposób osiągam standaryzację konfiguracji noża w całej firmie, co z kolei oznacza, że ​​każdy fragment kodu lub wywołanie noża udostępnione na wiki będzie działać dla wszystkich. W samym nożu jest dość zamieszania i magii - różne konfiguracje tylko pogorszyłyby sytuację. Ponadto każdy zyskuje dzięki małym magicznym fragmentom, takim jak ten, który umożliwia knife sshkorzystanie z logowania skonfigurowanego przez użytkownika~/.ssh/config

Jest także kwestia wspólnych tajemnic: klucz sprawdzania poprawności serwera szefa kuchni, przechowywane w nim klucze AWS knife-secrets.rb, prywatny klucz SSH EC2, klucze zaszyfrowanej torby danych i tak dalej. Zdecydowanie nie chcemy, aby były one przechowywane w repozytorium - a właściwie gdziekolwiek, gdzie nie są bezpiecznie szyfrowane. Rozpowszechniamy więc te pliki jako .tar.gzplik, który jest szyfrowany GPG wszystkim w firmie i udostępniany przez Dropbox.

Konfiguracja tego wszystkiego staje się skomplikowana i chcę, aby ludzie w zespole faktycznie z niej korzystali, więc jest ostatni element: rake initzadanie, które tworzy .chefkatalog, dowiązania config/knife.rbtam, odszyfrowuje i rozpakowuje chef-secrets.tgzplik, upewnia się, że prywatny klucz użytkownika Opscode Platforma jest tam i .chef/knife-local.rbjest poprawnie skonfigurowany, symbolizuje wtyczki noży i ustawia odpowiednie uprawnienia do katalogu i plików w nim zawartych. To zadanie jest skonfigurowane tak, aby można było bezpiecznie uruchamiać je wielokrotnie w już zainicjowanym repozytorium (np. W celu aktualizacji sekretów lub wtyczek noża).

Istnieje również zadanie pomocnika, które przepakowuje wszystkie sekrety, szyfruje tarball wszystkim i kopiuje je do Dropbox, aby ułatwić dodawanie nowych pracowników lub zmianę tajemnic.

Odnośnie wielu środowisk: szef kuchni ma funkcję zwaną środowiskami . Jeszcze go nie użyłem, ale powinien zrobić to, czego potrzebujesz. Możesz także ściśle oddzielić środowisko produkcyjne (aby uniknąć deweloperów posiadających klucze, które w jakikolwiek sposób odnoszą się do środowiska produkcyjnego) poprzez posiadanie dwóch oddzielnych organizacji Hosted Chef lub serwerów Chef. Ten fragment knife.rb pokazuje, jak skonfigurować nóż w inny sposób w oparciu o aktualnie sprawdzoną gałąź - możesz go użyć do ustawienia środowiska, a także adresu URL serwera szefa kuchni. Dostępna jest również wtyczka noża zwana nożem-przepływem , zapewniająca pełniejszy przepływ pracy obejmujący dwie organizacje.

Maciej Pasternacki
źródło
Dziękuję za szczegółową odpowiedź. Widok pracy, która
wymaga
3

Musisz skonfigurować dwa serwery Chef, jeden do produkcji i jeden do programowania. Powodem jest to, że żaden pojedynczy serwer Chef nie obsługuje rozgałęzionego programowania; nawet w środowiskach.

Możesz też zrezygnować z koncepcji serwera szefa kuchni i użyć szefa kuchni solo. Możesz utrzymywać swoje książki kucharskie w Git. Możesz rozgałęziać się i łączyć. Możesz zignorować problemy z danymi uwierzytelniającymi noża, ponieważ nie będziesz ich więcej używać.

Nie będziesz mógł korzystać z wyszukiwania noża ani torby danych **. Ale niektórzy ludzie i tak nie potrzebują tych funkcji.

** Cóż, możesz posortować: http://wiki.opscode.com/display/chef/Data+Bags#DataBags-UsingDataBagswithChefSolo

kgilpin
źródło
2

Mam w domu dwa katalogi: .chef i repo szefa kuchni. Repozytorium szefów kuchni jest w porządku. .Chef to jakiś prywatny katalog, który jest domyślny dla noża. Nie musisz wkładać swoich sekretów z .chef do git; nóż będzie szukał ~ / .chef.

cjc
źródło
2

Twój katalog ~ / .chef nie powinien znajdować się w repozytorium git.

Mam katalog ~ / projects /, w którym mam repozytorium mojego szefa kuchni. W tym idzie konfiguracja moich serwerów.

Moja ostatnia praca była inżynierem systemów w sklepie Ruby-on-Rails. Nasze konfiguracje nginx, lakierów i railsów (między innymi) wchodzą w repozytorium szefów kuchni, ale same aplikacje Railsów były przechowywane w osobnych repozytoriach git i były wdrażane osobno.

Nasze środowisko pomostowe było pojedynczym serwerem, który obsługiwał całe środowisko pomostowe. Nie było to idealne, ponieważ nie przypominało produkcji, w której Rails były cienkie, a DB znajdowało się na osobnych pudełkach. To, co poleciłbym, to użycie Środowiska Szefa Kuchni do oddzielenia Inscenizacji i Produkcji. (Tak było, kiedy tam dotarłem i po prostu nie mam czasu, aby to naprawić, zanim odszedłem).

gWaldo
źródło