Sācēju rokasgrāmata: veidojot DevOps cauruļvadu

Ja esat jauns DevOps jomā, apskatiet šo rokasgrāmatu, kas palīdzēs izveidot jūsu pirmo piecu posmu cauruli.

Sācēju rokasgrāmata: veidojot DevOps cauruļvadu

DevOps ir kļuvis par standarta risinājumu, lai labotu lēnus, izkliedētus vai neefektīvus programmatūras izstrādes procesus. Problēma ir tāda, ka, ja esat jauns DevOps jomā un nezināt, no kurienes sākt, jums var trūkt izpratnes par šiem paņēmieniem. Šajā rakstā tiks apspriesta DevOps caurules definīcija un sniegta rokasgrāmata tās izveidošanai piecos soļos. Lai gan šis mācību līdzeklis nav izsmeļošs, tam vajadzētu dot jums pamatu, lai uzsāktu savu ceļu un paplašinātu savas zināšanas nākotnē. Sāksim ar vēsturi.

Mana DevOps ceļojums

Agrāk es strādāju Citi Group mākonī, izstrādājot Infrastructure-as-a-Service (IaaS) tīmekļa lietotni Citi mākonis infrastruktūras pārvaldīšanai, taču man vienmēr bija interese par to, kā padarīt attīstības procesu efektīvāku un ieviest pozitīvas kultūras izmaiņas izstrādātāju komandā. Atbildi es atradu grāmatā, kas tika ieteikta Gregam Lavenderam, Citi mākonī arhitektūras un infrastruktūras tehniskajam direktoram. Grāmata saucās „Feniksa projekts“ (The Phoenix Project), un tajā skaidro DevOps principus, un tā tiek lasīta kā romāns.

Grāmatas aizmugurē redzamajā tabulā ir parādīts, cik bieži dažādas kompānijas izvērš savus sistēmas izlaidumu vidē:

Amazon: 23 000 dienā
Google: 5 500 dienā
Netflix: 500 dienā
Facebook: reizi dienā
Twitter: 3 reizes nedēļā
Tipiska kompānija: reizi 9 mēnešos

Kā vispār ir iespējamas tādas frekvences kā Amazon, Google un Netflix? Viss ir tādēļ, ka šīs kompānijas ir izdomājušas, kā izveidot gandrīz ideālu DevOps cauruli.

Mēs bijām tālu no tā, līdz ieviešam DevOps Citi. Tajā laikā manā komandā bija dažādas vides, bet izsniegšana izstrādes serverī bija pilnīgi manuāla. Visi izstrādātāji piekļuva tikai vienam izstrādes serverim, kas balstīts uz IBM WebSphere Application Server Community Edition. Problēma bija tāda, ka serveris izslēdzās, kad vairāki lietotāji vienlaikus mēģināja veikt izsniegšanu, tāpēc izstrādātājiem bija jāziņo viens otram par saviem nodomiem, kas bija diezgan sāpīgi. Turklāt pastāvēja problēmas ar zemu līmeņa koda testēšanas segumu, apjomīgajiem manuālās izsniegšanas procesiem un iespēju izsekot koda izsniegšanai, kas saistīta ar konkrētu uzdevumu vai lietotāja stāstu.

Es sapratu, ka jāveic kaut kas, un atradu kolēģi- līdzīgi domājošu partneri. Mēs nolēmām sadarboties, lai izveidotu pirmo DevOps konveijeru – viņš uzstādīja virtuālo mašīnu un Tomcat lietojumserveri, kamēr es strādāju pie Jenkins, integrēju Atlassian Jira un BitBucket, kā arī strādāju pie koda testēšanas seguma. Šis sānu projekts bija ļoti veiksmīgs: mēs gandrīz pilnībā automatizējām daudzas darbības, panācām gandrīz 100% mūsu izstrādes servera darbību, nodrošinājām izsekojamību un uzlabojām koda testēšanas segumu, kā arī pievienojām iespēju saistīt zarus Git ar uzdevumiem Jira vai izsniegšanu. Lielākā daļa rīku, ko mēs izmantojām, veidojot mūsu DevOps konveijeru, bija atvērta koda.

Tagad es saprotu, cik vienkāršs bija mūsu DevOps konveijers: mēs neizmantojām paplašinājumus, piemēram, Jenkins failus vai Ansible. Tomēr šis vienkāršais konveijers darbojās labi, iespējams, pateicoties Pareto principam (pazīstams arī kā 80/20 likums).

Īss ievads DevOps un CI/CD konveijerā

Ja, ja jautājat vairākiem cilvēkiem: „Kas ir DevOps?”, tad, visticamāk, jūs saņemsiet vairākas dažādas atbildes. DevOps, tāpat kā Agile, ir attīstījies, lai aptvertu daudz dažādu disciplīnu, bet lielākā daļa cilvēku piekritīs dažām lietām: DevOps ir programmatūras izstrādes prakse vai programmatūras izstrādes cikls (SDLC), kura centrālais princips ir kultūras maiņa, kurā izstrādātāji un neizstrādātāji pastāv vidē, kas:

Automatizē operācijas, kuras iepriekš veica manuāli;
Katrs dara to, kas viņam vislabāk padodas;
Ieviešanas skaits noteiktā laika periodā palielinās; caurlaidspēja palielinās;
Palielinās izstrādes elastība.

Lai arī pareizo programmatūras rīku esamība ir ne tikai tas, kas nepieciešams, lai izveidotu DevOps vidi, daži rīki ir nepieciešami. Galvenais rīks ir nepārtraukta integrācija un nepārtraukta izvietošana (CI/CD). Šajā konveijerī vidēm ir dažādas fāzes (piemēram, DEV, INT, TST, QA, UAT, STG, PROD), daudzas operācijas ir automatizētas, un izstrādātāji var rakstīt kvalitatīvu kodu, panākt izstrādes elastību un biežāku izvietošanu.

Šajā rakstā tiek aprakstīts piecu posmu pieejas izveidošanai DevOps konveijeram, kā parādīts nākamajā diagrammā, izmantojot atvērtā koda rīkus.

Posms 1: CI/CD metodes

Vispirms jums nepieciešams rīks CI/CD. Jenkins, atvērtā koda rīks, kas balstīts uz Java un tiek izplatīts saskaņā ar MIT licenci, ir tas instruments, kas popularizēja DevOps pieeju un kļuvis par de facto standartu.

Tātad, kas ir Jenkins? Uzskatiet to par kādu maģisku universālu tālvadības pulti, kas var runāt ar dažādām pakalpojumu un rīku sistēmām un organizēt tās. CI/CD rīks, piemēram, Jenkins, pats par sevi ir bezjēdzīgs, taču tas kļūst jaudīgāks, kad tas pievienojas dažādiem rīkiem un pakalpojumiem.

Jenkins ir tikai viens no daudziem atvērtā koda CI/CD rīkiem, ko varat izmantot, lai izveidotu DevOps cauruļu.

Jenkins: Creative Commons un MIT
Travis CI: MIT
CruiseControl: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU

Tā izskatās DevOps procesi ar CI/CD rīku:

Sācēju rokasgrāmata: veidojot DevOps cauruļvadu

Jums ir CI/CD rīks, kas darbojas jūsu lokālajā tīklā, bet patlaban jūs varat darīt maz. Pāriesim pie nākamā soļa ceļojumā DevOps pasaulē.

2. solis: Koda versiju kontroles pārvaldība

Labākais (un, iespējams, visvienkāršākais) veids, kā pārbaudīt, vai jūsu CI/CD rīks spēj radīt maģiju – integrēties ar versiju kontroles rīku (SCM). Kāpēc jums nepieciešams kodu kontrole? Pieņemsim, ka izstrādājat lietotni. Kad jūs izstrādājat lietotni, jūs kodējat, un nav nozīmes, vai jūs izmantojat Java, Python, C++, Go, Ruby, JavaScript vai kādu no daudziem citiem programmēšanas valodām. Kods, ko jūs rakstāt, tiek saukts par avota kodu. Iesākumā, it īpaši, kad strādājat viens, iespējams, to varat ievietot visus lokālā direktorijā. Bet, kad projekts kļūst lielāks un jūs uzaicināt citus uz sadarbību, jums nepieciešams veids, kā novērst konfliktus efektīvas modifikāciju apmaiņas laikā. Jums arī nepieciešams veids, kā atjaunot iepriekšējās versijas, jo dublēšana un kopēšana/ielīmēšana jau ir novecojusi. Jums (un jūsu komandai) nepieciešams kaut kas labāks.

Tieši šeit koda versiju kontroles rīks kļūst praktiski neaizstājamība. Šis rīks saglabā jūsu kodu repozitorijos, uzskaita versijas un koordinē projekta dalībnieku darbu.

