Vodič za početnike: Izgradnja DevOps cjevovoda

Ako ste novi u DevOps-u, pogledajte ovaj vodič u pet koraka za kreiranje vašeg prvog cjevovoda.

Vodič za početnike: Izgradnja DevOps cjevovoda

DevOps je postao standardno rješenje za popravljanje sporih, nepovezanih ili pokvarenih procesa razvoja softvera. Problem je u tome što ako ste novi u DevOps-u i ne znate odakle da počnete, možda vam nedostaje razumijevanje ovih tehnika. Ovaj članak će raspravljati o definiciji DevOps cjevovoda i također će pružiti upute u pet koraka za njegovo kreiranje. Iako ovaj vodič nije iscrpan, trebao bi vam dati temelj da započnete svoje putovanje i proširite svoje znanje u budućnosti. Ali počnimo sa istorijom.

Moje DevOps putovanje

Prethodno sam radio u timu Citi Grupe u oblaku koji je razvijao web aplikaciju Infrastructure-as-a-Service (IaaS) za upravljanje Citi-jevom cloud infrastrukturom, ali me je uvijek zanimalo kako proces razvoja učiniti efikasnijim i donijeti pozitivnu kulturnu promjenu u razvojni tim. Odgovor sam pronašao u knjizi koju je preporučio Greg Lavender, CTO za Cloud arhitekturu i infrastrukturu u Citiju. Knjiga se zvala Projekat Feniks (Projekat Feniks), i objašnjava principe DevOps-a, ali se čita kao roman.

Tabela na poleđini knjige pokazuje koliko često različite kompanije postavljaju svoje sisteme u okruženje izdanja:

Amazon: 23 po danu
Google: 5 dnevno
Netflix: 500 po danu
Facebook: Jednom dnevno
Twitter: 3 puta sedmično
Tipična kompanija: jednom u 9 mjeseci

Kako su frekvencije Amazona, Googlea i Netflixa uopće moguće? To je zato što su ove kompanije smislile kako stvoriti gotovo savršen DevOps cevovod.

Bili smo daleko od ovoga sve dok nismo implementirali DevOps u Citiju. Tada je moj tim imao različita okruženja, ali je implementacija na razvojnom serveru bila potpuno ručna. Svi programeri su imali pristup samo jednom razvojnom poslužitelju baziranom na IBM WebSphere Application Server Community Edition. Problem je bio u tome što bi se server isključio svaki put kada bi više korisnika pokušalo da se implementira u isto vrijeme, tako da su programeri morali jedni drugima komunicirati svoje namjere, što je bilo prilično teško. Dodatno, bilo je problema s pokrivenošću testnog koda niskog nivoa, glomaznim procesima ručne implementacije i nemogućnošću praćenja implementacije koda povezanog sa određenim zadatkom ili korisničkom pričom.

Shvatio sam da nešto treba uraditi i našao kolegu istomišljenika. Odlučili smo da sarađujemo na izgradnji početnog DevOps cevovoda - on je postavio Tomcat virtuelnu mašinu i server aplikacija dok sam ja radio na Jenkinsu, integrisao Atlassian Jira i BitBucket i radio na pokrivanju testnog koda. Ovaj sporedni projekat je bio veoma uspešan: skoro potpuno smo automatizovali mnoge procese, postigli skoro 100% neprekidnog rada na našem razvojnom serveru, obezbedili praćenje i poboljšanu pokrivenost koda testom i dodali mogućnost povezivanja Git grana sa Jira problemima ili implementacijama. Većina alata koje smo koristili za izgradnju našeg DevOps cevovoda bili su otvorenog koda.

Sada razumijem koliko je naš DevOps cevovod bio jednostavan: nismo koristili ekstenzije poput Jenkinsovih datoteka ili Ansible-a. Međutim, ovaj jednostavan cevovod je dobro funkcionisao, možda zbog Pareto principa (takođe poznatog kao pravilo 80/20).

