Kui rakendus ei tööta, on enim ebasoovitav kuulda kolleegide ütlevat, et "probleem on teie poolel". Lõppkokkuvõttes kannatavad kasutajad – ja neile ei ole oluline, milline meeskonna osa vastutab tõrke eest. DevOpsi kultuur sündis just selleks, et tuua kokku arendajad ja toetamine ning liita nad ühise vastutuse ümber lõpp-produkti eest.
Millised praktikad kuuluvad DevOps'i mõistetesse ja miks need on vajalikud? Mida teevad DevOps-insenerid ja mida nad peaksid oskama? Neile ja teistele küsimustele vastavad EPAM'i eksperdid: Kirill Sergeev, süsteemiinsener ja DevOps'i evangelist, ning Igor Boiko, juhtiv süsteemiinsener ja ühe DevOps meeskonna koordinaator ettevõttes.

Miks on DevOps vajalik?
Varem oli arendajate ja toe (nn operations) vahel barjäär. Kõlab paradoksaalselt, kuid neil olid erinevad eesmärgid ja KPI-d, kuigi nad tegid ühte ja sama asja. Arenduse eesmärk oli võimalikult kiiresti ellu viia äri nõuded ja lisada need töötavasse tootesse. Toe ülesanne oli tagada, et rakendus töötaks stabiilselt – ning igasugused muudatused ohustavad stabiilsust. Erinevad huvid olid ilmsed – DevOps tekkis selle lahendamiseks.
Mis on DevOps?
Küsimus on hea – ja vaieldav: maailmas ei ole sellega veel lõpuni kokkulepituks saadud. EPRM'i arvates ühendab DevOps endas tehnoloogiad, protsessid ja kultuuri meeskonna sees. See ühendamine on suunatud pidevale väärtuste kohaletoimetamisele lõppkasutajatele.
Kirill Sergeev: "Arendajad kirjutavad koodi, testijad kontrollivad seda ning administraatorid paigutavad lõpp-produkti tootmiskeskkonda. Pikka aega olid need meeskonna osad veidi sigarinud, kuni tekkis idee ühendada need ühise protsessiga. Nii sündisid DevOps'i praktikad."
On saabunud päev, mil arendajad ja süsteemiinsenerid hakkasid huvituma üksteise töödest. Tootmise ja toe vaheline barjäär hakkas hajuma. Nii tekkis DevOps, kuhu kuuluvad praktikad, kultuur ja meeskonna koostöö korrastus.

Mis on DevOps kultuuri olemus?
Iga, et iga meeskonna liikme jaoks on vastutus lõpptulemuse eest. DevOps filosoofia kõige huvitavam ja keerulisem osa on mõista, et konkreetne inimene ei vastuta ainult oma tööetapi eest, vaid ka selle eest, kuidas kogu toode töötab. Probleem ei seisne mitte kellegi poole peal – see on ühine ja iga meeskonna liige aitab selle lahendamisele kaasa.
DevOps kultuuri kõige olulisem põhimõte on probleemide lahendamine, mitte lihtsalt DevOps praktika rakendamine. Lisaks, need praktikad ei rakendata 'kellegi poole peal', vaid kogu toote ulatuses. Projekt vajab mitte lihtsalt DevOps inseneri, vaid lahendust probleemidele, ja DevOps inseneri roll võib olla jagatud erinevate erialade meeskonna liikmete vahel.
Millised on DevOps praktikad?
DevOps praktikad katab kõiki tarkvaraloome elutsükli etappe.
Igor Boiko: "Ideaalne olukord on see, kui me hakkame DevOps praktikaid rakendama kohe projekti alguses. Koos arhitektidega plaanime, milline on rakenduse arhitektuur, kus see paikneb ja kuidas see skaleerub, ning valime platvormi. Praegu on moes mikroteenuste arhitektuur – selle jaoks valime orkestreerimissüsteemi: tuleb osata iga rakenduse elementi eraldi hallata ja uuendada seda sõltumatult teistest. Veel üks praktika on 'infrastruktuur kui kood'. See on lähenemine, kus projekti infrastruktuur luuakse ja hallatakse koodi abil, mitte serveritega vahetu suhtlemise kaudu."
Seejärel liigume arendusetappi. Siin on üks suurimaid praktikaid CI/CD loomine: tuleb aidata arendajatel toote muudatusi kiiresti, väikeste osade kaupa, sagedamini ja valutult integreerida. CI/CD katab nii koodi kontrollimise, koodi baasi üleviimise kui ka rakenduse juurutamise test- ja tootmis keskkondades.
CI/CD etappide käigus läbib kood quality gates. Nende abil kontrollitakse, et arendaja tööjaamast välja tulnud kood vastab kehtestatud kvaliteedinõuetele. Siia lisanduvad üksuste ja UI testimine. Toote kiireks, valutuks ja fookustatud juurutamiseks on võimalik valida sobiv juurutamise tüüp.
DevOps-praktikatel on koht ka valmis toote toetamise etapis. Neid kasutatakse jälgimiseks, tagasiside saamiseks, turvalisuse tagamiseks ja muudatuste rakendamiseks. DevOps vaatab kõiki neid ülesandeid pideva parenduse perspektiivist. Me vähendame korduvaid toiminguid, automatiseerime need. Siia kuuluvad ka migreerimised, rakenduse täiendamine ja töökindluse säilitamine.
Millist kasu toovad DevOps-praktiid?
Kui me kirjutaksime õpikute juhendit kaasaegsete DevOpi praktikate kohta, oleks selle esimesel leheküljel kolm punkti: automatiseerimine, väljaande kiirus ja kiire tagasiside kasutajatelt.
Kirill Sergeev: "Esimene on automatiseerimine. Kõik suhtlemised meeskonnas saame automatiseerida: kirjutasime koodi – puhusime välja – kontrollisime – installisime – kogusime tagasisidet – naasime algusesse. Kõik see toimub automaatselt.
Teine – väljaande kiirus ja isegi arenduse lihtsustamine. Kliendile on alati oluline, et toode jõuaks turule võimalikult kiiresti ja tooks kasu varem kui konkurentide analoogid. Toote kohaletoimetamise protsessi saab pidevalt täiustada: aega lühendada, lisada täiendavaid kontrollpunkte, arendada jälgimist.
Kolmas on kasutaja tagasiside kiirus. Kui tal on märkusi, saame kohe teha kohandusi ja koheselt rakendada rakenduse uuendust.

