Ja esat iesÄcÄjs DevOps, apskatiet Å”o piecu soļu rokasgrÄmatu sava pirmÄ konveijera izveidei.
DevOps ir kļuvis par standarta risinÄjumu lÄnu, nesadalÄ«tu vai bojÄtu programmatÅ«ras izstrÄdes procesu laboÅ”anai. ProblÄma ir tÄda, ka, ja esat iesÄcÄjs DevOps un nezinÄt, ar ko sÄkt, jums var trÅ«kt izpratnes par Ŕīm metodÄm. Å ajÄ rakstÄ tiks apspriesta DevOps konveijera definÄ«cija, kÄ arÄ« sniegti piecu darbÄ«bu norÄdÄ«jumi tÄ izveidei. Lai gan Ŕī apmÄcÄ«ba nav izsmeļoÅ”a, tai vajadzÄtu sniegt jums pamatu, lai sÄktu savu ceļojumu un paplaÅ”inÄtu zinÄÅ”anas nÄkotnÄ. Bet sÄksim ar vÄsturi.
Mans DevOps ceļojums
IepriekÅ” strÄdÄju Citi Group mÄkoÅu komandÄ, izstrÄdÄjot Infrastructure-as-a-Service (IaaS) tÄ«mekļa lietojumprogrammu Citi mÄkoÅdatoÅ”anas infrastruktÅ«ras pÄrvaldÄ«bai, taÄu mani vienmÄr interesÄja, kÄ padarÄ«t izstrÄdes procesu efektÄ«vÄku un ieviest pozitÄ«vas kultÅ«ras pÄrmaiÅas attÄ«stÄ«bas komanda. Es atradu atbildi grÄmatÄ, kuru ieteicis Citi mÄkoÅu arhitektÅ«ras un infrastruktÅ«ras CTO Gregs Lavenders. GrÄmata saucÄs FÄniksa projekts (FÄniksa projekts), un tajÄ ir izskaidroti DevOps principi, taÄu tas skan kÄ romÄns.
Tabula grÄmatas aizmugurÄ parÄda, cik bieži dažÄdi uzÅÄmumi izvieto savas sistÄmas izlaiÅ”anas vidÄ:
Amazon: 23 000 dienÄ
Google: 5 dienÄ
Netflix: 500 dienÄ
Facebook: reizi dienÄ
Twitter: 3 reizes nedÄļÄ
Tipisks uzÅÄmums: reizi 9 mÄneÅ”os
KÄ Amazon, Google un Netflix frekvences vispÄr ir iespÄjamas? Tas ir tÄpÄc, ka Å”ie uzÅÄmumi ir izdomÄjuÅ”i, kÄ izveidot gandrÄ«z ideÄlu DevOps cauruļvadu.
MÄs bijÄm tÄlu no tÄ, lÄ«dz ieviesÄm DevOps pakalpojumÄ Citi. Toreiz manai komandai bija dažÄdas vides, taÄu izvietoÅ”ana izstrÄdes serverÄ« bija pilnÄ«bÄ manuÄla. Visiem izstrÄdÄtÄjiem bija piekļuve tikai vienam izstrÄdes serverim, kura pamatÄ ir IBM WebSphere Application Server Community Edition. ProblÄma bija tÄda, ka serveris tika izslÄgts ikreiz, kad vairÄki lietotÄji mÄÄ£inÄja izvietot vienlaikus, tÄpÄc izstrÄdÄtÄjiem bija jÄpaziÅo par saviem nodomiem viens otram, kas bija diezgan sÄpÄ«gi. TurklÄt radÄs problÄmas ar zema lÄ«meÅa testa koda pÄrklÄjumu, apgrÅ«tinoÅ”iem manuÄlÄs izvietoÅ”anas procesiem un nespÄju izsekot koda izvietoÅ”anai, kas saistÄ«ts ar konkrÄtu uzdevumu vai lietotÄja stÄstu.
Sapratu, ka kaut kas jÄdara un atradu domubiedru. MÄs nolÄmÄm sadarboties sÄkotnÄjÄ DevOps konveijera izveidÄ ā viÅÅ” iestatÄ«ja Tomcat virtuÄlo maŔīnu un lietojumprogrammu serveri, kamÄr es strÄdÄju ar Jenkins, integrÄju Atlassian Jira un BitBucket un strÄdÄju pie testa koda pÄrklÄjuma. Å is blakus projekts bija ļoti veiksmÄ«gs: mÄs gandrÄ«z pilnÄ«bÄ automatizÄjÄm daudzus procesus, panÄcÄm gandrÄ«z 100% darbspÄjas laiku mÅ«su izstrÄdes serverÄ«, nodroÅ”inÄjÄm koda izsekoÅ”anu un uzlabotu testa pÄrklÄjumu, kÄ arÄ« pievienojÄm iespÄju saistÄ«t Git filiÄles ar Jira problÄmÄm vai izvietoÅ”anu. LielÄkÄ daļa rÄ«ku, ko izmantojÄm, lai izveidotu savu DevOps cauruļvadu, bija atvÄrtÄ pirmkoda.
Tagad es saprotu, cik vienkÄrÅ”s bija mÅ«su DevOps cauruļvads: mÄs neizmantojÄm tÄdus paplaÅ”inÄjumus kÄ Jenkins faili vai Ansible. TomÄr Å”is vienkÄrÅ”ais cauruļvads darbojÄs labi, iespÄjams, pateicoties Pareto principam (pazÄ«stams arÄ« kÄ 80/20 noteikums).
ÄŖss ievads par DevOps un CI/CD cauruļvadu
Ja vairÄkiem cilvÄkiem jautÄsiet: āKas ir DevOps?ā, iespÄjams, saÅemsit vairÄkas dažÄdas atbildes. DevOps, tÄpat kÄ Agile, ir attÄ«stÄ«jies, lai aptvertu daudzas dažÄdas disciplÄ«nas, taÄu lielÄkÄ daļa cilvÄku piekritÄ«s dažÄm lietÄm: DevOps ir programmatÅ«ras izstrÄdes prakse vai programmatÅ«ras izstrÄdes dzÄ«ves cikls (SDLC), kura galvenais princips maina kultÅ«ru, kurÄ izstrÄdÄtÄji un citi izstrÄdÄtÄji pastÄv vidÄ, kurÄ:
DarbÄ«bas, kas iepriekÅ” tika veiktas manuÄli, ir automatizÄtas;
Katrs dara to, ko prot vislabÄk;
IevieÅ”anu skaits noteiktÄ laika periodÄ palielinÄs; PalielinÄs caurlaidspÄja;
PaaugstinÄta attÄ«stÄ«bas elastÄ«ba.
Lai gan pareizi programmatÅ«ras rÄ«ki nav vienÄ«gais, kas jums nepiecieÅ”ams, lai izveidotu DevOps vidi, daži rÄ«ki ir bÅ«tiski. Galvenais rÄ«ks ir nepÄrtraukta integrÄcija un nepÄrtraukta izvietoÅ”ana (CI/CD). Å ajÄ konveijerÄ vidÄm ir dažÄdi posmi (piemÄram, DEV, INT, TST, QA, UAT, STG, PROD), daudzas darbÄ«bas ir automatizÄtas, un izstrÄdÄtÄji var rakstÄ«t augstas kvalitÄtes kodu, sasniegt izstrÄdes veiklÄ«bu un augstus izvietoÅ”anas rÄdÄ«tÄjus.
Å ajÄ rakstÄ ir aprakstÄ«ta piecpakÄpju pieeja DevOps konveijera izveidei, piemÄram, tÄlÄk redzamajÄ diagrammÄ parÄdÄ«tajam, izmantojot atvÄrtÄ pirmkoda rÄ«kus.
1. darbība: CI/CD metodes
PirmÄ lieta, kas jums nepiecieÅ”ama, ir CI/CD rÄ«ks. Jenkins, atklÄtÄ pirmkoda rÄ«ks, kura pamatÄ ir Java un licencÄts saskaÅÄ ar MIT licenci, ir rÄ«ks, kas popularizÄja DevOps un ir kļuvis par de facto standartu.
TÄtad, kas ir Dženkinss? Uztveriet to kÄ kaut kÄdu maÄ£isku universÄlu tÄlvadÄ«bas pulti, kas var sarunÄties un organizÄt dažÄdus pakalpojumus un rÄ«kus. CI/CD rÄ«ks, piemÄram, Jenkins, pats par sevi ir bezjÄdzÄ«gs, taÄu tas kļūst jaudÄ«gÄks, jo tiek izveidots savienojums ar dažÄdiem rÄ«kiem un pakalpojumiem.
Jenkins ir tikai viens no daudzajiem atvÄrtÄ pirmkoda CI/CD rÄ«kiem, ko varat izmantot, lai izveidotu savu DevOps konveijeru.
Dženkinss: Creative Commons un MIT
Travis CI: MIT
Kruīza kontrole: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Kabija: GNU
LÅ«k, kÄ izskatÄs DevOps procesi ar CI/CD rÄ«ku:
VietÄjÄ resursdatorÄ darbojas CI/CD rÄ«ks, taÄu paÅ”laik jÅ«s nevarat darÄ«t daudz. PÄriesim uz nÄkamo DevOps ceļojuma posmu.
LabÄkais (un, iespÄjams, vienkÄrÅ”Äkais) veids, kÄ pÄrbaudÄ«t, vai jÅ«su CI/CD rÄ«ks spÄj darboties, ir integrÄt to ar pirmkoda vadÄ«bas (SCM) rÄ«ku. KÄpÄc jums ir nepiecieÅ”ama avota kontrole? PieÅemsim, ka jÅ«s izstrÄdÄjat lietojumprogrammu. Ikreiz, kad veidojat lietojumprogrammu, jÅ«s programmÄjat, un nav nozÄ«mes tam, vai izmantojat Java, Python, C++, Go, Ruby, JavaScript vai kÄdu no miljoniem programmÄÅ”anas valodu. JÅ«su rakstÄ«to kodu sauc par pirmkodu. SÄkumÄ, it Ä«paÅ”i, ja strÄdÄjat vienatnÄ, iespÄjams, ir pareizi visu ievietot vietÄjÄ direktorijÄ. TaÄu, tÄ kÄ projekts kļūst plaÅ”Äks un jÅ«s uzaicinÄt citus cilvÄkus sadarboties, jums ir nepiecieÅ”ams veids, kÄ novÄrst konfliktus, vienlaikus efektÄ«vi kopÄ«gojot izmaiÅas. NepiecieÅ”ams arÄ« veids, kÄ atjaunot iepriekÅ”ÄjÄs versijas, jo dublÄjumkopiju veidoÅ”ana un kopÄÅ”ana/ielÄ«mÄÅ”ana tajÄs kļūst novecojusi. Jums (un jÅ«su komandas biedriem) vajag kaut ko labÄku.
Å eit pirmkoda kontrole kļūst gandrÄ«z par nepiecieÅ”amÄ«bu. Å is rÄ«ks saglabÄ jÅ«su kodu krÄtuvÄs, seko lÄ«dzi versijÄm un koordinÄ projekta dalÄ«bnieku darbu.
Lai gan ir daudz avotu kontroles rÄ«ku, Git ir standarts, un tas ir pareizi. Es ļoti iesaku izmantot Git, lai gan, ja vÄlaties, ir arÄ« citas atvÄrtÄ pirmkoda iespÄjas.
Git: GPLv2 un LGPL v2.1
Subversion: Apache 2.0
VienlaicÄ«gu versiju sistÄma (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+
Å Ädi izskatÄs DevOps cauruļvads, pievienojot pirmkoda vadÄ«klas.
CI/CD rÄ«ks var automatizÄt pÄrskatÄ«Å”anas, pirmkoda iegÅ«Å”anas un dalÄ«bnieku sadarbÄ«bas procesus. Nav slikti? Bet kÄ to pÄrvÄrst par strÄdÄjoÅ”u lietojumprogrammu, lai miljardiem cilvÄku to varÄtu izmantot un novÄrtÄt?
Lieliski! Varat pÄrskatÄ«t kodu un veikt izmaiÅas avota kontrolÄ, kÄ arÄ« uzaicinÄt draugus sadarboties izstrÄdÄ. Bet jÅ«s vÄl neesat izveidojis lietojumprogrammu. Lai izveidotu tÄ«mekļa lietojumprogrammu, tÄ ir jÄapkopo un jÄiepako izvietojamÄ pakeÅ”u formÄtÄ vai jÄpalaiž kÄ izpildÄms fails. (Å emiet vÄrÄ, ka tulkotÄ programmÄÅ”anas valoda, piemÄram, JavaScript vai PHP, nav jÄkompilÄ).
Izmantojiet bÅ«vniecÄ«bas automatizÄcijas rÄ«ku. NeatkarÄ«gi no tÄ, kuru izveides automatizÄcijas rÄ«ku jÅ«s nolemjat izmantot, tiem visiem ir viens un tas pats mÄrÄ·is: izveidot avota kodu vÄlamajÄ formÄtÄ un automatizÄt tÄ«rÄ«Å”anas, apkopoÅ”anas, testÄÅ”anas un izvietoÅ”anas konkrÄtÄ vidÄ uzdevumu. VeidoÅ”anas rÄ«ki atŔķirsies atkarÄ«bÄ no jÅ«su programmÄÅ”anas valodas, taÄu Å”eit ir dažas izplatÄ«tas atvÄrtÄ pirmkoda opcijas.
Nosaukums
Licence
ProgrammÄÅ”anas valoda
Maven
Apache 2.0
Java
Skudra
Apache 2.0
Java
Gradle
Apache 2.0
Java
Bazel
Apache 2.0
Java
Padarīt
GNU
N / A
rukŔķÄÅ”ana
MIT
JavaScript
Malks
MIT
JavaScript
Celtnieks
Apache
rubīns
GrÄbeklis
MIT
rubīns
AAP
GNU
Pitons
SCons
MIT
Pitons
BitBake
GPLv2
Pitons
kūka
MIT
C#
ASDF
Expat (MIT)
LISP
kliÄ·e
BSD
Haskell
Lieliski! VeidoÅ”anas automatizÄcijas rÄ«ka konfigurÄcijas failus varat ievietot savÄ avota vadÄ«bas sistÄmÄ un ļaut savam CI/CD rÄ«kam visu apvienot.
Viss ir kÄrtÄ«bÄ, vai ne? Bet kur izvietot savu lietojumprogrammu?
4. darbība: tīmekļa lietojumprogrammu serveris
PagaidÄm jums ir iepakots fails, kas var bÅ«t izpildÄms vai instalÄjams. Lai jebkura lietojumprogramma bÅ«tu patiesi noderÄ«ga, tai ir jÄnodroÅ”ina sava veida pakalpojums vai saskarne, taÄu jums ir nepiecieÅ”ams konteiners, lai mitinÄtu lietojumprogrammu.
TÄ«mekļa lietojumprogrammu serveris ir tikai Å”Äds konteiners. Serveris nodroÅ”ina vidi, kurÄ var definÄt izvietojamÄs pakotnes loÄ£iku. Serveris nodroÅ”ina arÄ« saskarni un piedÄvÄ tÄ«mekļa pakalpojumus, pakļaujot ligzdas ÄrÄjai pasaulei. Lai to instalÄtu, ir nepiecieÅ”ams HTTP serveris, kÄ arÄ« vide (piemÄram, virtuÄlÄ maŔīna). PagaidÄm pieÅemsim, ka par to uzzinÄsiet vairÄk (lai gan es par konteineriem runÄÅ”u tÄlÄk).
Ir vairÄki atvÄrtÄ pirmkoda tÄ«mekļa lietojumprogrammu serveri.
Nosaukums
Licence
ProgrammÄÅ”anas valoda
Runcis
Apache 2.0
Java
Mols
Apache 2.0
Java
WildFly
GNU MazÄkÄ publika
Java
StiklaZivis
CDDL un GNU mazÄk publiski
Java
Django
3 klauzula BSD
Pitons
viesuļvÄtra
Apache 2.0
Pitons
lielradzis
MIT
Pitons
Pitons
MIT
Pitons
Sliedes
MIT
rubīns
Node.js
MIT
Javascript
Jūsu DevOps cauruļvads ir gandrīz gatavs lietoŔanai. Labs darbs!
Lai gan varat apstÄties pie tÄ un veikt integrÄciju pats, koda kvalitÄte ir svarÄ«ga lieta, par kuru lietotÅu izstrÄdÄtÄjam jÄuztraucas.
5. darbÄ«ba: koda testÄÅ”anas pÄrklÄjums
PÄrbaužu ievieÅ”ana var bÅ«t vÄl viena apgrÅ«tinoÅ”a prasÄ«ba, taÄu izstrÄdÄtÄjiem ir savlaicÄ«gi jÄatrod visas lietojumprogrammas kļūdas un jÄuzlabo koda kvalitÄte, lai nodroÅ”inÄtu galalietotÄju apmierinÄtÄ«bu. Par laimi, ir daudz atvÄrtÄ pirmkoda rÄ«ku, lai pÄrbaudÄ«tu jÅ«su kodu un sniegtu ieteikumus tÄ kvalitÄtes uzlaboÅ”anai. VÄl labÄk ir tas, ka lielÄkÄ daļa CI/CD rÄ«ku var izveidot savienojumu ar Å”iem rÄ«kiem un automatizÄt procesu.
Kodu testÄÅ”ana sastÄv no divÄm daļÄm: koda testÄÅ”anas ietvariem, kas palÄ«dz rakstÄ«t un palaist testus, un ieteikumu rÄ«kiem, kas palÄ«dz uzlabot koda kvalitÄti.
Kodu testÄÅ”anas sistÄmas
Nosaukums
Licence
ProgrammÄÅ”anas valoda
JUnit
Eclipse Public License
Java
EasyMock
Apache
Java
mockito
MIT
Java
PowerMock
Apache 2.0
Java
Pytest
MIT
Pitons
HipotÄze
Mozilla
Pitons
tox
MIT
Pitons
Ieteikumu sistÄmas koda uzlaboÅ”anai
Nosaukums
Licence
ProgrammÄÅ”anas valoda
Cobertura
GNU
Java
CodeCover
Eclipse Public (EPL)
Java
Coverage.py
Apache 2.0
Pitons
Emma
KopÄjÄ publiskÄ licence
Java
JaCoCo
Eclipse Public License
Java
HipotÄze
Mozilla
Pitons
tox
MIT
Pitons
Jasmīns
MIT
JavaScript
Karma
MIT
JavaScript
Mocha
MIT
JavaScript
Jest
MIT
JavaScript
Å emiet vÄrÄ, ka lielÄkÄ daļa iepriekÅ” minÄto rÄ«ku un ietvaru ir rakstÄ«ti Java, Python un JavaScript, jo C++ un C# ir patentÄtas programmÄÅ”anas valodas (lai gan GCC ir atvÄrtÄ pirmkoda).
Tagad, kad esat ieviesis testa pÄrklÄjuma rÄ«kus, jÅ«su DevOps konveijeram vajadzÄtu izskatÄ«ties lÄ«dzÄ«gi diagrammai, kas parÄdÄ«ta Ŕīs apmÄcÄ«bas sÄkumÄ.
Papildu darbības
Konteineri
KÄ jau teicu, jÅ«s varat mitinÄt savu serveri virtuÄlajÄ maŔīnÄ vai serverÄ«, taÄu konteineri ir populÄrs risinÄjums.
Kas ir konteineri? ÄŖsais skaidrojums ir tÄds, ka virtuÄlajai maŔīnai ir nepiecieÅ”ams milzÄ«gs operÄtÄjsistÄmas atmiÅas apjoms, kas pÄrsniedz lietojumprogrammas lielumu, savukÄrt konteineram ir nepiecieÅ”amas tikai dažas bibliotÄkas un konfigurÄcijas, lai palaistu lietojumprogrammu. AcÄ«mredzot joprojÄm ir svarÄ«gas virtuÄlÄs maŔīnas izmantoÅ”anas iespÄjas, taÄu konteiners ir viegls risinÄjums lietojumprogrammas, tostarp lietojumprogrammu servera, mitinÄÅ”anai.
Lai gan ir arÄ« citas konteineru iespÄjas, vispopulÄrÄkÄs ir Docker un Kubernetes.
Docker: Apache 2.0
Kubernetes: Apache 2.0
VidÄja lÄ«meÅa automatizÄcijas rÄ«ki
MÅ«su DevOps konveijers galvenokÄrt ir vÄrsts uz lietojumprogrammu kopÄ«gu veidoÅ”anu un izvietoÅ”anu, taÄu ir arÄ« daudzas citas lietas, ko varat darÄ«t, izmantojot DevOps rÄ«kus. Viens no tiem ir Infrastructure as Code (IaC) rÄ«ku izmantoÅ”ana, kas ir zinÄmi 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. TÄ, piemÄram, automatizÄcijas rÄ«ks var iegÅ«t tÄdas lietojumprogrammas kÄ tÄ«mekļa lietojumprogrammu serveri, datu bÄzi un uzraudzÄ«bas rÄ«ku ar pareizÄm konfigurÄcijÄm un izvietot tos lietojumprogrammu serverÄ«.
Å eit ir daži atvÄrtÄ pirmkoda starpprogrammatÅ«ras automatizÄcijas rÄ«ki:
IespÄjama: GNU Public
SaltStack: Apache 2.0
PavÄrs: Apache 2.0
Lelle: Apache vai GPL
ApgÅ«stot maksas tieÅ”saistes kursus no SkillFactory, uzziniet, kÄ iegÅ«t pieprasÄ«tu profesiju no jauna vai iegÅ«t augstÄku lÄ«meni prasmju un atalgojuma ziÅÄ: