Kui olete DevOpsi uus, vaadake seda juhendit oma esimese viie etapi toru loomiseks.

DevOps on muutunud standardlahenduseks, et parandada aeglaseid, killustatud vÔi mittetöötavaid tarkvaraarenduse protsesse. Probleemiks on see, et kui olete DevOpsis uus ega tea, kust alustada, siis vÔib teil puududa arusaam nendest metodoloogiatest. Selles artiklis rÀÀgitakse DevOpsi torustiku mÀÀratlemisest ning antakse juhend selle loomiseks viie sammu abil. Kuigi see Ôpik ei ole ammendav, peaks see andma teile aluse, et alustada oma teed ja laiendada oma teadmisi tulevikus. Kuid alustame ajaloost.
Minu teekond DevOpsi poole
Varem töötasin Citi Groupi pilvemeeskonnas, arendades Infrastructure-as-a-Service (IaaS) veebirakendust Citi pilvainfrastruktuuri haldamiseks, kuid mind on alati huvitanud, kuidas muuta arendusprotsessi tĂ”husamaks ning tuua positiivseid kultuurilisi muutusi arendajate meeskonda. Vastuse leidsin Greg Lavenderi, Citi pilvearhitektuuri ja infrastruktuuri tehnilise direktori, soovitatud raamatust. Raamat kandis pealkirja âPhoenixi Projektâ (), mis selgitab DevOpsi pĂ”himĂ”tteid, samas kui see loetakse nagu romaan.
Raamatukaane tagakĂŒljel olevas tabelis on nĂ€idatud, kui sageli erinevad ettevĂ”tted kasutusele vĂ”etakse oma sĂŒsteemid vabastamiskeskkonnas:
Amazon: 23 000 korda pÀevas
Google: 5 500 korda pÀevas
Netflix: 500 korda pÀevas
Facebook: 1 kord pÀevas
Twitter: 3 korda nÀdalas
TĂŒĂŒpiline ettevĂ”te: 1 kord 9 kuu jooksul
Kuidas on Amazon, Google ja Netflix niisuguste sagedustega ĂŒldse vĂ”imalikud? Selle kĂ”ik tĂ”ttu, et need ettevĂ”tted on vĂ€ljamĂ”elnud peaaegu ideaalse DevOpsi toru.
Me olime sellest kaugel, kuni me Citi-s DevOps-i juurutama hakkasime. Tol hetkel olid minu meeskonnas erinevad keskkonnad, kuid arendusse serverisse juurutamine oli tĂ€iesti kĂ€sitsi tehtud. KĂ”ik arendajad pÀÀsesid vaid ĂŒhele IBM WebSphere Application Server Community Edition pĂ”hinevale arendusserverile. Probleem oli selles, et server lĂ”petas töötamise iga kord, kui mitu kasutajat ĂŒritasid samaaegselt juurutada, mistĂ”ttu pidid arendajad ĂŒksteisele oma kavatsustest teadma andma, mis oli ĂŒsna vaevaline. Lisaks olid probleemid madala taseme koodi testimise katvusega, tĂŒkkide kĂ€sitsi juurutamise keerukusega ja puudus vĂ”imalus jĂ€lgida koodi juurutamist, mis on seotud konkreetse ĂŒlesande vĂ”i kasutajaloo kohta.
MĂ”istsin, et midagi tuleb ette vĂ”tta, ja leidsin endale mĂ”ttekaaslase. Otsustasime koostööd teha esialgse DevOps-i torujuhtme loomisel â tema seadistas virtuaalse masina ja Tomcat rakenduste serveri, samal ajal kui mina töötasin Jenkinsiga, integreerisin Atlassian Jira ja BitBucketit ning tegelesin koodi testimise kattega. See kĂŒlgprojekt oli vĂ€ga edukas: me automatiseerisime praktiliselt paljusid protsesse, saavutades peaaegu 100% meie arendusserveri töökindlusest, tagasime jĂ€lgimise ja parandasime koodi testimise katvust ning lisasime vĂ”imaluse siduda Git-i harud Jira ĂŒlesannete vĂ”i juurutamisega. Enamik tööriistu, mida kasutasime oma DevOps-i torujuhtme koostamiseks, olid avatud lĂ€htekoodiga.
NĂŒĂŒd mĂ”istan, kui lihtne oli meie DevOps-i torujuhe: me ei kasutanud laiendusi nagu Jenkins file vĂ”i Ansible. Kuid see lihtne torujuhe töötas hĂ€sti, vĂ”ib-olla tĂ€nu Pareto pĂ”himĂ”ttele (tuntud ka kui 80/20 reegel).
LĂŒhike sissejuhatus DevOpsi ja CI/CD torujuhtmesse
Kui kĂŒsida mitmelt inimeselt: "Mis on DevOps?", siis tĂ”enĂ€oliselt saadakse mitmeid erinevaid vastuseid. DevOps, nagu ka Agile, on arenenud mitmete erinevate distsipliinide katmiseks, kuid enamik inimesi on nĂ”us teatavate asjadega: DevOps on tarkvaraarenduse tava vĂ”i tarkvaraarenduse elutsĂŒkkel (SDLC), mille keskne pĂ”himĂ”te on kultuuri muutmine, kus arendajad ja mitte-arendajad eksisteerivad keskkonnas, kus:
Automatiseeritakse toimingud, mida varem tehti kÀsitsi;
IgaĂŒks teeb seda, mis talle kĂ”ige paremini vĂ€lja tuleb;
VÀljamaksete arv kindla aja jooksul suureneb; LÀbivÔime suureneb;
Arenduse paindlikkus suureneb.
Kuigi Ôigete tarkvaratööriistade olemasolu ei ole ainus asi, mida vajatakse DevOps keskkonna loomisel, on mÔned tööriistad hÀdavajalikud. Peamine tööriist on pidev integreerimine ja pidev juurutamine (CI/CD). Selle konveieril on keskkondadel erinevad etapid (nt DEV, INT, TST, QA, UAT, STG, PROD), paljusid toiminguid on automatiseeritud ja arendajad saavad kirjutada kvaliteetset koodi, saavutada arenduse paindlikkust ja suurendada juurutamiste sagedust.
Selles artiklis kÀsitletakse viieetapilist lÀhenemist DevOps konveieri loomisele, mis on sarnane jÀrgmisel joonisel kajastatule, kasutades avatud lÀhtekoodiga tööriistu.
1. etapp: CI/CD meetodid
Esimene asi, mida vajate â CI/CD tööriist. Jenkins, avatud lĂ€htekoodiga tööriist, mis pĂ”hineb Java-l ja levitatud MIT-litsentsi alusel, on see vahend, mis on populariseerinud DevOps suunda ja saanud de facto standardiks.
Mis siis on Jenkins? Peate seda vaatama kui mingit maagilist universaalset puldi, mis saab suhelda erinevate teenuste ja tööriistadega ning neid organiseerida. CI/CD tööriist nagu Jenkins iseenesest on kasututu, kuid see muutub vĂ”imsamaks, kui see on ĂŒhendatud erinevate tööriistade ja teenustega.
Jenkins on vaid ĂŒks paljusid avatud lĂ€htekoodiga tööriistu CI/CD jaoks, mida saate kasutada DevOps-piiplaani ehitamiseks.
Jenkins: Creative Commons ja MIT
Travis CI: MIT
CruiseControl: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU
NÀiteks kuidas nÀevad DevOps-protsessid vÀlja CI/CD tööriistaga:

Teil on CI/CD tööriist, mis töötab teie localhostis, kuid praegu ei saa te palju teha. Liigume jÀrgmisse etappi DevOpsi maailma.
Samm 2: Allika koodi haldamine
Parim (ja vĂ”ib-olla lihtsaim) viis kontrollida, kas teie CI/CD tööriist suudab teha imesid - integreeruda allika koodi haldustööriistaga (SCM). Miks vajate allika koodi haldust? Oletame, et arendate rakendust. Iga kord, kui loote rakenduse, kodeerite, ja pole tĂ€htis, kas kasutate Java, Python, C++, Go, Ruby, JavaScript vĂ”i mĂ”nda muud miljardit programmeerimiskeelt. Teie kirjutatud kood on allika kood. Alguses, eriti kui töötate ĂŒksi, on tĂ”enĂ€oliselt vĂ”imalik kĂ”ik paigutada kohalikku katalooge. Kuid kui projekt kasvab ja kutsute teisi koostööks, vajate viisi konfliktide vĂ€ltimiseks ja muudatuste tĂ”husaks vahetamiseks. Te vajate ka viisi varasema versiooni taastamiseks, sest varundamine ja kopeerimine/kleepimine on juba vananenud. Te vajate (ja teie meeskonnakaaslased) midagi paremat.
Siin muutub allika koodi haldustööriist praktiliselt vajalikuks. See tööriist hoiab teie koodi hoidlas, jÀlgib versioone ja koordineerib projekti osalejate tööd.
Kuigi on palju allika koodi haldustööriistu, on Git standard ja see peab paika. Soovitan tungivalt kasutada Git'i, kuigi soovi korral on ka teisi avatud lÀhtekoodiga alternatiive.
Git: GPLv2 ja LGPL v2.1
Subversion: Apache 2.0
Concurrent Versions System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+
Nii nÀeb DevOps'i torujuhe vÀlja koos allika koodi haldustööriistade lisamisega.

CI/CD tööriist suudab automatiseerida kontrollimise, allika koodi hankimise ja meeskonnakaaslaste koostöö protsesse. Pole paha? Aga kuidas muuta see töötavaks rakenduseks, mida miljardid inimesed saaksid kasutada ja hinnata?
Samm 3: Automatiseerimise tööriista loomine
SuurepĂ€rane! Saate kontrollida koodi ja teha muudatusi allika juhtimissĂŒsteemis ning kutsuda oma sĂ”pru koostöösse arendusse. Kuid te pole veel rakendust loonud. Veebirakenduse loomiseks tuleks see kompileerida ja pakkida kasutamiseks valmis paketivormingusse vĂ”i kĂ€ivitada tĂ€itmisfailina. (Pange tĂ€hele, et tĂ”lgendatud programmeerimiskeel, nĂ€iteks JavaScript vĂ”i PHP, ei vaja kompileerimist).
Kasutage koostamise automatiseerimise tööriista. SĂ”ltumata sellest, millisest koostamise automatiseerimise tööriistast otsustate kasutada, on nende peamine eesmĂ€rk ĂŒks ja sama: koguda allika kood soovitud vormingusse ning automatiseerida puhastamise, kompileerimise, testimise ja teatud keskkonda jagamise ĂŒlesanne. Koostamise tööriistad erinevad sĂ”ltuvalt teie programmeerimiskeelest, kuid siin on mĂ”ned ĂŒldised avatud lĂ€htekoodiga variandid.
Nimi
Litsents
Programmeerimiskeel
Maven
Apache 2.0
Java
Ant
Apache 2.0
Java
Gradle
Apache 2.0
Java
Bazel
Apache 2.0
Java
Make
Gnuâs Not Unix), mille eesmĂ€rgiks on arendada sĂŒsteemikomponente, et luua vabalt kasutatav Unix'i analoog, mis vĂ”imaldab tĂ€ielikult loobuda suletud tarkvarast. GNU juhtimisel on moodustatud vabade projektide kogukond, mis liiguvad ĂŒhise eesmĂ€rgi suunas ja arenevad ĂŒhtse ideoloogia ja filosoofia kohaselt. Alguses olid projekti keskseid elemente
N/A
Grunt
MIT
JavaScript
Gulp
MIT
JavaScript
Buildr
Apache
Ruby
Rake
MIT
Ruby
A-A-P
Gnuâs Not Unix), mille eesmĂ€rgiks on arendada sĂŒsteemikomponente, et luua vabalt kasutatav Unix'i analoog, mis vĂ”imaldab tĂ€ielikult loobuda suletud tarkvarast. GNU juhtimisel on moodustatud vabade projektide kogukond, mis liiguvad ĂŒhise eesmĂ€rgi suunas ja arenevad ĂŒhtse ideoloogia ja filosoofia kohaselt. Alguses olid projekti keskseid elemente
Python
SCons
MIT
Python
BitBake
GPLv2
Python
Kook
MIT
C#
ASDF
Expat (MIT)
LISP
Cabal
BSD
Haskell
SuurepÀrane! Saate paigutada automatiseerimise tööriista konfiguratsioonifailid allika juhtimisse ja lasta oma CI/CD tööriistal kÔik kokku panna.

KÔik on hÀsti, eks? Aga kuhu jagada oma rakendust?
Samm 4: Veebirakenduste server
Praegu on teil pakitud fail, mis vÔib olla nii tÀitmisfail kui ka installitav. Selleks, et rakendus oleks tÔeliselt kasulik, peab see pakkuma mingit teenust vÔi liidest, kuid teil on vaja konteinerit oma rakenduse hoidmiseks.
Veebirakenduste server on just selline konteiner. Server pakub keskkonda, kus saab mÀÀratleda jagatud paketi loogika. Samuti pakub server liidest ja pakub veebiteenuseid, avades pordid vÀlismaailmale. Teil on vaja HTTP-serverit ja ka mingit keskkonda (nt virtuaalmasinat) selle installimiseks. Ja samas, oletame, et saate sellest hiljem teada (kuigi rÀÀgin konteineritest allpool).
On mitmeid avatud lÀhtekoodiga veebirakenduste servereid.
Nimi
Litsents
Programmeerimiskeel
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
Teie DevOps torujuhe on peaaegu valmis kasutamiseks. HĂ€sti tehtud!