Kuidas on seotud mõisted „süsteemiinsener“, „build-insener“ ja „DevOps-insener“?
Need kattuvad, aga kuuluvad veidi erinevatesse valdkondadesse.
ERAМis on süsteemiinsener ametikoht. Need võivad olla erinevatel tasemetel: alates nooremast kuni juhtivspetsialisti tasemeni.
Build-insener on pigem roll, mida saab projektis täita. Praegu nimetatakse nii inimesi, kes vastutavad CI/CD eest.
DevOps-insener on spetsialist, kes rakendab projektis DevOps-praktiid.
Kui seda kokku võtta, siis saadakse umbes järgnev: süsteemiinseneri ametis isik täidab projektis build-inseneri rolli ja tegeleb seal DevOps-praktiate rakendamisega.
Millega täpselt tegeleb DevOps-insener?
DevOps-insenerid koguvad kokku kõik osad, millest projekt koosneb. Nad tunnevad programmeerijate, testijate, süsteemihaldurite töö spetsiifikat ja aitavad nende tööd lihtsustada. Nad mõistavad äri vajadusi ja nõudeid, selle rolli arendusprotsessis – ja loovad protsessi, arvestades tellija huve.
Me oleme palju rääkinud automatiseerimisest - sellega tegelevad DevOps-insenerid eelkõige. See on väga suur punkt, kuhu kuulub muu hulgas keskkonna ettevalmistamine.
Kirill Sergeev„Enne uutest versioonidest toote sisseviimist tuleb neid testida kolmandas keskkonnas. Selle valmistavad ette DevOps-insenerid. Nemad juurutavad projektis ka DevOps-kultuuri tervikuna: nad rakendavad DevOps-tavasid kõigis oma projektide kihtides. Need kolm põhimõtet: automatiseerimine, lihtsustamine, kiirendamine – nad toovad igale poole, kuhu nad saavad ulatuda.”
Mida peab teadma DevOps-insener?
Laias laastus peaks tal olema teadmisi erinevates valdkondades: programmeerimine, töö operatsioonisüsteemidega, andmebaasid, ehitus- ja konfigureerimissüsteemid. Nendele lisandub oskus töötada pilveinfrastruktuuriga, orkestreerimise ja jälgimisvõimetega.
1. Programmeerimiskeeled
DevOps-insenerid tunnevad mitmeid põhikeeli automatiseerimiseks ja võivad näiteks öelda programmeerijale: „Las ma tean, et sa ei installi koodi käsitsi, vaid meie skripti abil, mis kõik automatiseerib? Me valmistame sellele ette config-faili, mida on mugav lugeda nii sulle kui ka meile - ja me saame seda igal ajal muuta. Lisaks näeme me, kes, millal ja miks selles muudatusi teeb.”
DevOps-insener võib õppida ühe või mitu neist keeltest: Python, Groovy, Bash, Powershell, Ruby, Go. Sügavalt tundma õppimine ei ole vajalik - piisab süntaksi põhialustest, OOP põhimõtetest, oskusest kirjutada lihtsaid skripte automatiseerimiseks.
2. Operatsioonisüsteemid
DevOps-insener peab mõistma, millisel serveril toode paigaldatakse, millises keskkonnas see käivitatakse ja milliste teenustega see suhtleb. Võib valida erialaks Windowsi või Linuxi perekonna.
3. Versioonihaldussüsteemid
Ilma versioonihaldussüsteemide tundmisega ei pääse DevOps-insener kuhugi. Git on hetkel üks kõige populaarsemaid süsteeme.
4. Pilveteenusepakkujad
AWS, Google, Azure – eriti kui räägime Windowsi suunast.
Kirill Sergeev: «Pilveservereid pakuvad meile erinevad tingimuste poolest üsna palju, samuti parema kopeerimise jaoks on siin, mis sobivad suurepäraselt CI/CD raamidele.
Kümne seadistamine füüsilised serverid nõuab umbes sada käsitsi toimingut. Iga server tuleb käsitsi käivitada, vajalik opsüsteem installida, meie rakendus kümnesse serverisse paigaldada ja seejärel kümme korda kõik üle kontrollida. Pilveteenused asendavad selle protsessi kümne koodireaga ning hea DevOps-insener peab oskama nendega opereerida. Nii säästab ta aega, energiat ja raha – nii kliendi kui ka ettevõtte jaoks.»
5. Orkestreerimissüsteemid: Docker ja Kubernetes
Kirill Sergeev: «Virtuaalserverid jagunevad konteineriteks, kuhu saame paigaldada meie rakenduse. Kui konteinerite arv on suur, tuleb neid hallata: üks käivitada, teine välja lülitada, kuskil varukoopiad teha. See muutub üsna keeruliseks, kuhu on vaja orkestreerimissüsteemi.
Varem hoolitses iga rakenduse eest eraldi server – kõik muudatused selle töös võisid mõjutada rakenduse toimivust. Kui eelnevalt oli rakendused isoleeritud konteinerites, käivituvad need nüüd eraldi – igaühes oma virtuaalmasinas. Kui juhtub tõrge, ei pea aega raiskama põhjuse leidmiseks. Lihtsam on vanad konteinerid hävitada ja uued lisada.»
6. Konfiguratsioonisüsteemid: Chef, Ansible, Puppet
Kui on vaja hooldada suurt serverite parki, tuleb teha palju sarnaseid toiminguid. See on aeganõudev ja keeruline, lisaks suurendab käsitöö vea võimalust. Siin tulevad appi konfiguratsioonisüsteemid. Nende abil luuakse skript, mida on mugav lugeda nii programmeerijatele kui ka DevOps-inseneridele ja süsteemihalduritele. See skript aitab automaatselt sama toimingut serverites läbi viia. Nii jääb vähem käsitsi tehtavaid toiminguid (ja seega ka vigu).
Millise karjääri saab DevOps-insener ehitada?
Ehitada saab nii horisontaalselt kui ka vertikaalselt.
Igor Boiko: «Horisontaalse arengu vaatenurgast on DevOps-inseneridel praegu kõige laiemad väljavaated. Kõik muutub pidevalt ja oskusi saab arendada kõige erinevamates suundades: versioonihaldussüsteemidest, märgistuseni, konfiguratsioonihaldusest kuni andmebaasini.
Süsteemi arhitektiks saab, kui töötajal on huvi mõista, kuidas rakendus töötab kogu oma elutsükli vältel – alates arendusest kuni toega.
Kuidas saada DevOps-inseneriks?
- Lugege raamatuid „Projekt ‘Fööniks’” ja DevOps Handbook. Need on tõelised DevOpsi filosoofia nurgakivid, kusjuures esimene on ilukirjanduslik romaan.
- Uurige ülaltoodud tehnoloogiaid: iseseisvalt või veebikursustel.
- Liituge DevOps-insenerina avatud lähtekoodiga projektiga.
- Harjutage ja rakendage DevOpsi praktikaid oma isiklikes ja tööprojektides.
Allikas: habr.com
