Juhend algajatele: DevOpsi torujuhtme ehitamine

Kui olete DevOpsi uus kasutaja, vaadake seda juhendit oma esimese viieastmelise torujuhtme ehitamiseks.

Juhend algajatele: DevOpsi torujuhtme ehitamine

DevOpsist on saanud standardlahendus aeglaste, lahtiühendatud või katkiste tarkvaraarendusprotsesside parandamiseks. Probleem on selles, et kui olete DevOpsis uus ja ei tea, kust alustada, siis ei pruugi teil nendest tehnikatest aru saada. See artikkel keskendub DevOpsi torujuhtme määratlemisele ja pakub ka juhiseid selle viies etapis loomiseks. Kuigi see õpetus ei ole ammendav, peaks see andma teile aluse alustamiseks ja oma teadmiste laiendamiseks tulevikus. Aga alustame ajaloost.

Minu DevOpsi teekond

Varem töötasin Citi Groupi pilvemeeskonnas Infrastructure-as-a-Service (IaaS) veebirakenduse väljatöötamisega Citi pilvetaristu haldamiseks, kuid mind on alati huvitanud, kuidas muuta arendusprotsessi tõhusamaks ja tuua positiivseid kultuurimuutusi. arendusmeeskonnale. Leidsin vastuse raamatust, mida soovitas Citi pilvarhitektuuri ja -taristu tehnoloogiadirektor Greg Lavender. Raamatu nimi oli "Phoenixi projekt" (Phoenixi projekt) ja selgitab DevOpsi põhimõtteid lugedes nagu romaani.

Raamatu tagaküljel olev tabel näitab, kui sageli erinevad ettevõtted oma süsteeme väljalaskekeskkonnas juurutavad:

Amazon: 23 000 päevas
Google: 5 päevas
Netflix: 500 päevas
Facebook: kord päevas
Twitter: 3 korda nädalas
Tüüpiline ettevõte: kord 9 kuu jooksul

Kuidas on Amazoni, Google'i ja Netflixi sagedused üldse võimalikud? Seda seetõttu, et need ettevõtted leidsid, kuidas luua peaaegu täiuslik DevOpsi torujuhe.

Me olime sellest kaugel, kuni rakendasime Citi's DevOpsi. Sel ajal olid minu meeskonnal erinevad keskkonnad, kuid arendusserverisse juurutamine oli täiesti käsitsi. Kõigil arendajatel oli juurdepääs ainult ühele IBM WebSphere Application Server Community Editionil põhinevale arendusserverile. Probleem seisnes selles, et server lülitus välja iga kord, kui mitu kasutajat proovisid korraga juurutada, nii et arendajad pidid üksteisele oma kavatsustest teada andma, mis oli üsna valus. Lisaks esines probleeme madala tasemega kooditesti katvusega, tülikate käsitsi juurutamise protsessidega ja suutmatusega jälgida konkreetse ülesande või kasutajalooga seotud koodi juurutamist.

Sain aru, et midagi on vaja ette võtta ja leidsin endale mõttekaaslase. Otsustasime teha koostööd esialgse DevOpsi konveieri ehitamisel – ta seadistas Tomcati virtuaalmasina ja rakendusserveri, samal ajal kui mina töötasin Jenkinsiga, integreerisin Atlassian Jira ja BitBucketi ning töötasin kooditesti kattega. See kõrvalprojekt oli väga edukas: automatiseerisime peaaegu täielikult paljud protsessid, saavutasime oma arendusserveris peaaegu 100% tööaega, pakkusime jälgimist ja täiustasime kooditesti katvust ning lisasime võimaluse siduda Giti filiaale Jira või juurutamise probleemidega. Enamik tööriistu, mida kasutasime oma DevOpsi torujuhtme ehitamiseks, olid avatud lähtekoodiga.

Nüüd mõistan, kui lihtne oli meie DevOpsi konveier: me ei kasutanud laiendusi, nagu Jenkinsi failid või Ansible. See lihtne torujuhe töötas aga hästi, võib-olla tänu Pareto põhimõttele (tuntud ka kui 80/20 reegel).

DevOpsi ja CI/CD torustiku lühitutvustus

Kui küsite mõnelt inimeselt "Mis on DevOps?", saate tõenäoliselt mõned erinevad vastused. DevOps, nagu ka Agile, on arenenud nii, et see hõlmab paljusid erinevaid valdkondi, kuid enamik inimesi nõustub mõne asjaga: DevOps on tarkvaraarenduse tava või tarkvaraarenduse elutsükkel (SDLC), mille keskne põhimõte on muuta kultuuri, milles arendajad ja mitte. -arendajad eksisteerivad keskkonnas, kus:

Automatiseeritud toimingud, mida varem tehti käsitsi;
Igaüks teeb seda, mida ta kõige paremini oskab;
Rakenduste arv teatud aja jooksul suureneb; Suurenenud läbilaskevõime;
Suurenenud arengu paindlikkus.

Kuigi DevOpsi keskkonna loomiseks pole vaja ainult õigeid tarkvaratööriistu, on mõned tööriistad hädavajalikud. Peamine tööriist on pidev integreerimine ja pidev juurutamine (CI/CD). Selles konveieris on keskkondadel erinevad etapid (nt DEV, INT, TST, QA, UAT, STG, PROD), paljud toimingud on automatiseeritud ning arendajad saavad kirjutada kvaliteetset koodi, saavutada arenduse agility ja kõrge juurutussagedus.

Selles artiklis kirjeldatakse avatud lähtekoodiga tööriistu kasutades viieastmelist lähenemisviisi DevOpsi torujuhtme ehitamiseks, mis sarnaneb järgmisel diagrammil näidatud skeemile.

1. samm: CI/CD meetodid

Esimene asi, mida vajate, on CI/CD tööriist. Jenkins, Java-l põhinev avatud lähtekoodiga tööriist, mis on litsentsitud MIT-i litsentsi alusel, on tööriist, mis populariseeris DevOpsi ja sai de facto standardiks.

Mis on siis Jenkins? Mõelge sellest kui mingist maagilisest universaalsest kaugjuhtimispuldist, mis suudab rääkida ja korraldada erinevaid teenuseid ja tööriistu. Ainuüksi CI/CD tööriist nagu Jenkins on kasutu, kuid see muutub erinevate tööriistade ja teenustega ühenduse loomisel võimsamaks.

Jenkins on vaid üks paljudest avatud lähtekoodiga CI/CD tööriistadest, mida saate kasutada oma DevOpsi torustiku koostamiseks.

Jenkins: Creative Commons ja MIT
Travis CI: MIT
Püsikiiruse kontroll: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU

DevOpsi protsessid CI/CD tööriistaga näevad välja järgmised:

Juhend algajatele: DevOpsi torujuhtme ehitamine

Teie localhostis töötab CI/CD tööriist, kuid praegu ei saa te palju teha. Liigume edasi oma DevOpsi teekonna järgmise sammu juurde.

2. samm: lähtekoodi juhtimissüsteemide haldamine

Parim (ja võib-olla ka lihtsaim) viis testida, kas teie CI/CD tööriist suudab maagiat teha, on integreerida lähtekoodi juhtimise (SCM) tööriistaga. Miks vajate allika juhtimist? Oletame, et arendate rakendust. Rakenduse loomisel programmeerite, olenemata sellest, kas kasutate Java, Python, C++, Go, Ruby, JavaScripti või mõnda gaziljoni programmeerimiskeelt. Teie kirjutatud koodi nimetatakse lähtekoodiks. Alguses, eriti kui töötate üksi, on ilmselt hea panna kõik kohalikku kataloogi. Kuid kuna projekt muutub suuremaks ja kutsute teisi inimesi panustama, on teil vaja võimalust vältida konflikte ja muudatusi tõhusalt jagada. Vaja on ka võimalust eelmiste versioonide taastamiseks, sest varukoopiate loomine ja neisse kopeerimine/kleepimine on juba vananenud. Sina (ja su meeskonnakaaslased) vajad midagi paremat.

Siin muutub lähtekoodi juhtimine peaaegu hädavajalikuks. See tööriist hoiab teie koodi hoidlates, jälgib versioone ja koordineerib projektis osalejate tööd.

Kuigi seal on palju lähtekoodi juhtimistööriistu, on Git standard ja õigustatult. Soovitan tungivalt kasutada Giti, kuigi soovi korral on ka teisi avatud lähtekoodiga valikuid.

Git: GPLv2 ja LGPL v2.1
Subversioon: Apache 2.0
Samaaegsete versioonide süsteem (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

Selline näeb välja DevOpsi torujuhe, millele on lisatud lähtekoodi juhtelemendid.

Juhend algajatele: DevOpsi torujuhtme ehitamine

CI/CD tööriist võib automatiseerida kontrollimise, lähtekoodi hankimise ja liikmetevahelise koostöö protsesse. Pole paha? Kuidas aga muuta see toimivaks rakenduseks, et miljardid inimesed saaksid seda kasutada ja hinnata?

3. samm: looge ehitusautomaatika tööriist

Suurepärane! Saate kontrollida koodi ja teha muudatusi lähtekoodi juhtimissüsteemis, samuti kutsuda oma sõpru arendusse panustama. Kuid te pole veel rakendust loonud. Veebirakenduse tegemiseks tuleb see kompileerida ja pakendada juurutatavasse paketivormingusse või käivitada käivitatava failina. (Pange tähele, et tõlgendatud programmeerimiskeelt, nagu JavaScript või PHP, ei ole vaja kompileerida.)

Kasutage ehitamise automatiseerimise tööriista. Sõltumata sellest, millist ehituse automatiseerimistööriista otsustate kasutada, on neil kõigil sama eesmärk: luua lähtekood soovitud vormingusse ja automatiseerida puhastamise, kompileerimise, testimise ja konkreetsesse keskkonda juurutamise ülesanne. Koostamistööriistad sõltuvad teie programmeerimiskeelest, kuid siin on mõned levinud avatud lähtekoodiga valikud.

nimi
Litsents
Programmeerimiskeel

Maven
Apache 2.0
Java

Sipelgas
Apache 2.0
Java

Gradle
Apache 2.0
Java

Bazel
Apache 2.0
Java

Tegema
GNU
N / A

uriseja
MIT
JavaScript

Suutäis
MIT
JavaScript

Ehitaja
Apache
rubiin

Rake
MIT
rubiin

AAP
GNU
Python

Pojad
MIT
Python

bitbake
GPLv2
Python

Kook
MIT
C#

ASDF
Expat (MIT)
LISP

Täpselt
BSD
Haskell

Suurepärane! Saate panna automatiseerimistööriista konfiguratsioonifailid allika juhtimise alla ja lasta oma CI/CD tööriistal kõik kokku panna.

Juhend algajatele: DevOpsi torujuhtme ehitamine

Kõik on hästi, kas pole? Aga kuhu oma rakendus juurutada?

4. samm: veebirakenduste server

Siiani on teil pakitud fail, mis võib olla käivitatav või installitav. Selleks, et rakendus oleks tõeliselt kasulik, peab see pakkuma teatud tüüpi teenust või liidest, kuid teil on rakenduse hostimiseks vaja konteinerit.

Veebirakenduse server on just selline konteiner. Server pakub keskkonda, milles saab määratleda juurutatava paketi loogika. Server pakub ka liidest ja pakub veebiteenuseid, avades pistikupesad välismaailmale. Selle seadistamiseks vajate HTTP-serverit ja keskkonda (nt virtuaalmasinat). Oletame praegu, et saate selle kohta rohkem teada (kuigi ma käsitlen konteinereid allpool).

Avatud lähtekoodiga veebirakenduste servereid on mitu.

nimi
Litsents
Programmeerimiskeel

Kõuts
Apache 2.0
Java

sadamasild
Apache 2.0
Java

WildFly
GNU vähem avalik
Java

Klaaskala
CDDL ja GNU vähem avalikud
Java

Django
3-ClauseBSD
Python

Tornaado
Apache 2.0
Python

püsssarvik
MIT
Python

Python
MIT
Python

Rails
MIT
rubiin

Node.js
MIT
Javascript

Teie DevOpsi torujuhe on peaaegu kasutamiseks valmis. Tubli töö!

Juhend algajatele: DevOpsi torujuhtme ehitamine

Kuigi saate siin peatuda ja ise integreerida, on koodi kvaliteet oluline, mille pärast rakendusearendaja peab muretsema.

5. samm: koodi testimise katvus

Testide rakendamine võib olla veel üks tülikas nõue, kuid arendajad peavad varakult tuvastama rakenduses esinevad vead ja parandama koodi kvaliteeti, et tagada lõppkasutajate rahulolu. Õnneks on koodi testimiseks ja selle kvaliteedi parandamiseks soovituste andmiseks saadaval palju avatud lähtekoodiga tööriistu. Veelgi parem, enamik CI/CD tööriistu saab nende tööriistadega ühendada ja protsessi automatiseerida.

Koodi testimine koosneb kahest osast: koodi testimise raamistikud, mis aitavad teil teste kirjutada ja käivitada, ning soovitustööriistad, mis aitavad parandada koodi kvaliteeti.

Koodi testimise süsteemid

nimi
Litsents
Programmeerimiskeel

JUnit
Eclipse avaliku litsentsi
Java

Lihtne pilkamine
Apache
Java

mockito
MIT
Java

jõumokk
Apache 2.0
Java

Pytest
MIT
Python

Hüpotees
Mozilla
Python

Tox
MIT
Python

Koodi täiustamise soovitussüsteemid

nimi
Litsents
Programmeerimiskeel

Cobertura
GNU
Java

koodkaan
Eclipse Public (EPL)
Java

Coverage.py
Apache 2.0
Python

Emma
Ühine avalik litsents
Java

JaCoCo
Eclipse avaliku litsentsi
Java

Hüpotees
Mozilla
Python

Tox
MIT
Python

jasmiin
MIT
JavaScript

Karma
MIT
JavaScript

Mocha
MIT
JavaScript

on
MIT
JavaScript

Pange tähele, et enamik ülalmainitud tööriistu ja raamistikke on kirjutatud Java, Pythoni ja JavaScripti jaoks, kuna C++ ja C# on patenteeritud programmeerimiskeeled (kuigi GCC on avatud lähtekoodiga).

Nüüd, kui olete koodi katvustööriistad juurutanud, peaks teie DevOpsi torujuhe välja nägema sarnane selle õpetuse alguses näidatud diagrammiga.

Täiendavad sammud

Konteinerid

Nagu ma varem ütlesin, saate oma serverit hostida virtuaalses masinas või serveris, kuid konteinerid on populaarne lahendus.

Mis on konteinerid? Lühike selgitus on see, et virtuaalne masin vajab tohutul hulgal operatsioonisüsteemi mälu, rohkem kui rakenduse suurus, samas kui konteiner vajab rakenduse käitamiseks vaid mõnda teeki ja konfiguratsiooni. Ilmselgelt on virtuaalmasina jaoks endiselt olulisi kasutusviise, kuid konteiner on kerge lahendus rakenduse, sealhulgas rakendusserveri majutamiseks.

Kuigi on olemas ka muud konteinerivalikud, on Docker ja Kubernetes kõige populaarsemad.

Docker: Apache 2.0
Kubernetes: Apache 2.0

Kesktaseme automatiseerimistööriistad

Meie DevOpsi konveier on peamiselt keskendunud rakenduste koosloomisele ja juurutamisele, kuid DevOpsi tööriistadega saate teha ka palju muid asju. Üks neist on Infrastructure as Code (IaC) tööriistade kasutamine, mida tuntakse ka vahevara automatiseerimise tööriistadena. Need tööriistad aitavad automatiseerida vahevara installimist, haldamist ja muid ülesandeid. Näiteks võib automatiseerimistööriist eraldada õigete konfiguratsioonidega selliseid rakendusi nagu veebirakenduse server, andmebaas ja seiretööriist ning juurutada need rakendusserverisse.

Siin on mõned avatud lähtekoodiga vahevara automatiseerimise tööriistad:

Võimalik: GNU Public
SaltStack: Apache 2.0
Kokk: Apache 2.0
Nukk: Apache või GPL

Juhend algajatele: DevOpsi torujuhtme ehitamine

Uurige SkillFactory tasuliste veebikursuste läbimise üksikasju selle kohta, kuidas saada ihaldatud elukutse nullist või Level Up oskuste ja palga osas:

rohkem kursusi

Kasulik

Allikas: www.habr.com

Lisa kommentaar