Kratak uvod u DevOps i CI/CD Pipeline

Ako pitate nekoliko ljudi, “Šta je DevOps?”, vjerovatno ćete dobiti nekoliko različitih odgovora. DevOps, kao i Agile, evoluirao je tako da obuhvati mnogo različitih disciplina, ali većina ljudi će se složiti oko nekoliko stvari: DevOps je praksa razvoja softvera ili životni ciklus razvoja softvera (SDLC) čije je središnje načelo mijenjanje kulture u kojoj programeri i ne- programeri postoje u okruženju u kojem:

Operacije koje su se ranije izvodile ručno su automatizirane;
Svako radi ono što najbolje radi;
Povećava se broj implementacija u određenom vremenskom periodu; Povećava se propusnost;
Povećana razvojna fleksibilnost.

Iako posjedovanje pravih softverskih alata nije jedina stvar koja vam je potrebna za kreiranje DevOps okruženja, neki alati su neophodni. Ključni alat je kontinuirana integracija i kontinuirana implementacija (CI/CD). U ovom cevovodu, okruženja imaju različite faze (npr. DEV, INT, TST, QA, UAT, STG, PROD), mnoge operacije su automatizovane, a programeri mogu napisati visokokvalitetan kod, postići razvojnu agilnost i visoke stope implementacije.

Ovaj članak opisuje pristup u pet koraka za kreiranje DevOps cjevovoda poput onog prikazanog na sljedećem dijagramu pomoću alata otvorenog koda.

Korak 1: CI/CD metode

Prva stvar koju trebate je CI/CD alat. Jenkins, alat otvorenog koda baziran na Javi i licenciran pod MIT licencom, je alat koji je popularizirao DevOps i koji je postao de facto standard.

Pa šta je Dženkins? Zamislite to kao neku vrstu magičnog univerzalnog daljinskog upravljača koji može razgovarati i organizirati različite usluge i alate. Sam po sebi, CI/CD alat poput Jenkinsa je beskorisan, ali postaje moćniji kako se povezuje na različite alate i usluge.

Jenkins je samo jedan od mnogih open source CI/CD alata koje možete koristiti za izgradnju vašeg DevOps cevovoda.

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

Evo kako izgledaju DevOps procesi sa CI/CD alatom:

Vodič za početnike: Izgradnja DevOps cjevovoda

Imate CI/CD alat koji radi na vašem lokalnom hostu, ali trenutno ne možete mnogo učiniti. Pređimo na sljedeću fazu DevOps puta.

Korak 2: Upravljanje sistemima kontrole izvora

Najbolji (i možda najlakši) način da provjerite da li vaš CI/CD alat može učiniti svoju magiju je integracija sa alatom za kontrolu izvornog koda (SCM). Zašto vam je potrebna kontrola izvora? Recimo da razvijate aplikaciju. Kad god kreirate aplikaciju, vi programirate i nije važno da li koristite Javu, Python, C++, Go, Ruby, JavaScript ili bilo koji od ziliona programskih jezika. Kod koji pišete naziva se izvorni kod. U početku, pogotovo kada radite sami, vjerojatno je u redu staviti sve u lokalni direktorij. Ali kako projekat postaje sve veći i vi pozivate druge ljude da sarađuju, potreban vam je način da sprečite sukobe dok efikasno delite modifikacije. Potreban vam je i način da vratite prethodne verzije, jer pravljenje sigurnosnih kopija i kopiranje/lijepljenje u njih postaje zastarjelo. Vama (i vašim saigračima) treba nešto bolje.

Ovdje kontrola izvornog koda postaje gotovo neophodna. Ovaj alat pohranjuje vaš kod u spremišta, prati verzije i koordinira rad učesnika u projektu.

Iako postoji mnogo alata za kontrolu izvora, Git je standard, i to s pravom. Toplo preporučujem korištenje Gita, iako postoje i druge opcije otvorenog koda ako želite.