Lai gan pastāv daudzi koda versiju kontroles rīki, Git ir standarts, un tas ir taisnīgi. Es ļoti ieteiktu izmantot Git, lai gan, ja vēlaties, ir arī citi atvērtā koda varianti.

Git: GPLv2 un LGPL v2.1
Subversion: Apache 2.0
Concurrent Versions System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

Tā izskatās DevOps cauruļvads, pievienojot versiju kontroles rīkus.

Sācēju rokasgrāmata: veidojot DevOps cauruļvadu

CI/CD rīks var automatizēt pārbaudes, avota koda iegūšanas un sadarbības procesus starp dalībniekiem. Labi? Bet kā padarīt to par strādājošu lietotni, lai miljardiem cilvēku to varētu izmantot un novērtēt?

3. solis: Automatizācijas rīka izveide

Lieliski! Jūs varat pārbaudīt kodu un veikt izmaiņas versiju kontrolē, kā arī ielūgt savus draugus sadarboties izstrādē. Taču jūs vēl neesat izveidojis lietotni. Lai izveidotu tīmekļa lietotni, to jākompilē un jāpako izplatāmā pakotņu formātā vai jāpalaiž kā izpildāmu failu. (Lūdzu, ņemiet vērā, ka interpretējamai programmēšanas valodai, piemēram, JavaScript vai PHP, nav nepieciešama kompilācija).

Izmantojiet būvniecības automātizācijas rīku. Neatkarīgi no tā, kuru būvniecības automātizācijas rīku jūs izvēlēsities, visi tie tiecas uz vienu un to pašu mērķi: savākt avota kodu kādā vēlamajā formātā un automatizēt uzdevumus, piemēram, tīrīšanu, kompilēšanu, testēšanu un izvietošanu konkrētā vidē. Būvniecības rīki atšķirsies atkarībā no jūsu programmēšanas valodas, bet šeit ir daži vispārīgi atvērtā koda varianti.

Nosaukums
Licence
Programmēšanas valoda

Maven
Apache 2.0
Java

BIND
Apache 2.0
Java

Gradle
Apache 2.0
Java

Bazel
Apache 2.0
Java

Make
GNU
N/A

Grunt
MIT
JavaScript

Gulp
MIT
JavaScript

Buildr
Apache
Ruby

Rake
MIT
Ruby

A-A-P
GNU
Python

SCons
MIT
Python

BitBake
GPLv2
Python

Cake
MIT
C#

ASDF
Expat (MIT)
LISP

Cabal
BSD
Haskell

Forši! Jūs varat ievietot automātizācijas rīka konfigurācijas failus avota kontroles sistēmā un ļaut jūsu CI/CD rīkam savienot visu kopā.

Sācēju rokasgrāmata: veidojot DevOps cauruļvadu

Viss ir labi, vai ne? Bet kur izvietot jūsu lietotni?

4. solis: Tīmekļa lietotņu serveris

Pagājušajā laikā jums ir iepakots fails, kas var būt gan izpildāms, gan instalējams. Lai jebkura lietotne būtu patiešām noderīga, tai jāsniedz kāda pakalpojuma vai interfeisa funkcionalitāte, bet jums ir nepieciešams konteinera, kur ievietot jūsu lietotni.

Tīmekļa lietotņu serveris ir tieši tāds konteiners. Serveris nodrošina vidi, kurā var definēt izvietojamā pakotņa loģiku. Arī serveris nodrošina interfeisu un piedāvā tīmekļa pakalpojumus, atverot pieslēgumus ārējai pasaulei. Jums nepieciešams HTTP serveris, kā arī kāda vide (piemēram, virtuālā mašīna) tā instalēšanai. Bet pagaidām pieņemiet, ka jūs par to uzzināsiet tālāk (lai gan es zemāk runāšu par konteineriem).

Pastāv vairāki atvērtā koda tīmekļa lietotņu serveri.

Nosaukums
Licence
Programmēšanas valoda

Tomcat
Apache 2.0
Java

Jetty
Apache 2.0
Java

WildFly
GNU Lesser Public
Java

GlassFish
CDDL & GNU Less Public
Java

Django
3-Clause BSD
Python

Tornado
Apache 2.0
Python

Gunicorn
MIT
Python

Python
MIT
Python

Rails
MIT
Ruby

Node.js
MIT
Javascript

Jūsu DevOps cauruļvads drīz būs gatavs lietošanai. Lielisks darbs!

