Kada aplikacija ne radi, najmanje što želite čuti od kolega je fraza „problem je s vaše strane“. Na kraju trpe korisnici – a njima je svejedno koja je strana tima odgovorna za kvar. DevOps kultura se pojavila upravo kako bi ujedinila razvoj i podršku i okupila ih oko zajedničke odgovornosti za konačni proizvod.
Koje prakse spadaju pod pojam DevOps i zašto su potrebne? Čime se bave DevOps inženjeri i što bi trebali znati? Na ta i druga pitanja odgovaraju stručnjaci iz EPAM-a: Kiril Sergejev, sistemski inženjer i DevOps evangelist, i Igor Bojko, vodeći sistemski inženjer i koordinator jednog od DevOps timova kompanije.

Zašto je potreban DevOps?
Ranije je postojala barijera između programera i podrške (tzv. operacija). Zvuci paradoksalno, ali su imali različite ciljeve i KPI-eve, iako su radili na zajedničkom cilju. Cilj razvoja bio je što brže realizirati poslovne zahtjeve i dodati ih u funkcionalni proizvod. Podrška je odgovarala za to da aplikacija stabilno radi – a bilo kakve promjene su ugrožavale stabilnost. Očigledan je sukob interesa – DevOps se pojavio kako bi ga riješio.
Što je DevOps?
Pitanje je dobro – i sporno: konačno se u svijetu o tome još nije postigao dogovor. U EPAM-u smatraju da DevOps objedinjuje tehnologije, procese i kulturu suradnje unutar tima. Ova integracija usmjerena je na kontinuiranu isporuku vrijednosti krajnjim korisnicima.
Kiril Sergejev: „Programer piše kod, testeri ga provjeravaju, a administratori instaliraju konačni proizvod u proizvodno okruženje. Dugo su ti dijelovi tima bili pomalo raspršeni, a onda je došla ideja da ih ujedinimo zajedničkim procesom. Tako su se pojavile DevOps prakse.
Došao je dan kada su se programeri i sistemski inženjeri zainteresirali za rad jedni drugih. Barijera između proizvodnje i podrške počela je nestajati. Tako je nastao DevOps, koji uključuje prakse, kulturu i način suradnje u timu.

U čemu se sastoji suština DevOps kulture?
Odgovornost za konačni rezultat leži na svakom članu tima. Najzanimljivija i najteža stvar u filozofiji DevOps-a je shvatiti da konkretna osoba ne odgovara samo za svoj dio posla, već je odgovorna za to kako će cijeli proizvod funkcionirati. Problem nije na strani nekoga; to je zajednički izazov, i svaki član tima pomaže u njegovom rješavanju.
Najvažnija postavka DevOps kulture je rješavanje problema, a ne samo primjena DevOps praksi. Štoviše, te prakse se ne implementiraju 'na nečijoj strani', već na cijelom proizvodu. Projektu nije potreban isključivo DevOps inženjer – potrebna su mu rješenja problema, a uloga DevOps inženjera može biti raspodijeljena među više članova tima s različitim specijalizacijama.
Koje su to DevOps prakse?
DevOps prakse pokrivaju sve faze životnog ciklusa softvera.
Ihor Bojko: "Idealna situacija je kada počnemo primjenjivati DevOps prakse odmah na inicijaciji projekta. Zajedno s arhitektama planiramo kakvu će arhitekturu aplikacija imati, gdje će se nalaziti i kako će se skalirati, biramo platformu. Trenutno je popularna mikroservisna arhitektura – za nju biramo sustav orkestracije: potrebno je znati upravljati svakim dijelom aplikacije posebno i ažurirati ga neovisno od drugih. Još jedna praksa je 'infrastruktura kao kod'. Ovo je pristup pri kojem se infrastruktura projekta stvara i upravlja putem koda, a ne izravnim interakcijama sa serverima."
Nakon toga prelazimo na fazu razvoja. Ovdje je jedna od najvećih praksi izgradnja CI/CD: potrebno je pomoći developerima da brzo integriraju promjene u proizvod, u malim dijelovima, češće i bezbolnije. CI/CD pokriva provjeru koda, spoj na glavnu granu kodne baze i implementaciju aplikacije na testne i produkcijske okruženja.
Na fazama CI/CD kod prolazi kroz quality gates. Pomoću njih provjerava se da kod koji dolazi s radne stanice developera zadovoljava određene kriterije kvalitete. Ovdje se dodaje unit i UI testiranje. Za brzo, bezbolno i fokusirano implementiranje proizvoda može se odabrati odgovarajući tip deploya.
DevOps prakse imaju mjesto i u fazi podrške gotovog proizvoda. Koriste se za praćenje, povratne informacije, sigurnost i implementaciju promjena. Na sve te zadatke DevOps gleda s aspekta kontinuiranih poboljšanja. Minimimiziramo ponavljajuće operacije, automatiziramo ih. U to spadaju migracije, proširenje aplikacije i održavanje funkcionalnosti.
Kako su korisne DevOps prakse?
Da pišemo udžbenik o modernim DevOps praksama, na prvoj bi stranici bila tri stavka: automatizacija, ubrzanje izdavanja i brza povratna informacija od korisnika.
Kiril Sergejev: "Prvo – to je automatizacija. Sve interakcije u timu možemo automatizirati: napisali smo kod – objavili – provjerili – instalirali – prikupili povratne informacije – vratili se na početak. Sve to – automatski.
Drugo – ubrzanje izlaska izdanja i čak pojednostavljenje razvoja. Klijentu je uvijek važno da proizvod što prije izađe na tržište i počne donositi koristi prije nego što konkurentski primjerci stignu. Proces isporuke proizvoda može se beskrajno poboljšavati: skraćivati vrijeme, dodavati dodatne kontrolne točke, usavršavati praćenje.
Treće – to je ubrzanje povratne informacije od korisnika. Ako ima pritužbi, možemo odmah uvesti ispravke i odmah ažurirati aplikaciju.

