Rokasgrāmata iesācējiem: DevOps cauruļvada izveide

Ja esat iesācējs DevOps, apskatiet Å”o piecu soļu rokasgrāmatu sava pirmā konveijera izveidei.

Rokasgrāmata iesācējiem: DevOps cauruļvada izveide

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:

Rokasgrāmata iesācējiem: DevOps cauruļvada izveide

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.

2. darbÄ«ba. Pārvaldiet avotu kontroles sistēmas

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.

Rokasgrāmata iesācējiem: DevOps cauruļvada izveide

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?

3. darbÄ«ba: izveidojiet izveides automatizācijas rÄ«ku

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.

Rokasgrāmata iesācējiem: DevOps cauruļvada izveide

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!

Rokasgrāmata iesācējiem: DevOps cauruļvada izveide

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

Rokasgrāmata iesācējiem: DevOps cauruļvada izveide

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ņā:

vairāk kursu

Informācija

Avots: www.habr.com

Pievieno komentāru