Manekenu ceļvedis: DevOps Ä·Äžu veidoÅ”ana, izmantojot atvÄrtÄ pirmkoda rÄ«kus
Izveidojiet savu pirmo DevOps Ä·Ädi piecos soļos iesÄcÄjiem.
DevOps ir kļuvis par panaceju pÄrÄk lÄniem, atvienotiem un citÄdi problemÄtiskiem izstrÄdes procesiem. Bet jums ir nepiecieÅ”amas minimÄlas zinÄÅ”anas par DevOps. Tas aptvers tÄdus jÄdzienus kÄ DevOps Ä·Äde un to, kÄ izveidot vienu no piecÄm darbÄ«bÄm. Å Ä« nav pilnÄ«ga rokasgrÄmata, bet tikai "zivs", kuru var paplaÅ”inÄt. SÄksim ar vÄsturi.
Mans ievads par DevOps
Es kÄdreiz strÄdÄju ar mÄkoÅiem uzÅÄmumÄ Citi Group un izstrÄdÄju IaaS tÄ«mekļa lietojumprogrammu, lai pÄrvaldÄ«tu Citi mÄkoÅdatoÅ”anas infrastruktÅ«ru, taÄu mani vienmÄr ir interesÄjis, kÄ optimizÄt izstrÄdes Ä·Ädi un uzlabot kultÅ«ru izstrÄdÄtÄju vidÅ«. Gregs Lavenders, mÅ«su mÄkoÅu arhitektÅ«ras un infrastruktÅ«ras tehnoloÄ£iju vadÄ«tÄjs, man ieteica Å”o grÄmatu. Projekts "FÄnikss". Tas lieliski izskaidro DevOps principus un lasÄms kÄ romÄns.
Tabula aizmugurÄ parÄda, cik bieži uzÅÄmumi izlaiž jaunas versijas:
KÄ Amazon, Google un Netflix izdodas tik daudz izplatÄ«ties? Un tas ir vienkÄrÅ”i: viÅi izdomÄja, kÄ izveidot gandrÄ«z ideÄlu DevOps Ä·Ädi.
Mums Citi bija ļoti atŔķirÄ«gi, lÄ«dz mÄs pÄrgÄjÄm uz DevOps. Tad manai komandai bija dažÄdas vides, bet piegÄdi izstrÄdes serverim veicÄm manuÄli. Visiem izstrÄdÄtÄjiem bija piekļuve tikai vienam izstrÄdes serverim, kura pamatÄ ir IBM WebSphere Application Server Community Edition. VienlaicÄ«gi mÄÄ£inot piegÄdÄt, serveris ānokritaā, un katru reizi mums nÄcÄs āsÄpÄ«giā sarunÄties savÄ starpÄ. Mums bija arÄ« nepietiekams koda pÄrklÄjums ar testiem, laikietilpÄ«gs manuÄlas piegÄdes process un nebija iespÄjas izsekot koda piegÄdi, izmantojot kÄdu uzdevumu vai klienta prasÄ«bas.
Bija skaidrs, ka kaut kas steidzami jÄdara, un es atradu lÄ«dzÄ«gi domÄjoÅ”u kolÄÄ£i. MÄs nolÄmÄm kopÄ izveidot pirmo DevOps Ä·Ädi ā viÅÅ” uzstÄdÄ«ja virtuÄlo maŔīnu un Tomcat lietojumprogrammu serveri, un es parÅ«pÄjos par Jenkins, integrÄciju ar Atlassian Jira un BitBucket, kÄ arÄ« par koda pÄrklÄjumu ar testiem. Projekts bija veiksmÄ«gs: mÄs pilnÄ«bÄ automatizÄjÄm izstrÄdes Ä·Ädi, panÄcÄm gandrÄ«z 100% darbspÄjas laiku izstrÄdes serverÄ«, varÄjÄm pÄrraudzÄ«t un uzlabot koda pÄrklÄjumu, izmantojot testus, un Git filiÄli varÄja piesaistÄ«t Jira piegÄdei un izsniegÅ”anai. Un gandrÄ«z visi rÄ«ki, ko izmantojÄm, lai izveidotu DevOps Ä·Ädi, bija atvÄrtÄ pirmkoda.
Faktiski Ä·Äde tika vienkÄrÅ”ota, jo mÄs pat neizmantojÄm uzlabotas konfigurÄcijas, izmantojot Jenkins vai Ansible. Bet mums izdevÄs. VarbÅ«t tas ir principa sekas Pareto (pazÄ«stams arÄ« kÄ 80/20 noteikums).
ÄŖss DevOps un CI/CD Ä·Ädes apraksts
DevOps ir dažÄdas definÄ«cijas. DevOps, tÄpat kÄ Agile, ietver dažÄdas disciplÄ«nas. TaÄu lielÄkÄ daļa piekritÄ«s Å”Ädai definÄ«cijai: DevOps ir programmatÅ«ras izstrÄdes metode jeb dzÄ«ves cikls, kuras galvenais princips ir radÄ«t kultÅ«ru, kurÄ izstrÄdÄtÄji un citi darbinieki atrodas āvienÄ viļÅa garumÄā, roku darbs ir automatizÄts, katrs dara to, ko prot vislabÄk, palielinÄs piegÄžu biežums, palielinÄs darba produktivitÄte, palielinÄs elastÄ«ba.
Lai gan ar rÄ«kiem vien nepietiek, lai izveidotu DevOps vidi, tie ir neaizstÄjami. VissvarÄ«gÄkais no tiem ir nepÄrtraukta integrÄcija un nepÄrtraukta piegÄde (CI/CD). Katrai videi Ä·ÄdÄ ir dažÄdi posmi (piemÄram, DEV (izstrÄde), INT (integrÄcija), TST (testÄÅ”ana), QA (kvalitÄtes nodroÅ”inÄÅ”ana), UAT (lietotÄja pieÅemÅ”anas pÄrbaude), STG (sagatavoÅ”ana), PROD (lietoÅ”ana)) , manuÄlie uzdevumi ir automatizÄti, izstrÄdÄtÄji var izveidot kvalitatÄ«vu kodu, piegÄdÄt to un var viegli atjaunot.
Å ajÄ piezÄ«mÄ ir aprakstÄ«ts, kÄ izveidot DevOps Ä·Ädi piecÄs darbÄ«bÄs, kÄ parÄdÄ«ts attÄlÄ zemÄk, izmantojot atvÄrtÄ pirmkoda rÄ«kus.
SÄksim pie lietas.
1. darbība: CI/CD platforma
PirmkÄrt, jums ir nepiecieÅ”ams CI/CD rÄ«ks. Jenkins ir MIT licencÄts atvÄrtÄ pirmkoda CI/CD rÄ«ks, kas rakstÄ«ts Java, kas popularizÄja DevOps kustÄ«bu un ir kļuvis par de facto CICD standartu.
Kas ir Dženkinss? IedomÄjieties, ka jums ir maÄ£isks vadÄ«bas panelis dažÄdiem pakalpojumiem un rÄ«kiem. CI/CD rÄ«ks, piemÄram, Jenkins, pats par sevi ir bezjÄdzÄ«gs, taÄu ar dažÄdiem rÄ«kiem un pakalpojumiem tas kļūst visvarens.
Papildus Jenkins ir arÄ« daudzi citi atvÄrtÄ pirmkoda rÄ«ki, izvÄlieties jebkuru.
LÅ«k, kÄ izskatÄs DevOps process ar CI/CD rÄ«ku
VietnÄ localhost jums ir CI/CD rÄ«ks, taÄu vÄl nav daudz darÄmÄ. PÄriesim pie nÄkamÄs darbÄ«bas.
2. darbība. Versijas kontrole
LabÄkais (un neapÅ”aubÄmi vienkÄrÅ”Äkais) veids, kÄ pÄrbaudÄ«t CI/CD rÄ«ka burvÄ«bu, ir integrÄt to ar avotu kontroles pÄrvaldÄ«bas (SCM) rÄ«ku. KÄpÄc jums ir nepiecieÅ”ama versiju kontrole? PieÅemsim, ka jÅ«s iesniedzat pieteikumu. JÅ«s to rakstÄt Java, Python, C++, Go, Ruby, JavaScript vai jebkurÄ citÄ valodÄ, kas ir vagons un mazs ratiÅÅ”. Tas, ko jÅ«s rakstÄt, tiek saukts par avota kodu. SÄkumÄ, it Ä«paÅ”i, ja strÄdÄjat viens, varat visu saglabÄt vietÄjÄ direktorijÄ. TaÄu, projektam augot un pievienojoties arvien vairÄk cilvÄku, jums ir nepiecieÅ”ams veids, kÄ koplietot koda izmaiÅas, bet, apvienojot izmaiÅas, izvairÄ«ties no konfliktiem. Un jums ir arÄ« kaut kÄ jÄatjauno iepriekÅ”ÄjÄs versijas, neizmantojot dublÄjumus un izmantojot kopÄÅ”anas-ielÄ«mÄÅ”anas metodi koda failiem.
Un Å”eit bez SCM nekur. SCM glabÄ kodu krÄtuvÄs, pÄrvalda tÄ versijas un koordinÄ to starp izstrÄdÄtÄjiem.
Ir daudz SCM rÄ«ku, taÄu Git ir pelnÄ«ti kļuvis par de facto standartu. Iesaku to izmantot, bet ir arÄ« citas iespÄjas.
CI/CD rÄ«ks var automatizÄt pirmkoda augÅ”upielÄdi un lejupielÄdi, kÄ arÄ« komandas sadarbÄ«bu. Nav slikti? Bet tagad, kÄ izveidot funkcionÄjoÅ”u lietojumprogrammu no Ŕīs, ko mÄ«l miljardiem lietotÄju?
3. darbÄ«ba: izveidojiet automatizÄcijas rÄ«ku
Viss notiek kÄ nÄkas. Varat augÅ”upielÄdÄt kodu un veikt izmaiÅas avota kontrolÄ, kÄ arÄ« uzaicinÄt draugus sadarboties ar jums. Bet jums vÄl nav lietotnes. Lai Ŕī bÅ«tu tÄ«mekļa lietojumprogramma, tÄ ir jÄapkopo un jÄiepako izplatÄ«Å”anai vai jÄpalaiž kÄ izpildÄmÄ programma. (InterpretÄtÄ programmÄÅ”anas valoda, piemÄram, JavaScript vai PHP, nav jÄkompilÄ.)
Izmantojiet bÅ«vniecÄ«bas automatizÄcijas rÄ«ku. NeatkarÄ«gi no tÄ, kuru rÄ«ku izvÄlaties, tas apkopos kodu pareizajÄ formÄtÄ un automatizÄs tÄ«rÄ«Å”anu, apkopoÅ”anu, testÄÅ”anu un piegÄdi. VeidoÅ”anas rÄ«ki atŔķiras atkarÄ«bÄ no valodas, taÄu parasti tiek izmantotas tÄlÄk norÄdÄ«tÄs atvÄrtÄ pirmkoda opcijas.
Perfekti! Tagad ievietosim veidoÅ”anas automatizÄcijas rÄ«ka konfigurÄcijas failus avota vadÄ«klÄ, lai CI/CD rÄ«ks tos izveidotu.
Tas jÅ«tas labi. Bet kur to visu tagad izvÄrst?
4. darbība: tīmekļa lietojumprogrammu serveris
TÄtad jums ir iepakots fails, ko var izpildÄ«t vai izvilkt. Lai lietojumprogramma patieÅ”Äm bÅ«tu noderÄ«ga, tai ir jÄbÅ«t kaut kÄdam pakalpojumam vai interfeisam, taÄu jums tas viss ir kaut kur jÄievieto.
TÄ«mekļa lietojumprogrammu var mitinÄt tÄ«mekļa lietojumprogrammu serverÄ«. Lietojumprogrammu serveris nodroÅ”ina vidi, kurÄ varat izpildÄ«t pakotnes loÄ£iku, renderÄt saskarnes un atklÄt tÄ«mekļa pakalpojumus, izmantojot ligzdu. Lai instalÄtu lietojumprogrammu serveri, ir nepiecieÅ”ams HTTP serveris un dažas citas vides (piemÄram, virtuÄlÄ maŔīna). PagaidÄm izliksimies, ka ar to visu saskaraties (lai gan tÄlÄk es runÄÅ”u par konteineriem).
Ir vairÄki atvÄrti tÄ«mekļa lietojumprogrammu serveri.
Mums jau ir gandrÄ«z strÄdÄjoÅ”a DevOps Ä·Äde. Lielisks darbs!
PrincipÄ jÅ«s varat apstÄties Å”eit, pÄc tam varat ar to tikt galÄ pats, taÄu ir vÄrts runÄt par koda kvalitÄti.
5. darbÄ«ba: pÄrbaudiet pÄrklÄjumu
TestÄÅ”ana prasa daudz laika un pūļu, taÄu labÄk ir uzreiz atrast kļūdas un uzlabot kodu, lai iepriecinÄtu galalietotÄjus. Å im nolÅ«kam ir daudz atvÄrtu rÄ«ku, kas ne tikai pÄrbaudÄ«s kodu, bet arÄ« ieteiks, kÄ to uzlabot. LielÄko daļu CI/CD rÄ«ku var pievienot Å”iem rÄ«kiem un automatizÄt procesu.
TestÄÅ”ana ir sadalÄ«ta divÄs daļÄs: testÄÅ”anas ietvari testu rakstÄ«Å”anai un izpildei un rÄ«ki ar padomiem koda kvalitÄtes uzlaboÅ”anai.
TestÄÅ”anas ietvari
Instrumenti ar kvalitatīviem padomiem
LielÄkÄ daļa no Å”iem rÄ«kiem un ietvariem ir rakstÄ«ti Java, Python un JavaScript, jo C++ un C# ir patentÄti (lai gan GCC ir atvÄrtÄ koda).
MÄs esam izmantojuÅ”i testa pÄrklÄjuma rÄ«kus, un tagad DevOps konveijeram vajadzÄtu izskatÄ«ties kÄ attÄlÄ apmÄcÄ«bas sÄkumÄ.
Papildu darbības
Konteineri
KÄ jau teicu iepriekÅ”, lietojumprogrammu serveri var mitinÄt virtuÄlajÄ maŔīnÄ vai serverÄ«, bet konteineri ir populÄrÄki.
Kas ir konteineri? ÄŖsÄk sakot, virtuÄlajÄ maŔīnÄ operÄtÄjsistÄma bieži aizÅem vairÄk vietas nekÄ lietojumprogramma, un parasti pietiek ar konteineru ar dažÄm bibliotÄkÄm un konfigurÄciju. Dažos gadÄ«jumos virtuÄlÄs maŔīnas ir neaizstÄjamas, taÄu konteinerÄ var ievietot lietojumprogrammu kopÄ ar serveri bez papildu maksas.
Konteineriem parasti tiek Åemti Docker un Kubernetes, lai gan ir arÄ« citas iespÄjas.
Lasiet rakstus par Docker un Kubernetes vietnÄ opensource.com:
MÅ«su DevOps Ä·Äde ir vÄrsta uz kopÄ«gu lietojumprogrammu veidoÅ”anu un piegÄdi, taÄu ir arÄ« citas interesantas lietas, ko varat darÄ«t, izmantojot DevOps rÄ«kus. PiemÄram, izmantojiet Infrastructure as Code (IaC) rÄ«kus, kas pazÄ«stami arÄ« kÄ starpprogrammatÅ«ras automatizÄcijas rÄ«ki. Å ie rÄ«ki palÄ«dz automatizÄt starpprogrammatÅ«ras instalÄÅ”anu, pÄrvaldÄ«bu un citus uzdevumus. PiemÄram, automatizÄcijas rÄ«ks var uzÅemt lietojumprogrammas (tÄ«mekļa lietojumprogrammu serveris, datubÄze, uzraudzÄ«bas rÄ«ki) ar pareizo konfigurÄciju un nosÅ«tÄ«t tos lietojumprogrammu serverim.
Å eit ir dažas atvÄrtÄs starpprogrammatÅ«ras automatizÄcijas rÄ«ku iespÄjas:
TÄ ir tikai aisberga redzamÄ daļa. DevOps Ä·Äde var darÄ«t daudz vairÄk. SÄciet ar CI/CD rÄ«ku un uzziniet, ko vÄl varat automatizÄt, lai atvieglotu savu darbu. Neaizmirstiet par atvÄrtie saziÅas lÄ«dzekļi efektÄ«vai sadarbÄ«bai.
Å eit ir vÄl daži labi DevOps raksti iesÄcÄjiem: