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

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' (), 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:

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.

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.

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!

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

Izvedite podrobnosti, kako pridobiti iskano poklicno usposabljanje od začetka ali nadgraditi svoje spretnosti in plačo s plačljivimi spletnimi tečaji SkillFactory:
- (12 mesecev)
še tečaji
- (12 tednov)
- (12 mesecev)
- (9 mesecev)
- (9 mesecev)
Koristno
Izvor: habr.com
