Kim jest DevOps i co musi umieć?

14 stycznia, 2021 Krzysztof Kąkol

Jeszcze kilka lat temu dokładna definicja DevOpsa nie była potrzebna, bo realia były zupełnie inne niż dziś. Programiści pełnili wiele ról jednocześnie: byli fullstackami, analitykami, testerami… Można powiedzieć, że zakres odpowiedzialności DevOpsa rozumiany był bardzo intuicyjnie.

Później sytuacja zaczęła się zmieniać.

Klienci coraz częściej pytali o dostępność DevOpsa w projekcie, a Delivery Managerowie zauważali coraz więcej zadań projektowych, które wymagały udziału osób o specyficznych umiejętnościach. To i jeszcze wiele innych czynników sprawiły, że podjęliśmy w PGS Software próbę zdefiniowania tego, za co DevOps odpowiada i co musi umieć. Wyznaczyliśmy też ścieżkę rozwoju dla naszych członków zespołu, którzy chcą zostać DevOpsami.

 

Kim zatem jest DevOps?

DevOps odpowiada za kwestie związane z automatyzacją procesów w projekcie m.in. za zorganizowanie środowiska lokalnego, repozytorium kodu, infrastrukturę czy pipeline CI/CD. DevOps to po prostu konkretna rola projektowa i specjalizacja, tak samo jak programista czy tester.

Założę się, że większość z Was spotkała się z określeniem, że “DevOps to kultura”. Oznacza to w gruncie rzeczy, że każdy członek zespołu powinien być w pewnym sensie DevOpsem.

Jednak to nie takie proste.

Umiejętności związane z chmurą, automatyzacją pipeline’ów CI/CD, NAPRAWDĘ DOBRA znajomość narzędzi typu terraform czy Jenkins, dogłębna wiedza o cyklu wytwarzania oprogramowania… To cały zestaw umiejętności, które trzeba nieustannie rozwijać.

Zobacz wywiad z Krzyśkiem Kąkolem: 

 

Za co odpowiedzialny jest DevOps?

Mówiąc najogólniej, DevOps jest odpowiedzialny za kwestie związane z automatyzacją procesów.

Co ważne, jego zadania nie są wyjęte z projektu, ale są częścią developmentu. W naszym rozumieniu DevOps jest pełnoprawnym członkiem zespołu projektowego, a nie częścią wystawionego na zewnątrz zespołu usługowego, co się czasem spotyka w dużych organizacjach.

 

My wyróżniliśmy cztery główne obszary, którymi zajmuje się DevOps:

 

1. Środowisko lokalne.

DevOps powinien pomóc zorganizować środowisko lokalne dla developerów i testerów. To często sprowadza się do wykorzystania docker-compose’a lub vagranta, ale nie na tym polega trudność. Infrastruktura chmurowa jest specyficzna i w środowisku lokalnym wiele elementów chmury musi zostać zamockowanych. Wsparcie DevOpsa jest tu nieodzowne.

 

2. Repozytorium kodu

DevOps będzie pomocny przy zorganizowaniu repozytorium kodu zarówno aplikacji, jak i całej infrastruktury. W niektórych projektach konieczne będzie również wyjaśnienie zespołowi jak pracować z wybranym modelem wersjonowania. Dlaczego? Czasami projekty są relatywnie proste (np.monolit na pojedynczym repozytorium, z prostym modelem continuous integration). Jednak coraz częściej spotykamy bardziej złożone projekty – z wieloma repozytoriami, ze skomplikowanym procesem release’u, z dużą liczbą niezależnych funkcjonalności wytwarzanych jednocześnie. Zarządzanie takim repozytorium nie jest trywialnym zadaniem.

 

3. Infrastruktura

Jak wiemy w projekcie potrzebne są środowiska – testowe czy produkcyjne. Te środowiska mogą być proste i składać się z pojedynczej maszyny wirtualnej. Często bywają jednak bardzo skomplikowane, zwłaszcza na chmurze. Na przykład cluster ECS z wieloma serwisami, kilkoma bazami danych, częścią serverlessową na lambdach itp. Stworzenie takiej infrastruktury nie jest zadaniem prostym i wymaga umiejętności związanych z daną chmurą. Bez doświadczonego DevOpsa będzie ciężko to zrobić.

 

4. Pipeline CI/CD

Wdrożenie pipeline CI/CD to kolejny ważny obszar pracy DevOpsa. Taki pipeline może być prosty – kiedyś często spotykało się np. zwykłe tzw. free-style joby na Jenkinsie. Obecnie coraz częściej wykorzystujemy bardziej złożone podejścia, np. oparte o multibranch pipeline’y czy podobne techniki w innych narzędziach. Mówiąc najogólniej, automatyzujemy coraz więcej, a za tym idzie konieczność pozyskiwania coraz większej wiedzy. Nie można tego robić “na pół gwizdka”, potrzebna jest często szeroka gama umiejętności w wielu dostępnych narzędziach.

 

Poza czterema powyższymi obszarami istnieje szeroki zestaw dodatkowych, nie mniej ważnych umiejętności:

  • automatyzowanie reakcji na incydenty,
  • monitoring aplikacji i infrastruktury,
  • implementacja i pozyskiwanie metryk różnego rodzaju,
  • tworzenie dashboardówumożliwiających obserwowanie tych metryk,
  • implementacja zasad bezpieczeństwa.

To oczywiście nie wszystko – zakres odpowiedzialności DevOpsa często wynika ze specyfiki projektu.

 

Praca DevOps w PGS Software

 

Co powinien wiedzieć DevOps?

Sednem wiedzy DevOpsowej jest rozumienie procesów wytwarzania oprogramowania i automatyzacji.

Niektóre rzeczy określone są wprost, na przykład znajomość narzędzi takich jak Jenkins, terraform (lub ich odpowiedników) oraz docker. Wiele z wymaganych umiejętności wynika z zadań DevOpsowych: skoro DevOps tworzy metryki i przygotowuje narzędzia do ich analizy, to musi te narzędzia znać. Jeśli tworzy infrastrukturę na chmurze, to musi znać tę chmurę na właściwym poziomie. Jeśli do obowiązków DevOpsa należy automatyzacja procesów, to przydaje się programowanie – w bashu czy Pythonie.

Mówiąc najprościej, to rola w zasadniczy sposób definiuje niezbędne umiejętności.

 

Dlaczego ważne jest zdefiniowanie roli DevOpsa?

Parę lat temu nie potrzebowaliśmy specjalnej definicji DevOpsa. Jak wspominałem, programista pełnił wiele ról. Teraz jednak widać tendencję do coraz większej specjalizacji.

I to właśnie specjalizacja jest kluczem do dobrych projektów.

Wciąż jednak powszechnie spotykamy się z intuicyjnym rozumieniem roli DevOpsa.

Jakie są tego konsekwencje?

Nikt wtedy nie wie, co DevOps powinien umieć i czym powinien się zajmować.
Nikt też przecież nie będzie chciał pełnić roli, w której nie do końca wiadomo o co chodzi. Czy DevOps odpowiada za release? A za incydenty bezpieczeństwa?

Rodzi się kolejna wątpliwość: czy DevOps jest w ogóle potrzebny w projekcie, skoro część zadań może wykonać programista?

Poza tym, jak pokazuje nasze doświadczenie w PGS Software, rynek i klienci domagają się DevOpsów w projekcie. Sami Delivery Managerowie zaczęli jakiś czas temu zauważać zadania projektowe wymagające udziału osób o pewnych specyficznych umiejętnościach. Developerzy z kolei nie chcieli rozwiązywać niektórych problemów, zwłaszcza tych związanych z chmurą. Trudno było się temu dziwić – wymagały one odpowiednich kompetencji i sporego doświadczenia z infrastrukturą chmurową.

Jak zdefiniowanie roli DevOpsa pomaga w projekcie?

Dzisiaj widzimy już, że opisanie roli DevOpsa po prostu ułatwia wszystkim życie i pozwala robić lepsze projekty.

Wiemy, co DevOps powinien umieć, wiemy jakie ma odpowiedzialności i umiemy stwierdzić, czy w danym projekcie jest potrzebny czy nie.

Zdjęliśmy też nieco presji z developerów, którzy już nie muszą robić wszystkiego samodzielnie. Mogą koncentrować się na potrzebach biznesu i funkcjonalnościach wytwarzanej aplikacji, a nie myśleć jak i gdzie będzie to finalnie zdeployowane.

Kolejnym ważnym czynnikiem jest odpowiedź na potrzeby klientów, którzy oczekują DevOpsów w projekcie. Jasny opis tej roli pozwala nam łatwiej wytłumaczyć klientowi za co odpowiada taka osoba i jaka powinna być jej rola w projekcie. Oczywiście czasami zdarza się, że klienci mają swoje podejście i wtedy dążymy do kompromisu. Jesteśmy w końcu od tego, aby spełniać potrzeby klientów, a nie wymuszać na nich naszą wizję działania.

 

Program PGS Upskill dla aspirujących specjalistów DevOps

Jak zostać specjalistą DevOps?

Sposobów na to, aby zostać DevOpsem jest pewnie wiele. W PGS Software, w ramach programu PGS Upskill, mamy do dyspozycji kilka ścieżek rozwojowych dla ludzi, którzy chcieliby nauczyć się tej specjalizacji. Nie zawsze chodzi o zostanie DevOpsem na pełen etat. Niektórzy chcą nauczyć się podstaw, konceptów, narzędzi, technik związanych z tym obszarem wytwarzania oprogramowania.

Tacy adepci uczą się wielu rzeczy:

1. Teoria

Na początek należy opanować kilka zagadnień teoretycznych, które są bardzo ważne i stanowią podstawę rozumienia tego, co w ogóle należy do obszaru zainteresowania DevOpsa. Są to między innymi:

warstwy komunikacji sieciowej, adresacja sieciowa, forward/reverse proxy,

– szyfrowanie i hashowanie,

– load balancing, firewalle, auto-scaling,

– typy deploymentu, monitoring aplikacji i infrastruktury.

 

2. Używanie i konfigurowanie narzędzi typowych dla DevOpsa

Chodzi tutaj o to, żeby poznać narzędzia, które przewijają się w pracy DevOpsa, np.:

  • Docker
  • Ansible
  • Terraform
  • Jenkins, Azure DevOps czy GitLabCI
  • Kubernetes

Oczywiście dobór narzędzi jest kwestią wtórną – chodzi o pokrycie obszarów, w których DevOps będzie pracował, czyli konteneryzacja, provisioning, konfiguracja, IaaC, CI/CD czy orkiestracja kontenerów.

 

3. Stworzenie aplikacji

Ostatni etap upskillu jest najdłuższy, ale i najważniejszy. Kandydat na DevOpsa tworzy prostą aplikację z dwoma serwisami, uruchomionymi na infrastrukturze chmurowej. Aplikacje robią rzeczy elementarne – jedna jest CRUDem komunikującym się z bazą danych, a druga pozwala umieszczać dowolny plik na S3. W pierwszym podejściu adept tworzy wszystko ręcznie, planując strukturę sieci, autoscaling oraz wybór usług chmurowych. Następnie robi to samo, tylko automatyzując wszystko, co da się zautomatyzować.

W ten sposób kandydat na DevOpsa jest w stanie “dotknąć” wszystkich lub przynajmniej większości aspektów “devopsowania” – oczywiście nie na poziomie eksperckim, ale na takim, który umożliwi rozpoczęcie pracy w projekcie pod okiem kogoś bardziej doświadczonego.

Potem, to już kwestia miesięcy przepracowanych w tej roli.

 

A jak Ty rozumiesz rolę DevOpsa? Dołącz do dyskusji na LinkedIN i daj znać, co o tym myślisz!

Przeczytaj wywiad z Krzysztofem na blogu JustGeekIT.

Skontaktuj się z Autorem: Krzysztof Kąkol

Praca DevOps w PGS Software

Najnowsze wpisy