Kuigi sellel saab peatuda ja tegeleda integratsiooniga iseseisvalt, on koodikvaliteet rakenduste arendaja jaoks oluline asi ning sellega tuleb tegeleda.
Samm 5: Koodi testimise katmine
Testide rakendamine vĂ”ib olla veel ĂŒks mahukas nĂ”ue, kuid arendajad peavad rakenduses varakult kinni pĂŒĂŒdma kĂ”ik vead ning parandama koodi kvaliteeti, et tagada, et lĂ”ppkasutajad oleksid rahul. Ănneks on saadaval palju avatud lĂ€htekoodiga tööriistu teie koodi testimiseks ja selle kvaliteedi parandamise soovituste koostamiseks. Veelgi parem on see, et enamik CI/CD tööriistu saavad nendega ĂŒhenduda ja protsessi automatiseerida.
Koodi testimine koosneb kahest osast: kooditestimise raamistike, mis aitavad testide kirjutamisel ja kÀivitamisel, ja soovituste koostamise tööriistadest, mis aitavad parandada koodi kvaliteeti.
Koodi testimissĂŒsteemid
Nimi
Litsents
Programmeerimiskeel
JUnit
Eclipse'i avalik litsents
Java
EasyMock
Apache
Java
Mockito
MIT
Java
PowerMock
Apache 2.0
Java
Pytest
MIT
Python
Hypothesis
Mozilla
Python
Tox
MIT
Python
Koodi kvaliteedi parandamise soovitussĂŒsteemid
Nimi
Litsents
Programmeerimiskeel
Cobertura
Gnuâs Not Unix), mille eesmĂ€rgiks on arendada sĂŒsteemikomponente, et luua vabalt kasutatav Unix'i analoog, mis vĂ”imaldab tĂ€ielikult loobuda suletud tarkvarast. GNU juhtimisel on moodustatud vabade projektide kogukond, mis liiguvad ĂŒhise eesmĂ€rgi suunas ja arenevad ĂŒhtse ideoloogia ja filosoofia kohaselt. Alguses olid projekti keskseid elemente
Java
CodeCover
Eclipse'i avalik (EPL)
Java
Coverage.py
Apache 2.0
Python
Emma
Ăhine avalik litsents
Java
JaCoCo
Eclipse'i avalik litsents
Java
Hypothesis
Mozilla
Python
Tox
MIT
Python
Jasmine
MIT
JavaScript
Karma
MIT
JavaScript
Mocha
MIT
JavaScript
Jest
MIT
JavaScript
Pange tĂ€hele, et enamiku ĂŒlalmainitud tööriistade ja raamistike kirjutamise keel on Java, Python ja JavaScript, kuna C++ ja C# on patenteeritud programmeerimiskeeled (kuigi GCC-l on avatud lĂ€htekood).
NĂŒĂŒd, kui olete rakendanud koodi katmise tööriistad, peaks teie DevOps-i torujuhe vĂ€lja nĂ€gema nagu diagramm, mis on esitatud selle juhendi alguses.
TĂ€iendavad sammud
Konteinerid
Nagu ma juba ĂŒtlesin, vĂ”ite oma serveri paigutada virtuaalmasinale vĂ”i serverisse, kuid konteinerid on populaarne lahendus.
Mis on konteinerid? LĂŒhike seletus on see, et virtuaalmasin vajab operatsioonisĂŒsteemi jaoks tohutut mĂ€lu, mis ĂŒletab rakenduse suuruse, samas kui konteiner vajab ainult mĂ”ningaid teeke ja seadistusi rakenduse kĂ€itamiseks. Ilmselt on virtuaalmasinal endiselt olulised kasutusvaldkonnad, kuid konteiner on kerge lahendus rakenduse, sealhulgas rakenduste serveri, majutamiseks.
Kuigi on ka teisi konteinerite valikuid, on kÔige populaarsemad Docker ja Kubernetes.
Docker: Apache 2.0
Kubernetes: Apache 2.0
Vaheautomationi vahendid
Meie DevOps-i torujuhe on peamiselt suunatud rakenduste ĂŒhisloomisele ja juurutamisele, kuid DevOps-i tööriistade abil on vĂ”imalik teha ka palju muid asju. Ăks neist on infrastruktuuri koodi kaudu (IaC) tööriistade kasutamine, mida tuntakse ka vaheautomaatika vahenditena. Need tööriistad aitavad automatiseerida installatsiooni, haldamist ja muid ĂŒlesandeid vaheprogrammi jaoks. NĂ€iteks vĂ”ib automaatikatööriist ekstrakteerida rakendusi, nagu veebirakenduse server, andmebaas ja jĂ€lgimistööriist, koos Ă”ige konfiguratsiooniga ja juurutada need rakenduste serverisse.
Siin on mÔned avatud lÀhtekoodiga vaheautomaatika tööriistad:
Ansible: GNU Public
SaltStack: Apache 2.0
Chef: Apache 2.0
Puppet: Apache vÔi GPL

Uurige, kuidas saada nÔutud ametit nullist vÔi taset tÔsta oma oskustes ja palgas, osaledes SkillFactory tasulistes veebikursustes:
- (12 kuud)
veel kursusi
- (12 nÀdalat)
- (12 kuud)
- (9 kuud)
- (9 kuud)
Kasutulik
Allikas: habr.com
