ProHoster > Blog > Uprava > Vodnik za začetnike: Ustvarjanje cevovoda DevOps
Vodnik za začetnike: Ustvarjanje cevovoda DevOps
Če ste novi v DevOps, si oglejte ta vodnik v petih korakih za ustvarjanje vašega prvega cevovoda.
DevOps je postal standardna rešitev za popravljanje počasnih, nepovezanih ali pokvarjenih procesov razvoja programske opreme. Težava je v tem, da če ste novi v DevOps in ne veste, kje začeti, morda ne razumete teh tehnik. Ta članek bo obravnaval definicijo cevovoda DevOps in zagotovil tudi navodila v petih korakih za njegovo ustvarjanje. Čeprav ta vadnica ni izčrpna, bi vam morala dati osnovo za začetek vaše poti in razširitev vašega znanja v prihodnosti. A začnimo z zgodovino.
Moje potovanje DevOps
Prej sem delal v ekipi za oblak Citi Group, ki je razvijala spletno aplikacijo Infrastructure-as-a-Service (IaaS) za upravljanje Citijeve infrastrukture v oblaku, vendar me je vedno zanimalo, kako narediti razvojni proces učinkovitejši in prinesti pozitivne kulturne spremembe v razvojna ekipa. Odgovor sem našel v knjigi, ki jo je priporočil Greg Lavender, tehnični direktor za arhitekturo in infrastrukturo v oblaku pri Citi. Knjiga se je imenovala The Phoenix Project (Projekt Phoenix) in razlaga načela DevOps, vendar se bere kot roman.
Tabela na zadnji strani knjige prikazuje, kako pogosto različna podjetja uporabljajo svoje sisteme v okolju izdaje:
Amazon: 23 na dan
Google: 5 na dan
Netflix: 500 na dan
Facebook: Enkrat na dan
Twitter: 3-krat na teden
Tipično podjetje: enkrat na 9 mesecev
Kako so frekvence Amazon, Google in Netflix sploh možne? To je zato, ker so ta podjetja ugotovila, kako ustvariti skoraj popoln cevovod DevOps.
Bili smo daleč od tega, dokler nismo implementirali DevOps v Citi. Takrat je imela moja ekipa drugačna okolja, vendar je bila uvedba na razvojnem strežniku povsem ročna. Vsi razvijalci so imeli dostop samo do enega razvojnega strežnika, ki temelji na IBM WebSphere Application Server Community Edition. Težava je bila v tem, da se je strežnik zaustavil vsakič, ko je poskušalo uvesti več uporabnikov hkrati, zato so morali razvijalci drug drugemu sporočati svoje namere, kar je bilo precej težko. Poleg tega so bile težave s pokritostjo testne kode na nizki ravni, okornimi postopki ročnega uvajanja in nezmožnostjo sledenja uvajanju kode, povezane z določeno nalogo ali uporabniško zgodbo.
Ugotovil sem, da je treba nekaj narediti in našel somišljenika. Odločila sva se, da bova sodelovala pri izgradnji začetnega cevovoda DevOps – on je postavil navidezni stroj Tomcat in aplikacijski strežnik, medtem ko sem jaz delal na Jenkinsu, integriral Atlassian Jira in BitBucket ter delal na pokritosti testne kode. Ta stranski projekt je bil zelo uspešen: skoraj popolnoma smo avtomatizirali številne procese, dosegli skoraj 100-odstotno delovanje našega razvojnega strežnika, zagotovili sledenje in izboljšano testno pokritost kode ter dodali možnost povezovanja vej Git s težavami ali uvajanji Jira. Večina orodij, ki smo jih uporabili za izgradnjo našega cevovoda DevOps, je bila odprtokodna.
Zdaj razumem, kako preprost je bil naš cevovod DevOps: nismo uporabljali razširitev, kot so datoteke Jenkins ali Ansible. Vendar je ta preprost cevovod dobro deloval, morda zaradi Paretovega načela (znanega tudi kot pravilo 80/20).
Kratek uvod v DevOps in cevovod CI/CD
Če vprašate več ljudi, "Kaj je DevOps?", boste verjetno dobili več različnih odgovorov. DevOps se je, tako kot Agile, razvil v številne različne discipline, vendar se bo večina ljudi strinjala o nekaj stvareh: DevOps je praksa razvoja programske opreme ali življenjski cikel razvoja programske opreme (SDLC), katerega osrednje načelo je spreminjanje kulture, v kateri razvijalci in ne- razvijalci obstajajo v okolju, v katerem:
Operacije, ki so se prej izvajale ročno, so avtomatizirane;
Vsak dela tisto, kar zna najbolje;
Število implementacij v določenem časovnem obdobju se poveča; Pretok se poveča;
Povečana razvojna fleksibilnost.
Čeprav prava programska orodja niso edina stvar, ki jo potrebujete za ustvarjanje okolja DevOps, so nekatera orodja nujna. Ključno orodje sta stalna integracija in stalna uvedba (CI/CD). V tem cevovodu imajo okolja različne stopnje (npr. DEV, INT, TST, QA, UAT, STG, PROD), številne operacije so avtomatizirane, razvijalci pa lahko napišejo visokokakovostno kodo, dosežejo agilnost razvoja in visoke stopnje uvajanja.
Ta članek opisuje pristop v petih korakih za ustvarjanje cevovoda DevOps, kot je prikazan na naslednjem diagramu, z uporabo odprtokodnih orodij.
1. korak: metode CI/CD
Prva stvar, ki jo potrebujete, je orodje CI/CD. Jenkins, odprtokodno orodje, ki temelji na Javi in ima licenco MIT, je orodje, ki je populariziralo DevOps in je postalo de facto standard.
Kaj je torej Jenkins? Predstavljajte si ga kot nekakšen čarobni univerzalni daljinski upravljalnik, ki se lahko pogovarja in organizira različne storitve in orodja. Samo po sebi je orodje CI/CD, kot je Jenkins, neuporabno, vendar postane močnejše, ko se poveže z različnimi orodji in storitvami.
Jenkins je le eno od številnih odprtokodnih orodij CI/CD, ki jih lahko uporabite za izgradnjo svojega cevovoda DevOps.
Jenkins: Creative Commons in MIT
Travis CI: MIT
Tempomat: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU
Tako izgledajo procesi DevOps z orodjem CI/CD:
Imate orodje CI/CD, ki se izvaja na vašem lokalnem gostitelju, vendar trenutno ne morete narediti veliko. Pojdimo na naslednjo stopnjo poti DevOps.
2. korak: Upravljajte sisteme za nadzor vira
Najboljši (in morda najlažji) način za preverjanje, ali lahko vaše orodje CI/CD naredi svojo čarobnost, je integracija z orodjem za nadzor izvorne kode (SCM). Zakaj potrebujete nadzor vira? Recimo, da razvijate aplikacijo. Kadarkoli ustvarite aplikacijo, programirate in ni pomembno, ali uporabljate Javo, Python, C++, Go, Ruby, JavaScript ali katerega koli od zilljonov programskih jezikov. Koda, ki jo napišete, se imenuje izvorna koda. Na začetku, zlasti ko delate sami, je verjetno v redu, če vse shranite v lokalni imenik. Ko pa projekt postaja večji in k sodelovanju povabite druge ljudi, potrebujete način za preprečevanje konfliktov ob učinkoviti delitvi sprememb. Potrebujete tudi način za obnovitev prejšnjih različic, ker ustvarjanje varnostnih kopij in kopiranje/lepljenje vanje postaja zastarelo. Vi (in vaši soigralci) potrebujete nekaj boljšega.
Tukaj nadzor izvorne kode postane skoraj nujen. To orodje shrani vašo kodo v repozitorije, spremlja različice in usklajuje delo udeležencev projekta.
Čeprav je na voljo veliko orodij za nadzor vira, je Git standard, in prav je tako. Zelo priporočam uporabo Gita, čeprav obstajajo tudi druge odprtokodne možnosti, če želite.
Git: GPLv2 in LGPL v2.1
Subverzija: Apache 2.0
Sistem sočasnih različic (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+
Tako izgleda cevovod DevOps z dodatkom kontrolnikov izvorne kode.
Orodje CI/CD lahko avtomatizira procese pregleda, pridobivanja izvorne kode in sodelovanja med člani. Ni slabo? Toda kako ga spremeniti v delujočo aplikacijo, da jo bodo lahko uporabljale in cenile milijarde ljudi?
3. korak: Ustvarite orodje za avtomatizacijo gradnje
Super! Lahko pregledate kodo in spremenite nadzor vira ter povabite svoje prijatelje, da sodelujejo pri razvoju. Vendar še niste ustvarili aplikacije. Če želite izdelati spletno aplikacijo, jo je treba prevesti in zapakirati v razmestitveni paketni format ali zagnati kot izvršljivo datoteko. (Upoštevajte, da razloženega programskega jezika, kot je JavaScript ali PHP, ni treba prevesti).
Uporabite orodje za avtomatizacijo gradnje. Ne glede na to, katero orodje za avtomatizacijo gradnje se odločite uporabiti, imajo vsa isti cilj: zgraditi izvorno kodo v določeno želeno obliko in avtomatizirati nalogo čiščenja, prevajanja, testiranja in uvajanja v določeno okolje. Orodja za gradnjo se razlikujejo glede na vaš programski jezik, vendar je tukaj nekaj pogostih odprtokodnih možnosti.
Ime
Licenca
Programski jezik
Maven
Apache 2.0
Java
Mravlja
Apache 2.0
Java
Gradle
Apache 2.0
Java
Bazel
Apache 2.0
Java
Poskrbite
GNU
N / A
grunt
MIT
JavaScript
Opiti
MIT
JavaScript
Gradbenik
Apache
Ruby
Rake
MIT
Ruby
AAP
GNU
Python
SCons
MIT
Python
BitBake
GPLv2
Python
Torta
MIT
C#
ASDF
Izseljenec (MIT)
LISP
Cabal
BSD
Haskell
Super! Konfiguracijske datoteke orodja za avtomatizacijo gradnje lahko vstavite v svoj sistem za nadzor vira in pustite, da vaše orodje CI/CD vse združi.
Vse je v redu, kajne? Toda kje namestiti svojo aplikacijo?
4. korak: Strežnik spletnih aplikacij
Za zdaj imate zapakirano datoteko, ki je lahko izvedljiva ali namestiljiva. Da bi bila katera koli aplikacija resnično uporabna, mora zagotavljati neke vrste storitev ali vmesnik, vendar potrebujete vsebnik za gostovanje vaše aplikacije.
Strežnik spletnih aplikacij je prav tak vsebnik. Strežnik zagotavlja okolje, v katerem je mogoče definirati logiko paketa, ki se uvaja. Strežnik ponuja tudi vmesnik in ponuja spletne storitve z izpostavljanjem vtičnic zunanjemu svetu. Potrebujete strežnik HTTP in nekaj okolja (na primer virtualni stroj), da ga namestite. Zaenkrat predpostavimo, da boste izvedeli več o tem (čeprav bom spodaj obravnaval vsebnike).
Obstaja več odprtokodnih strežnikov spletnih aplikacij.
Ime
Licenca
Programski jezik
Tomcat
Apache 2.0
Java
pomol
Apache 2.0
Java
WildFly
GNU Lesser Public
Java
GlassFish
CDDL & GNU manj javno
Java
Django
3-člen BSD
Python
Tornado
Apache 2.0
Python
gunicorn
MIT
Python
Python
MIT
Python
Tračnice
MIT
Ruby
Node.js
MIT
Javascript
Vaš cevovod DevOps je skoraj pripravljen za uporabo. Dobro opravljeno!
Medtem ko se lahko ustavite pri tem in sami poskrbite za integracijo, je kakovost kode pomembna stvar, ki mora razvijalca aplikacij skrbeti.
5. korak: Pokritost testiranja kode
Izvajanje testov je lahko še ena okorna zahteva, vendar morajo razvijalci zgodaj odkriti morebitne napake v aplikaciji in izboljšati kakovost kode, da zagotovijo zadovoljstvo končnih uporabnikov. Na srečo obstaja veliko odprtokodnih orodij za testiranje vaše kode in dajanje priporočil za izboljšanje njene kakovosti. Še bolje pa je, da se večina orodij CI/CD lahko poveže s temi orodji in avtomatizira postopek.
Testiranje kode je sestavljeno iz dveh delov: okvirov za testiranje kode, ki vam pomagajo pri pisanju in izvajanju testov, in orodij za predloge, ki vam pomagajo izboljšati kakovost kode.
Sistemi za testiranje kod
Ime
Licenca
Programski jezik
JUnit
Eclipse Public License
Java
EasyMock
Apache
Java
mockito
MIT
Java
PowerMock
Apache 2.0
Java
Pytest
MIT
Python
Hipoteza
Mozilla
Python
tox
MIT
Python
Sistemi priporočil za izboljšanje kode
Ime
Licenca
Programski jezik
Pokritost
GNU
Java
CodeCover
Eclipse Public (EPL)
Java
Pokritost.py
Apache 2.0
Python
Emma
Skupna javna licenca
Java
JaCoCo
Eclipse Public License
Java
Hipoteza
Mozilla
Python
tox
MIT
Python
Jasmine
MIT
JavaScript
Karma
MIT
JavaScript
mocha
MIT
JavaScript
obstaja
MIT
JavaScript
Upoštevajte, da je večina zgoraj omenjenih orodij in ogrodij napisanih za Javo, Python in JavaScript, saj sta C++ in C# lastniška programska jezika (čeprav je GCC odprtokoden).
Zdaj, ko ste implementirali orodja za pokritost testov, bi moral biti vaš cevovod DevOps podoben diagramu, prikazanemu na začetku te vadnice.
Dodatni koraki
Zabojniki
Kot sem rekel, lahko svoj strežnik gostite na virtualnem stroju ali strežniku, vendar so kontejnerji priljubljena rešitev.
Kaj so kontejnerji? Kratka razlaga je, da virtualni stroj potrebuje ogromno pomnilnika operacijskega sistema, ki presega velikost aplikacije, medtem ko vsebnik potrebuje le nekaj knjižnic in konfiguracij za izvajanje aplikacije. Očitno še vedno obstajajo pomembne uporabe za virtualni stroj, vendar je vsebnik lahka rešitev za gostovanje aplikacije, vključno z aplikacijskim strežnikom.
Čeprav obstajajo druge možnosti vsebnikov, sta najbolj priljubljena Docker in Kubernetes.
Docker: Apache 2.0
Kubernetes: Apache 2.0
Orodja za vmesno avtomatizacijo
Naš program DevOps je osredotočen predvsem na skupno ustvarjanje in uvajanje aplikacij, vendar je z orodji DevOps mogoče narediti še veliko drugih stvari. Eden od njih je uporaba orodij Infrastructure as Code (IaC), ki so znana tudi kot orodja za avtomatizacijo vmesne programske opreme. Ta orodja pomagajo avtomatizirati namestitev, upravljanje in druge naloge za vmesno programsko opremo. Tako lahko na primer orodje za avtomatizacijo ekstrahira aplikacije, kot so strežnik spletnih aplikacij, baza podatkov in orodje za spremljanje, s pravilnimi konfiguracijami in jih namesti na strežnik aplikacij.
Tukaj je nekaj odprtokodnih orodij za avtomatizacijo vmesne programske opreme:
Ansible: GNU Public
SaltStack: Apache 2.0
Kuhar: Apache 2.0
Lutka: Apache ali GPL
Poiščite podrobnosti o tem, kako pridobiti iskan poklic od začetka ali navzgor v smislu spretnosti in plače z obiskovanjem plačljivih spletnih tečajev SkillFactory: