To wcale nie artykuł o gotowaniu. Chociaż praca z Chef’em ma wiele wspólnego z gotowaniem i nie jest to tylko kwestia nazewnictwa. Dodawanie cookbook’ów i recipe’ur to trochę jak dodawanie składników i przypraw do zupy jaką jest serwer, jednak nie o tym jest ten artykuł, więc do rzeczy.

Po co?

Właśnie, „Po co?” jest podstawowym pytaniem w tym zagadnieniu. Pytań jest jeszcze wiele. Czy jest sens wprowadzać automatyzację skoro każdy programista powinien potrafić skonfigurować sobie środowisko programistyczne? Co osiągniemy automatyzując środowiska developerskie? Czy czas poświęcony na automatyzację zwróci nam się?

Pytań w tym stylu możemy zadawać zdecydowanie więcej. Części pytań i odpowiedzi ma charakter dysputy filozoficznej i pewnie takimi pozostanie. Teraz postaram się przestawić plusy tej automatyzacji, a w dalszej części napisać jak ją zrobiliśmy.

Plusy

Jak każda automatyzacja i ta miała na celu zautomatyzowanie pewnych procesów. Gdzieś kiedyś przeczytałem, że opłaca się automatyzować (oprogramowywać) procesy, w których czas poświęcony na automatyzację zwróci się po roku. Czy w tym przypadku tak jest? Dokładnie nie wiem, nie prowadziliśmy dokładnych szacunków, więc moje stwierdzenie, że zwraca się w momencie wdrożenia drugiej osoby w projekt jest tylko subiektywnym odczuciem.

W każdym razie oszczędność czasu przy wdrożeniu kolejnych osób w projekt jest spora. Dostają oni gotowe środowisko „out of the box”. W przypadku prostych projektów może nie jest to aż tak odczuwalne godzinowo. Jednak w przypadku projektów wymagających specyficznych ustawień i aplikacji może to być nawet kilka dni, zwłaszcza jak wiedza tajemna dotycząca projektu nie została zapisana albo uleciała z pamięci autora zastosowanych rozwiązań.

I to jest kolejny plus. Wiedza o projekcie, jego konfiguracji jest zapisana i wersjonowana (repozytorium z cookbook’ami jest w git) nawet jeśli są to tylko linijki kodu.

Właśnie linijki kodu. Wszystko, co jest związane z tworzeniem automatyzacji dzieje się w Ruby. Ruby jest już bardzo popularnym językiem programowania, wiele osób już go zna, a jeśli nie, to bardzo szybko można się go nauczyć. Nie musimy się zatem uczyć jakiegoś nowego języka, którego nie użyjemy nigdzie indziej.

Kolejnym bardzo dużym plusem zastosowania maszyn wirtualnych jest możliwość odwzorowania środowiska produkcyjnego.

Chef_HORl_CCan_Reg

Jak to działa?

Zasada działania jest bardzo prosta. Wyobraźmy sobie, że cały proces rozwoju aplikacji dzieje się na zewnętrznym serwerze. Dokładnie tak jest w tym przypadku.

Jest tylko jedno ‚małe ale’ – ten serwer jest na naszym komputerze. Co nam to daje. Możemy korzystać z dobrodziejstwa katalogów udostępnionych. A co za tym idzie każdy programista może korzystać ze swojego ulubionego edytora pod warunkiem, że jest to vim :).

Jak to zrobiliśmy?

Składniki

– 1 szt Chef Server

– 1 szt Chef Client

– 1 szt Wirtyalna Maszyna

– 1 szt Knife

Przygotowanie

Stawiamy Chef Server i przy pomocy Knife wrzucamy na niego Cookbooki. Na Maszynie Wirtualnej odpalamy Chef Client i mamy działające środowisko programistyczne.

Przepis, który znajduje się powyżej w dużym uproszczeniu opisuje jak zrobiliśmy automatyzację środowisk developerskich. Szczegóły techniczne całego procesu automatyzacji to temat na osobny artykuł. Pokrótce omówię tylko składniki jakich użyliśmy i wspomnę o wyzwaniach jakie pojawiły się w trakcie prac.

Chef Server

Jest to aplikacja napisana w Ruby i Erlang. Stworzona została do zarządzania serwerami. Używamy jej dokładnie w ten sposób, zarządza maszynami wirtualnymi, czyli serwerami dla programistów. Aplikacja posiada panel administracyjny dostępny przez przeglądarkę, co bardzo ułatwia codzienną pracę.

Knife

Jest to narzędzie dostępne z wiersza poleceń łączące lokalne repozytorium chef (cookbook’i, role, …) z Chef Server’em.

Maszyna Wirtualna

Tego narzędzia chyba nie trzeba przedstawiać nikomu. Dodam tylko, że w automatyzacji użyte zostały rozwiązania wirtualizacji dostarczane przez VMware.

Chef Client

Jest to aplikacja uruchamianą na maszynie wirtualnej mająca za zadanie wykonać wszystkie instrukcje zawarte w cookbook’ach przypisanych danej maszynie. To ona instaluje wszystkie potrzebna programiście składniki.

Połączenie tych elementów pozwoliło na automatyzację środowisk developerskich. Wszystko działo się prawie automatycznie. Największym wyzwaniem okazało się autoryzowanie maszyn wirtualnych. Programista dodający nową maszynę musi ją z autoryzować w Chef Server. Pierwotnie wykorzystywaliśmy do tego Knife bootstrap. Jednak do tego potrzebne było repozytorium Chef. Ilość składników, jaką trzeba było połączyć stwarzała problem dla osób rozpoczynających pracę z tym środowiskiem. Okazało się, że najlepszym i najprostszym sposobem jest prosty skrypt shell’owy.

Co zyskaliśmy?

Czas! Chyba nie jest to niczym dziwnym, właśnie po to był cały trud. Dodatkowo można powiedzieć, że zyskaliśmy „święty spokój”, już mało kto pyta jak postawić dany projekt, wiedza tajemna nie zniknęła zaraz po wdrożeniu ostatniej osoby. Teraz wszystko dzieje się samo, a wdrożenie nowego programisty czy frontendowca zajmuje tylko parę chwil.

Tak działająca automatyzacja środowisk developerskich faktycznie działa, nie jest tylko nową zabawka w rękach spragnionych nowości developerów.

 

Aby dowiedzieć się więcej o automatyzacji skontaktuj się z naszymi ekspertami!