Git: GPLv2 i LGPL v2.1
Subverzija: Apache 2.0
Sistem istovremenih verzija (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

Ovako izgleda DevOps cevovod sa dodatkom kontrola izvornog koda.

Vodič za početnike: Izgradnja DevOps cjevovoda

CI/CD alat može automatizirati procese pregleda, nabavke izvornog koda i suradnje među članovima. Nije loše? Ali kako je pretvoriti u funkcionalnu aplikaciju tako da je milijarde ljudi mogu koristiti i cijeniti?

Korak 3: Kreirajte alat za automatizaciju izgradnje

Odlično! Možete pregledati kod i napraviti promjene u kontroli izvora, te pozvati svoje prijatelje da sarađuju na razvoju. Ali još niste kreirali aplikaciju. Da biste napravili web aplikaciju, ona mora biti kompajlirana i upakovana u paketni format koji se može primijeniti ili pokrenuti kao izvršna datoteka. (Imajte na umu da interpretirani programski jezik kao što je JavaScript ili PHP ne mora biti kompajliran).

Koristite alat za automatizaciju izgradnje. Bez obzira koji alat za automatizaciju izgradnje odlučite koristiti, svi oni imaju isti cilj: izgraditi izvorni kod u neki željeni format i automatizirati zadatak čišćenja, kompajliranja, testiranja i implementacije u određeno okruženje. Alati za izradu će se razlikovati ovisno o vašem programskom jeziku, ali evo nekih uobičajenih opcija otvorenog koda.

Naslov
Licenca
Programski jezik

Maven
Apache 2.0
Java

mrav
Apache 2.0
Java

Gradle
Apache 2.0
Java

Basel
Apache 2.0
Java

napraviti
GNU
N / A

groktaj
MIT
JavaScript

gutljaj
MIT
JavaScript

Builder
apaš
Rubin

Rake
MIT
Rubin

AAP
GNU
piton

SCons
MIT
piton

BitBake
GPLv2
piton

torta
MIT
C#

ASDF
iseljenik (MIT)
LISP

Cabal
BSD
Haskell

Odlično! Možete staviti konfiguracijske datoteke alata za automatizaciju izgradnje u vaš sistem kontrole izvora i dopustiti vašem CI/CD alatu da sve sastavi.

Vodič za početnike: Izgradnja DevOps cjevovoda

Sve je u redu, zar ne? Ali gdje implementirati svoju aplikaciju?

Korak 4: Server web aplikacija

Za sada imate upakovanu datoteku koja može biti izvršna ili instalirana. Da bi bilo koja aplikacija bila zaista korisna, ona mora pružiti neku vrstu usluge ili sučelja, ali vam je potreban kontejner za smještaj vaše aplikacije.

Server web aplikacija je upravo takav kontejner. Server pruža okruženje u kojem se može definirati logika paketa koji se postavlja. Server takođe obezbeđuje interfejs i nudi web usluge izlažući utičnice spoljašnjem svetu. Potreban vam je HTTP server, kao i neko okruženje (poput virtuelne mašine) da biste ga instalirali. Za sada, pretpostavimo da ćete naučiti više o ovome (iako ću u nastavku pokriti kontejnere).

Postoji nekoliko servera web aplikacija otvorenog koda.

Naslov
Licenca
Programski jezik

Tomcat
Apache 2.0
Java

kej
Apache 2.0
Java

wildfly
GNU Mala javnost
Java

staklena riba
CDDL & GNU manje javnosti
Java

Django
3-klauzula BSD
piton

tornado
Apache 2.0
piton

gunicorn
MIT
piton

piton
MIT
piton

Rails
MIT
Rubin

node.js
MIT
Javascript

Vaš DevOps cevovod je skoro spreman za upotrebu. Dobar posao!

Vodič za početnike: Izgradnja DevOps cjevovoda

Iako možete stati na tome i sami se pobrinuti za integraciju, kvalitet koda je važna stvar o kojoj treba brinuti programer aplikacije.

Korak 5: Pokrivenost testiranja koda

Implementacija testova može biti još jedan glomazan zahtjev, ali programeri moraju rano uhvatiti sve greške u aplikaciji i poboljšati kvalitet koda kako bi osigurali da su krajnji korisnici zadovoljni. Srećom, postoji mnogo alata otvorenog koda za testiranje vašeg koda i davanje preporuka za poboljšanje njegovog kvaliteta. Ono što je još bolje je da se većina CI/CD alata može povezati s ovim alatima i automatizirati proces.

Testiranje koda sastoji se od dva dijela: okvira za testiranje koda koji vam pomažu da pišete i izvodite testove i alata za prijedloge koji vam pomažu da poboljšate kvalitetu vašeg koda.

Sistemi za testiranje koda

Naslov
Licenca
Programski jezik

JUnit
Eclipse Public License
Java

EasyMock
apaš
Java

mockito
MIT
Java

PowerMock
Apache 2.0
Java

Pytest
MIT
piton

Hipoteza
Mozilla
piton

tox
MIT
piton

Sistemi preporuka za poboljšanje koda

Naslov
Licenca
Programski jezik

Cobertura
GNU
Java

CodeCover
Eclipse Public (EPL)
Java

Coverage.py
Apache 2.0
piton

Emma
Zajednička javna licenca
Java

JaCoCo
Eclipse Public License
Java

Hipoteza
Mozilla
piton

tox
MIT
piton

jasmin
MIT
JavaScript

Karma
MIT
JavaScript

Mocha
MIT
JavaScript

ima
MIT
JavaScript

Imajte na umu da je većina gore navedenih alata i okvira napisana za Javu, Python i JavaScript, budući da su C++ i C# vlasnički programski jezici (iako je GCC open source).

Sada kada ste implementirali alate za pokrivanje testova, vaš DevOps cevovod bi trebao izgledati slično dijagramu prikazanom na početku ovog vodiča.

Dodatni koraci

Kontejneri

Kao što sam rekao, možete hostirati svoj server na virtuelnoj mašini ili serveru, ali kontejneri su popularno rešenje.

Šta su kontejneri? Kratko objašnjenje je da virtuelnoj mašini treba ogromna količina memorije operativnog sistema, koja premašuje veličinu aplikacije, dok je kontejneru potrebno samo nekoliko biblioteka i konfiguracija za pokretanje aplikacije. Očigledno, još uvijek postoje važne namjene za virtuelnu mašinu, ali kontejner je lako rešenje za hostovanje aplikacije, uključujući server aplikacija.

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

Docker: Apache 2.0
Kubernetes: Apache 2.0

Srednji alati za automatizaciju

Naš DevOps cevovod je prvenstveno fokusiran na kolaborativno kreiranje i implementaciju aplikacija, ali postoje mnoge druge stvari koje se mogu uraditi pomoću DevOps alata. Jedan od njih je korištenje alata Infrastructure as Code (IaC), koji su također poznati kao alati za automatizaciju srednjeg softvera. Ovi alati pomažu u automatizaciji instalacije, upravljanja i drugih zadataka za međuverski softver. Tako, na primjer, alat za automatizaciju može izdvojiti aplikacije poput poslužitelja web aplikacija, baze podataka i alata za praćenje s ispravnim konfiguracijama i implementirati ih na poslužitelj aplikacija.

Evo nekih alata za automatizaciju srednjeg softvera otvorenog koda:

Ansible: GNU Public
SaltStack: Apache 2.0
Kuvar: Apache 2.0
Lutka: Apache ili GPL

Vodič za početnike: Izgradnja DevOps cjevovoda

Saznajte detalje o tome kako da dobijete traženu profesiju od nule ili na viši nivo u smislu vještina i plate tako što ćete završiti SkillFactory plaćene online kurseve:

više kurseva

Korisno

izvor: www.habr.com

Dodajte komentar