Kako se odnose pojmovi "sistem inženjer", "build inženjer" i "DevOps inženjer"?
Preklapaju se, ali se odnose na malo različita područja.
Sistem inženjer u EPAM-u je pozicija. Mogu biti različitih razina: od juniora do chief specijalista.
Build inženjer – to je više uloga koju možete obavljati na projektu. Danas tako nazivamo ljude odgovorne za CI/CD.
DevOps inženjer je stručnjak koji implementira DevOps prakse na projektu.
Ako sve to sumiramo, dobijamo otprilike sljedeće: osoba na poziciji sistem inženjera obavlja ulogu build inženjera na projektu i bavi se implementacijom DevOps praksi.
Čime se zapravo bavi DevOps inženjer?
DevOps inženjeri spajaju sve dijelove projekta. Razumiju specifičnosti rada programera, testera, sistemskih administratora i pomažu im da olakšaju svoj posao. Razumiju potrebe i zahtjeve poslovanja, njegovu ulogu u procesu razvoja – te grade proces uzimajući u obzir interese klijenta.
Puno smo govorili o automatizaciji – time se DevOps inženjeri bave prvenstveno. To je vrlo važno područje, koje osim ostalog uključuje pripremu okruženja.
Kiril Sergejev: „Prije nego što uvedemo ažuriranja u proizvod, potrebno ih je testirati u vanjskom okruženju. DevOps inženjeri ga pripremaju. Oni također uspostavljaju DevOps kulturu unutar projekta: implementiraju DevOps prakse na svim razinama svojih projekata. Ova tri načela: automatizacija, pojednostavljenje, ubrzanje – oni donose svuda gdje mogu doći.“
Što bi DevOps inženjer trebao znati?
U osnovi, treba imati znanja iz različitih područja: programiranje, rad s operativnim sustavima, bazama podataka, sustavima gradnje i konfiguracije. Treba mu dodati i vještine rada s oblačnom infrastrukturom, sustavima orkestracije i praćenja.
1. Programski jezici
DevOps inženjeri poznaju nekoliko osnovnih jezika za automatizaciju i mogu, na primjer, reći programeru: „Hajde da instalaciju koda ne radimo ručno, već pomoću našeg skripta koji sve automatizira? Za njega ćemo pripremiti config datoteku, bit će lako čitljiva i za tebe i za nas – te ćemo je moći prilagoditi u svakom trenutku. A također ćemo vidjeti tko, kada i zašto unosi promjene u nju.“
DevOps inženjer može naučiti jedan ili više od ovih jezika: Python, Groovy, Bash, Powershell, Ruby, Go. Nije potrebno poznavati ih na dubokom nivou – dovoljno je poznavati osnove sintakse, principe OOP-a, te sposobnost pisanja jednostavnih skripti za automatizaciju.
2. Operacijski sustavi
DevOps inženjer treba razumjeti na kojem serveru će biti instaliran proizvod, u kojem okruženju će se pokretati, s kojim će uslugama komunicirati. Može se specijalizirati za Windows ili Linux obitelji.
3. Sustavi upravljanja verzijama
Bez poznavanja sustava upravljanja verzijama, DevOps inženjer ne može napredovati. Git je jedan od najpopularnijih sustava u ovom trenutku.
4. Cloud provajderi
AWS, Google, Azure – posebno ako govorimo o Windows smjeru.
Kiril Sergejev: «Oblačni pružatelji usluga nude nam virtualni serveri, koji se savršeno uklapaju u CI/CD okvire.
Postavljanje deset fizičkih servera zahtijeva otprilike stotinu ručnih operacija. Svaki server potrebno je ručno pokrenuti, instalirati i konfigurirati odgovarajući operacijski sustav, instalirati našu aplikaciju na ovih deset servera, a zatim deset puta sve provjeriti. Oblačne usluge zamjenjuju ovaj postupak s deset redaka koda, a dobar DevOps inženjer treba znati kako ih koristiti. Tako štedi vrijeme, resurse i novac – kako za klijenta, tako i za kompaniju».
5. Sustavi orkestracije: Docker i Kubernetes
Kiril Sergejev: «Virtualni serveri su podijeljeni u kontejnere, u svaki od kojih možemo instalirati našu aplikaciju. Kada je mnogo kontejnera, potrebno je njima upravljati: jedan uključiti, drugi isključiti, negdje napraviti sigurnosne kopije. To postaje prilično složen zadatak za koji je potreban sustav orkestracije.
Ranije se svakim aplikacijom bavio poseban server – sve promjene u njegovom radu mogle su utjecati na ispravnost aplikacije. Zahvaljujući kontejnerima, aplikacije postaju izolirane i pokreću se odvojeno – svaka na svojoj virtualnoj mašini. Ako dođe do kvara, ne treba trošiti vrijeme na traženje uzroka. Lakše je uništiti stari kontejner i dodati novi».
6. Sustavi konfiguracija: Chef, Ansible, Puppet
Kada je potrebno održavati cijeli park servera, potrebno je izvesti mnoge jednake operacije. To je dugotrajno i složeno, a ručni rad povećava šansu za grešku. Tu na pomoć dolaze sustavi konfiguracija. S njima se stvara skripta koja je jednostavna za čitanje i programerima, i DevOps inženjerima, i sistemskim administratorima. Ova skripta pomaže u izvođenju istih operacija na serverima automatski. Tako se smanjuje broj ručnih operacija (i, posljedično, grešaka).
Kakvu karijeru može izgraditi DevOps inženjer?
Može se razvijati i horizontalno, i vertikalno.
Ihor Bojko: «S aspekta horizontalnog razvoja, DevOps inženjeri imaju sada najšire perspektive. Sve se stalno mijenja, a vještine se mogu razvijati u raznim smjerovima: od sustava za kontrolu verzija do nadzora, od upravljanja konfiguracijama do baza podataka.
Možete postati sistemski arhitekt ako vas zanima kako aplikacija radi kroz sve faze svog životnog ciklusa - od razvoja do podrške.
Kako postati DevOps inženjer?
- Pročitajte knjige "Projekt 'Feniks'" i DevOps Handbook. To su stvarne stijene filozofije DevOps, pri čemu je prva - roman.
- Istražite tehnologije sa gornjeg popisa: samostalno ili na online tečajevima.
- Pridružite se kao DevOps inženjer na open source projektu.
- Vježbajte i predlažite DevOps prakse na svojim osobnim i poslovnim projektima.
Izvor: habr.com