Sācēju rokasgrāmata: veidojot DevOps cauruļvadu

Lai gan šeit varētu apstāties un veikt integrāciju patstāvīgi, koda kvalitāte ir svarīgs faktors lietojumprogrammu izstrādātājiem, un par to ir jārūpējas.

5. solis: Koda testēšanas segums

Testu īstenošana var būt vēl viens apgrūtinājums, taču izstrādātājiem ir jāatklāj jebkādas kļūdas lietojumprogrammā jau agri un jāuzlabo koda kvalitāte, lai garantētu, ka gala lietotāji būs apmierināti. Par laimi, pastāv daudz atvērtā koda rīku, lai testētu savu kodu un izveidotu ieteikumus tā kvalitātes uzlabošanai. Vēl labāk, ka vairums CI/CD rīku var pievienoties šiem rīkiem un automatizēt procesu.

Koda testēšana sastāv no divām daļām: koda testēšanas ietvariem, kas palīdz rakstīt un palaist testus, un ieteikumu veidošanas rīkiem, kas palīdz uzlabot koda kvalitāti.

Koda 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
Python

Hypothesis
Mozilla
Python

Tox
MIT
Python

Ieteikumu sistēmas koda uzlabošanai

Nosaukums
Licence
Programmēšanas valoda

Cobertura
GNU
Java

CodeCover
Eclipse Public (EPL)
Java

Coverage.py
Apache 2.0
Python

Emma
Common Public License
Java

JaCoCo
Eclipse Public License
Java

Hypothesis
Mozilla
Python

Tox
MIT
Python

Jasmine
MIT
JavaScript

Karma
MIT
JavaScript

Mocha
MIT
JavaScript

Jest
MIT
JavaScript

Pievērsiet uzmanību, ka lielākā daļa iepriekš minēto rīku un ietvaru ir uzrakstīti Java, Python un JavaScript valodā, jo C++ un C# ir proprietāras programmēšanas valodas (lai gan GCC ir atvērtā koda).

Tagad, kad esat īstenojis koda pārklājuma rīkus, jūsu DevOps plūsmai būtu jāizskatās kā diagrammai, kas parādīta šī ceļveža sākumā.

Papildu soļi

Tvertnes

Kā jau teicu, jūs varat izvietot savu serveri virtuālā mašīnā vai serverī, bet konteineri ir populāra lieta.

Kas ir konteineri? Īss paskaidrojums ir tāds, ka virtuālajai mašīnai ir nepieciešams ievērojams operētājsistēmas atmiņas apjoms, kas pārsniedz lietojumprogrammas izmēru, savukārt konteineram nepieciešamas tikai dažas bibliotēkas un konfigurācijas, lai palaistu lietojumprogrammu. Acīmredzot virtuālajai mašīnai joprojām ir svarīgas pielietošanas jomas, taču konteiners ir viegla lietošanas risinājums, tostarp lietojumprogrammu serveriem.

Lai gan pastāv arī citi konteineru varianti, vispopulārākie ir Docker un Kubernetes.

Docker: Apache 2.0
Kubernetes: Apache 2.0

Starpprogrammatūras automatizācijas rīki

Mūsu DevOps cauruļvads galvenokārt ir vērsts uz kopīgu lietojumprogrammu izstrādi un izvietošanu, taču ar DevOps rīkiem ir iespējams paveikt daudz citas lietas. Viens no veidiem ir infrastruktūras kā koda (IaC) rīku izmantošana, kas ir pazīstami arī kā starpprogrammatūras automatizācijas rīki. Šie rīki palīdz automatizēt instalāciju, pārvaldību un citas uzdevumu veikšanas funkcijas starpprogrammatūrai. Piemēram, automatizācijas rīks var iegūt lietojumprogrammas, piemēram, tīmekļa lietojumprogrammu serverus, datu bāzes un uzraudzības rīkus, ar pareizajām konfigurācijām un izvietot tās lietojumprogrammu serverī.

Šeit ir daži atvērtā koda starpprogrammatūras automatizācijas rīki:

Ansible: GNU Public
SaltStack: Apache 2.0
Chef: Apache 2.0
Puppet: Apache vai GPL

Sācēju rokasgrāmata: veidojot DevOps cauruļvadu

Uzziniet detalizēti, kā iegūt pieprasītu profesiju no nulles vai uzlabot savas prasmes un algas, apgūstot maksas tiešsaistes kursus SkillFactory:

vēl kursi

Noderīgas

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster