Algajate juhend: loome DevOps-pipe

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

Algajate juhend: loome DevOps-pipe

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“ (The Phoenix Project), 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:

Algajate juhend: loome DevOps-pipe

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.

Algajate juhend: loome DevOps-pipe

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.

Algajate juhend: loome DevOps-pipe

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!

Algajate juhend: loome DevOps-pipe

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

Algajate juhend: loome DevOps-pipe

Uurige, kuidas saada nÔutud ametit nullist vÔi taset tÔsta oma oskustes ja palgas, osaledes SkillFactory tasulistes veebikursustes:

veel kursusi

Kasutulik

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster