Руководство для начинающих: как создать DevOps-конвейер.

Če ste novinec v DevOps-u, si oglejte ta priročnik za ustvarjanje svojega prvega kontejnerja v petih korakih.

Руководство для начинающих: как создать DevOps-конвейер.

DevOps je postala standardna rešitev za reševanje počasnih, razdrobljenih ali nefunkcionalnih procesov razvoja programske opreme. Težava je v tem, da če ste novinec v DevOps-u in ne veste, kje začeti, vam morda primanjkuje razumevanja teh metod. V tem članku bomo opredelili DevOps kontejner ter ponudili navodila za njegovo ustvarjanje v petih korakih. Čeprav to priročno besedilo ni izčrpno, vam mora zagotoviti osnovo za začetek vaše poti in širitev znanja v prihodnje. Naj začnemo s zgodovino.

Moja pot v DevOps

Prej sem delal v oblačni ekipi Citi Group, kjer sem razvijal spletno aplikacijo Infrastructure-as-a-Service (IaaS) za upravljanje oblačne infrastrukture Citi, a me je vedno zanimalo, kako bi proces razvoja lahko postal bolj učinkovit in prinesel pozitivne kulturne spremembe v ekipo razvijalcev. Odgovor sem našel v knjigi, ki jo je priporočil Greg Lavender, tehnični direktor Citi za oblačno arhitekturo in infrastrukturo. Knjiga se je imenovala 'Projekt Feniks' (The Phoenix Project), in razloži načela DevOps-a, berljiva pa je kot roman.

V tabeli na zadnji strani knjige je prikazano, kako pogosto različna podjetja izvajajo svoje sisteme v okolju za izdajo različic:

Amazon: 23.000 na dan
Google: 5.500 na dan
Netflix: 500 na dan
Facebook: Enkrat na dan
Twitter: 3-krat na teden
Tipično podjetje: Enkrat na 9 mesecev

Kako je sploh mogoče, da Amazon, Google in Netflix dosegajo take hitrosti? Vse zato, ker so ta podjetja našla načine, kako ustvariti skoraj popoln DevOps kontejner.

Nismo bili daleko od toga sve dok nismo implementirali DevOps u Citi. U to vreme, moj tim je imao različita okruženja, ali je implementacija na serverskom razvojnom okruženju bila potpuno ručna. Svi programeri su imali pristup samo jednom razvojnog serveru zasnovanom na IBM WebSphere Application Server Community Edition. Problem je bio u tome što se server isključivao svaki put kada su više korisnika istovremeno pokušavalo da izvrši implementaciju, pa su programeri morali da obaveštavaju jedni druge o svojim namerama, što je bilo prilično bolno. Osim toga, postojali su problemi sa niskim nivoom pokrivenosti koda testovima, komplikovanim ručnim procesima implementacije i nedostatkom mogućnosti praćenja implementacije koda povezanog sa određenim zadatkom ili korisničkom pričom.

Shvatio sam da nešto treba da se učini i pronašao sam kolegu s istim mišljenjima. Dogovorili smo se da zajedno radimo na izradi prvog DevOps kanala – on je postavio virtuelnu mašinu i Tomcat server aplikacija, dok sam ja radio na Jenkinsu, integrišući Atlassian Jira i BitBucket, kao i radom na pokrivenosti koda testovima. Ovaj sporedni projekat bio je veoma uspešan: gotovo smo potpuno automatizovali mnoge procese, postigli praktično 100% funkcionalnosti našeg razvojnog servera, omogućili praćenje i unapredili pokrivenost koda testovima, kao i dodali mogućnost povezivanja grana u Git-u sa zadacima u Jiri ili implementacijom. Većina alata koje smo koristili za izgradnju našeg DevOps kanala imala je otvoren izvor.

Sada shvatam koliko je naš DevOps kanal bio jednostavan: nismo koristili ekstenzije kao što su Jenkins fajlovi ili Ansible. Ipak, ovaj jednostavni kanal je dobro funkcionisao, možda zahvaljujući Pareto principu (poznatom i kao pravilo 80/20).

Kratak uvod u DevOps i CI/CD kanal

Če vprašate nekaj ljudi: 'Kaj je DevOps?', boste verjetno dobili več različnih odgovorov. DevOps, tako kot Agile, se je razvijal, da bi zajel številne različne discipline, vendar se večina ljudi strinja glede nekaterih stvari: DevOps je praksa razvoja programske opreme ali življenjski cikel razvoja programske opreme (SDLC), katere osrednja načela so sprememba kulture, v kateri razvijalci in drugi delavci obstajajo v okolju, kjer:

So avtomatizirane operacije, ki so bile prej opravljene ročno;
Vsak dela tisto, kar najbolje zna;
Število namestitev v določenem časovnem obdobju narašča; Povečuje se propustnost;
Povečuje se fleksibilnost razvoja.

Čeprav pravi programski pripomočki niso edina stvar, ki je potrebna za ustvarjanje DevOps okolja, so nekateri pripomočki nujni. Ključni pripomoček je neprekinjeno integriranje in neprekinjeno uvajanje (CI/CD). V tem cevovodu imajo okolja različne faze (npr. DEV, INT, TST, QA, UAT, STG, PROD), mnoge operacije so avtomatizirane, razvijalci pa lahko pišejo kakovostno kodo, dosegajo fleksibilnost razvoja in visoko frekvenco uvajanja.

V tem članku je opisan petstopenjski pristop k ustvarjanju DevOps cevovoda, ki je podoben tistemu, ki je prikazan na naslednji diagramu, ob uporabi odprtokodnih orodij.

Korak 1: Metode CI/CD

Prvo, kar potrebujete, je orodje za CI/CD. Jenkins, odprtokodno orodje, ki temelji na Javi in je distribuirano pod MIT licenco, je orodje, ki je populariziralo smer DevOps in postalo de facto standard.

Kaj je torej Jenkins? Mislite nanj kot na nekakšen čarobni univerzalni daljinski upravljalnik, ki lahko komunicira z različnimi storitvami in orodji ter jih organizira. Sam CI/CD pripomoček, kot je Jenkins, je brez uporabe, a postane bolj zmogljiv, ko se poveže z različnimi orodji in storitvami.

Jenkins je le eno od mnogih odprtokodnih orodij za CI/CD, ki jih lahko uporabite za izgradnjo DevOps cevovoda.

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

Tako izgledajo DevOps procesi z orodjem CI/CD:

Руководство для начинающих: как создать DevOps-конвейер.

Imate orodje CI/CD, ki deluje na vašem lokalnem strežniku, a trenutno nimate veliko možnosti. Poglejmo naslednji korak na poti v svet DevOps.

Korak 2: Upravljanje sistemov za nadzor izvorne kode

Najboljši (in morda najpreprostejši) način, da preverite, ali vaše orodje CI/CD lahko naredi čarovnijo, je integracija z orodjem za nadzor izvorne kode (SCM). Zakaj potrebujete nadzor nad izvorno kodo? Recimo, da razvijate aplikacijo. Vsakič, ko ustvarite aplikacijo, programirate, in ni pomembno, ali uporabljate Java, Python, C++, Go, Ruby, JavaScript ali katerikoli izmed milijonov programskih jezikov. Koda, ki jo pišete, se imenuje izvorna koda. Na začetku, še posebej, ko delate sami, je verjetno mogoče vse shraniti v lokalni mapo. Toda ko projekt postane večji in povabite druge k sodelovanju, potrebujete način za preprečevanje konfliktov med učinkovitim izmenjevanjem sprememb. Potrebujete tudi način za obnovitev prejšnjih različic, ker so varnostne kopije in kopiranje/lepilo že zastarele. Vi (in vaši sodelavci) potrebujete nekaj boljšega.

Tukaj postane orodje za nadzor izvorne kode praktično nujno. To orodje hrani vašo kodo v repozitorijih, spremlja različice in usklajuje delo članov projekta.

Čeprav obstaja mnogo orodij za nadzor izvorne kode, je Git standard, kar drži. Močno priporočam uporabo Gita, čeprav, če želite, so na voljo tudi druge možnosti z odprto kodo.

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

Tako izgleda DevOps cevovod z dodanim orodjem za nadzor izvorne kode.

Руководство для начинающих: как создать DevOps-конвейер.

Orodje CI/CD lahko avtomatizira procese preverjanja, pridobivanja izvorne kode in sodelovanja med člani. Ni slabo? Ampak kako to spremeniti v delujočo aplikacijo, da jo milijarde ljudi lahko uporabljajo in cenijo?

Korak 3: Ustvarjanje orodja za avtomatizacijo gradnje

Odlično! Lahko pregledate kodo in izvajate spremembe v sistemu za nadzor izvorne kode ter povabite svoje prijatelje k sodelovanju pri razvoju. Ampak še niste ustvarili aplikacije. Da bi ustvarili spletno aplikacijo, jo je treba prevesti in pakirati v razporejen paketni format ali zagnati kot izvršno datoteko. (Upoštevajte, da interpreterski programski jezik, kot sta JavaScript ali PHP, ne zahteva prevajanja).

Izkoristite orodje za avtomatizacijo gradnje. Ne glede na to, katero orodje za avtomatizacijo gradnje se odločite uporabiti, vsa zasledujejo isto ciljno, in sicer zgraditi izvorno kodo v želeno obliko ter avtomatizirati naloge čiščenja, prevajanja, testiranja in uvajanja v določenem okolju. Orodja za gradnjo se bodo razlikovala glede na vaš programski jezik, vendar so tu nekatere splošne možnosti z odprto kodo.

Ime
Licenca
Programski jezik

Maven
Apache 2.0
Java

Ant
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

Super! Datoteke s konfiguracijo orodja za avtomatizacijo gradnje lahko shranite v sistem upravljanja izvorne kode in omogočite svojemu CI/CD orodju, da vse poveže.

Руководство для начинающих: как создать DevOps-конвейер.

Vse je v redu, kajne? Ampak kje zasaditi vašo aplikacijo?

Korak 4: Strežnik za spletne aplikacije

Zaenkrat imate pakirano datoteko, ki je lahko izvršna ali namestitvena. Da bi bila katera koli aplikacija resnično koristna, mora nuditi neko storitev ali vmesnik, vendar potrebujete kontejner za gostovanje vaše aplikacije.

Strežnik za spletne aplikacije je prav tak kontejner. Strežnik zagotavlja okolje, v katerem je mogoče definirati logiko razporejenega paketa. Poleg tega strežnik nudi vmesnik in ponuja spletne storitve, odpira vtičnice svetu. Potrebujete HTTP strežnik in določeno okolje (na primer virtualno napravo) za njegovo namestitev. In za zdaj, predpostavimo, da se boste o tem kmalu naučili več (čeprav o kontejnerjih govorim spodaj).

Obstaja več strežnikov za spletne aplikacije z odprto kodo.

Ime
Licenca
Programski jezik

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

Vaš DevOps pipeline je gotovo spreman za korištenje. Odličan posao!

Руководство для начинающих: как создать DevOps-конвейер.

Iako se ovdje možeš zaustaviti i samostalno se baviti integracijom, kvaliteta koda je važna stvar za programere aplikacija, i o tome se treba brinuti.

Korak 5: Pokrivenost testiranja koda

Implementacija testova može biti još jedan zahtjevan korak, ali programeri trebaju uhvatiti sve greške u aplikaciji u ranoj fazi i poboljšati kvalitetu koda kako bi osigurali zadovoljstvo krajnjih korisnika. Srećom, postoji mnogo alata s otvorenim izvorom za testiranje vašeg koda i davanje preporuka za poboljšanje njegove kvalitete. Još bolje, većina CI/CD alata može se povezati s ovim alatima i automatizirati proces.

Testiranje koda sastoji se od dva dijela: okvira za testiranje koda koji pomažu u pisanju i pokretanju testova, te alata za generiranje preporuka koji pomažu u poboljšanju kvalitete koda.

Sistemi testiranja koda

Ime
Licenca
Programski jezik

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

Sistemi preporuka za poboljšanje koda

Ime
Licenca
Programski jezik

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

Imajte na umu da su većina alata i okvira navedenih iznad napisani za Java, Python i JavaScript, dok su C++ i C# vlasnički programski jezici (iako GCC također ima otvoreni izvor).

Sada kada ste implementirali alate za pokrivenost koda testovima, vaš DevOps pipeline trebao bi izgledati poput dijagrama prikazanog na početku ovog vodiča.

Dodatni koraki

Kontejnerji

Kao što sam već spomenuo, možete hostati svoj server na virtualnoj mašini ili serveru, ali kontejneri su popularno rješenje.

Što su kontejneri? Kratak odgovor je da virtualna mašina zahtijeva velike količine memorije operativnog sistema koje prelaze veličinu aplikacije, dok kontejneru treba samo nekoliko knjižnica i konfiguracija za pokretanje aplikacije. Očigledno je da virtualne mašine i dalje imaju važne primjene, ali kontejner je lagano rješenje za hostanje aplikacije, uključujući aplikacijski server.

Iako postoje i druge opcije kontejnera, najpopularniji su Docker i Kubernetes.

Docker: Apache 2.0
Kubernetes: Apache 2.0

Orodja za avtomatizacijo vmesnika

Naša DevOps cevovodna rešitev je predvsem usmerjena v skupno ustvarjanje in uvajanje aplikacij, vendar obstaja še veliko drugih nalog, ki jih je mogoče izvedeti z orodji DevOps. Eden od njih je uporaba orodij Infrastructure as Code (IaC), ki so prav tako znana kot orodja za avtomatizacijo vmesnika. Ta orodja pomagajo avtomatizirati namestitev, upravljanje in druge naloge za vmesno programsko opremo. Na primer, orodje za avtomatizacijo lahko pridobi aplikacije, kot so strežniki spletnih aplikacij, baze podatkov in orodja za spremljanje, z ustreznimi konfiguracijami in jih uvede na strežniku aplikacij.

Tukaj je nekaj odprtokodnih orodij za avtomatizacijo vmesnika:

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

Руководство для начинающих: как создать DevOps-конвейер.

Izvedite podrobnosti, kako pridobiti iskano poklicno usposabljanje od začetka ali nadgraditi svoje spretnosti in plačo s plačljivimi spletnimi tečaji SkillFactory:

še tečaji

Koristno

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster