Príručka pre začiatočníkov: Vytvorenie DevOps Pipeline

Ak ste novým používateľom DevOps, pozrite si tohto päťkrokového sprievodcu vytvorením prvého kanála.

Príručka pre začiatočníkov: Vytvorenie DevOps Pipeline

DevOps sa stal štandardným riešením na opravu pomalých, nesúvislých alebo nefunkčných procesov vývoja softvéru. Problém je v tom, že ak ste v DevOps noví a neviete, kde začať, možno vám chýba pochopenie týchto techník. Tento článok bude diskutovať o definícii kanála DevOps a tiež poskytne pokyny v piatich krokoch na jeho vytvorenie. Aj keď tento tutoriál nie je vyčerpávajúci, mal by vám poskytnúť základ na začatie vašej cesty a rozšírenie vašich vedomostí v budúcnosti. Začnime však históriou.

Moja cesta DevOps

Predtým som pracoval v cloudovom tíme Citi Group, ktorý vyvíjal webovú aplikáciu Infrastructure-as-a-Service (IaaS) na správu cloudovej infraštruktúry Citi, ale vždy ma zaujímalo, ako zefektívniť proces vývoja a priniesť pozitívnu kultúrnu zmenu. vývojový tím. Odpoveď som našiel v knihe odporúčanej Gregom Lavenderom, CTO Cloud Architecture and Infrastructure v Citi. Kniha sa volala The Phoenix Project (Projekt Phoenix), a vysvetľuje princípy DevOps, ale číta sa to ako román.

Tabuľka na konci knihy ukazuje, ako často rôzne spoločnosti nasadzujú svoje systémy v prostredí vydania:

Amazon: 23 000 za deň
Google: 5 500 za deň
Netflix: 500 za deň
Facebook: Raz denne
Twitter: 3-krát týždenne
Typická spoločnosť: Raz za 9 mesiacov

Ako sú vôbec možné frekvencie Amazon, Google a Netflix? Je to preto, že tieto spoločnosti prišli na to, ako vytvoriť takmer dokonalý kanál DevOps.

Boli sme od toho ďaleko, kým sme v Citi nezaviedli DevOps. Vtedy mal môj tím rôzne prostredia, ale nasadenie na vývojový server bolo úplne manuálne. Všetci vývojári mali prístup len k jednému vývojovému serveru založenému na IBM WebSphere Application Server Community Edition. Problém bol v tom, že server sa vypol vždy, keď sa viacero používateľov pokúsilo nasadiť súčasne, takže vývojári si museli navzájom oznámiť svoje zámery, čo bolo dosť bolestivé. Okrem toho sa vyskytli problémy s pokrytím testovacieho kódu nízkej úrovne, ťažkopádnymi procesmi manuálneho nasadenia a neschopnosťou sledovať nasadenie kódu spojeného s konkrétnou úlohou alebo príbehom používateľa.

Uvedomil som si, že treba niečo urobiť a našiel som si podobne zmýšľajúceho kolegu. Rozhodli sme sa spolupracovať na vybudovaní počiatočného kanála DevOps – nastavil virtuálny stroj Tomcat a aplikačný server, zatiaľ čo som pracoval na Jenkins, integroval Atlassian Jira a BitBucket a pracoval na pokrytí testovacím kódom. Tento vedľajší projekt bol veľmi úspešný: takmer úplne sme zautomatizovali mnohé procesy, dosiahli sme takmer 100% dostupnosť na našom vývojovom serveri, zabezpečili sledovanie a zlepšili testovacie pokrytie kódu a pridali možnosť prepojiť vetvy Git s problémami alebo nasadeniami Jira. Väčšina nástrojov, ktoré sme použili na vytvorenie nášho potrubia DevOps, bola open source.

Teraz chápem, aký jednoduchý bol náš kanál DevOps: nepoužívali sme rozšírenia ako súbory Jenkins alebo Ansible. Toto jednoduché potrubie však fungovalo dobre, možno vďaka Paretovmu princípu (známemu aj ako pravidlo 80/20).

Stručný úvod do DevOps a kanála CI/CD

Ak sa spýtate viacerých ľudí: „Čo je DevOps?“, pravdepodobne dostanete niekoľko rôznych odpovedí. DevOps, podobne ako Agile, sa vyvinul tak, aby zahŕňal mnoho rôznych disciplín, ale väčšina ľudí sa zhodne na niekoľkých veciach: DevOps je postup vývoja softvéru alebo životný cyklus vývoja softvéru (SDLC), ktorého ústrednou zásadou je zmena kultúry, v ktorej vývojári a vývojári existujú v prostredí, v ktorom:

Operácie, ktoré sa predtým vykonávali manuálne, boli automatizované;
Každý robí to, čo vie najlepšie;
Počet implementácií za určité časové obdobie sa zvyšuje; Priepustnosť sa zvyšuje;
Zvýšená flexibilita vývoja.

Aj keď mať správne softvérové ​​nástroje nie je jediná vec, ktorú potrebujete na vytvorenie prostredia DevOps, niektoré nástroje sú nevyhnutné. Kľúčovým nástrojom je nepretržitá integrácia a nepretržité nasadenie (CI/CD). V tomto kanáli majú prostredia rôzne fázy (napr. DEV, INT, TST, QA, UAT, STG, PROD), mnohé operácie sú automatizované a vývojári môžu písať vysokokvalitný kód, dosahovať agilitu vývoja a vysokú mieru nasadenia.

Tento článok popisuje päťkrokový prístup k vytvoreniu kanála DevOps, ako je ten, ktorý je znázornený na nasledujúcom diagrame, pomocou nástrojov s otvoreným zdrojom.

Krok 1: Metódy CI/CD

Prvá vec, ktorú potrebujete, je nástroj CI/CD. Jenkins, open source nástroj založený na Jave a licencovaný pod licenciou MIT, je nástroj, ktorý spopularizoval DevOps a stal sa de facto štandardom.

Čo je teda Jenkins? Predstavte si to ako nejaký magický univerzálny diaľkový ovládač, ktorý dokáže komunikovať a organizovať rôzne služby a nástroje. Samotný nástroj CI/CD ako Jenkins je zbytočný, ale stáva sa silnejším, keď sa pripája k rôznym nástrojom a službám.

Jenkins je len jedným z mnohých nástrojov CI/CD s otvoreným zdrojom, ktoré môžete použiť na vytvorenie kanála DevOps.

Jenkins: Creative Commons a MIT
Travis CI: MIT
Tempomat: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU

Takto vyzerajú procesy DevOps s nástrojom CI/CD:

Príručka pre začiatočníkov: Vytvorenie DevOps Pipeline

Na lokálnom hostiteľovi máte spustený nástroj CI/CD, ale momentálne toho veľa robiť nemôžete. Prejdime k ďalšej fáze cesty DevOps.

Krok 2: Správa systémov riadenia zdrojov

Najlepším (a možno najjednoduchším) spôsobom, ako si overiť, či váš nástroj CI/CD dokáže svoje čaro, je integrácia s nástrojom na kontrolu zdrojového kódu (SCM). Prečo potrebujete kontrolu zdroja? Povedzme, že vyvíjate aplikáciu. Kedykoľvek vytvárate aplikáciu, programujete a je jedno, či používate Java, Python, C++, Go, Ruby, JavaScript alebo ktorýkoľvek z miliónov programovacích jazykov. Kód, ktorý napíšete, sa nazýva zdrojový kód. Na začiatku, najmä keď pracujete sami, je pravdepodobne v poriadku umiestniť všetko do lokálneho adresára. Ale ako sa projekt zväčšuje a vy pozývate ďalších ľudí na spoluprácu, potrebujete spôsob, ako predchádzať konfliktom a zároveň efektívne zdieľať úpravy. Potrebujete tiež spôsob, ako obnoviť predchádzajúce verzie, pretože vytváranie záloh a kopírovanie/vkladanie do nich sa stáva zastaraným. Vy (a vaši spoluhráči) potrebujete niečo lepšie.

Tu sa kontrola zdrojového kódu stáva takmer nevyhnutnosťou. Tento nástroj ukladá váš kód do repozitárov, sleduje verzie a koordinuje prácu účastníkov projektu.

Aj keď existuje veľa nástrojov na kontrolu zdrojov, Git je štandardom a je to tak správne. Vrelo odporúčam používať Git, aj keď existujú aj iné možnosti open source, ak chcete.

Git: GPLv2 a LGPL v2.1
Subversion: Apache 2.0
Systém súbežných verzií (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

Takto vyzerá kanál DevOps s pridaním ovládacích prvkov zdrojového kódu.

Príručka pre začiatočníkov: Vytvorenie DevOps Pipeline

Nástroj CI/CD môže automatizovať procesy kontroly, získavania zdrojového kódu a spolupráce medzi členmi. Nie zlé? Ako ju však premeniť na fungujúcu aplikáciu, aby ju mohli využívať a oceniť miliardy ľudí?

Krok 3: Vytvorte nástroj Build Automation Tool

Skvelé! Môžete skontrolovať kód a vykonať zmeny v ovládaní zdroja a pozvať svojich priateľov, aby spolupracovali na vývoji. Ale ešte ste nevytvorili aplikáciu. Ak chcete vytvoriť webovú aplikáciu, musíte ju skompilovať a zabaliť do nasaditeľného dávkového formátu alebo spustiť ako spustiteľný súbor. (Upozorňujeme, že interpretovaný programovací jazyk ako JavaScript alebo PHP nie je potrebné kompilovať).

Použite nástroj na automatizáciu tvorby. Bez ohľadu na to, ktorý nástroj na automatizáciu zostavovania sa rozhodnete použiť, všetky majú rovnaký cieľ: zostaviť zdrojový kód do požadovaného formátu a automatizovať úlohu čistenia, kompilácie, testovania a nasadenia do špecifického prostredia. Nástroje na zostavovanie sa budú líšiť v závislosti od vášho programovacieho jazyka, ale tu sú niektoré bežné možnosti open source.

názov
Licencie
Programovací jazyk

Maven
Apache 2.0
Jáva

Mravec
Apache 2.0
Jáva

grádl
Apache 2.0
Jáva

Bazel
Apache 2.0
Jáva

Vyrobiť
GNU
N / A

zachrochtání
S
JavaScript

Dúšok
S
JavaScript

Staviteľ
apache
rubín

hrable
S
rubín

AAP
GNU
Pytón

SCons
S
Pytón

BitBake
GPLv2
Pytón

torta
S
C#

asdf
Expat (MIT)
LISP

kompletné
BSD
Haskell

Skvelé! Konfiguračné súbory nástroja na automatizáciu zostavovania môžete vložiť do systému riadenia zdroja a nechať nástroj CI/CD dať všetko dohromady.

Príručka pre začiatočníkov: Vytvorenie DevOps Pipeline

Všetko je v poriadku, nie? Kde však nasadiť svoju aplikáciu?

Krok 4: Webový aplikačný server

Zatiaľ máte zabalený súbor, ktorý môže byť spustiteľný alebo inštalovateľný. Aby bola akákoľvek aplikácia skutočne užitočná, musí poskytovať nejaký druh služby alebo rozhrania, ale na hosťovanie aplikácie potrebujete kontajner.

Webový aplikačný server je práve takým kontajnerom. Server poskytuje prostredie, v ktorom je možné definovať logiku nasadzovaného balíka. Server tiež poskytuje rozhranie a ponúka webové služby vystavením soketov vonkajšiemu svetu. Na jeho inštaláciu potrebujete server HTTP a tiež nejaké prostredie (napríklad virtuálny počítač). Zatiaľ predpokladajme, že sa o tom dozviete viac (aj keď kontajnerom sa budem venovať nižšie).

Existuje niekoľko open source webových aplikačných serverov.

názov
Licencie
Programovací jazyk

Kocúr
Apache 2.0
Jáva

mólo
Apache 2.0
Jáva

WildFly
Menšia verejnosť GNU
Jáva

GlassFish
CDDL & GNU Menej verejné
Jáva

Django
3-klauzula BSD
Pytón

Tornádo
Apache 2.0
Pytón

gunicorn
S
Pytón

Pytón
S
Pytón

Rails
S
rubín

Node.js
S
Javascript

Váš kanál DevOps je takmer pripravený na použitie. Dobrá práca!

Príručka pre začiatočníkov: Vytvorenie DevOps Pipeline

Aj keď sa tam môžete zastaviť a zvládnuť integráciu sami, kvalita kódu je dôležitá vec, o ktorú sa musí vývojár aplikácie starať.

Krok 5: Pokrytie testovania kódu

Implementácia testov môže byť ďalšou ťažkopádnou požiadavkou, ale vývojári musia včas zachytiť všetky chyby v aplikácii a zlepšiť kvalitu kódu, aby zabezpečili spokojnosť koncových používateľov. Našťastie existuje veľa open source nástrojov na testovanie vášho kódu a vytváranie odporúčaní na zlepšenie jeho kvality. Ešte lepšie je, že väčšina nástrojov CI/CD sa môže pripojiť k týmto nástrojom a automatizovať proces.

Testovanie kódu pozostáva z dvoch častí: rámcov testovania kódu, ktoré vám pomôžu písať a spúšťať testy, a nástrojov na návrhy, ktoré vám pomôžu zlepšiť kvalitu kódu.

Systémy na testovanie kódu

názov
Licencie
Programovací jazyk

JUnit
Eclipse Public License
Jáva

EasyMock
apache
Jáva

mockito
S
Jáva

PowerMock
Apache 2.0
Jáva

Pytest
S
Pytón

hypotéza
Mozilla
Pytón

tox
S
Pytón

Systémy odporúčaní na zlepšenie kódu

názov
Licencie
Programovací jazyk

Krytie
GNU
Jáva

CodeCover
Eclipse Public (EPL)
Jáva

Coverage.py
Apache 2.0
Pytón

Emma
Common Public License
Jáva

JaCoCo
Eclipse Public License
Jáva

hypotéza
Mozilla
Pytón

tox
S
Pytón

jazmín
S
JavaScript

Karma
S
JavaScript

moka
S
JavaScript

existuje
S
JavaScript

Všimnite si, že väčšina nástrojov a rámcov uvedených vyššie je napísaná pre Java, Python a JavaScript, pretože C++ a C# sú proprietárne programovacie jazyky ​​(hoci GCC je open source).

Teraz, keď ste implementovali nástroje testovacieho pokrytia, váš kanál DevOps by mal vyzerať podobne ako diagram zobrazený na začiatku tohto návodu.

Ďalšie kroky

kontajnery

Ako som povedal, svoj server môžete hostiť na virtuálnom počítači alebo serveri, ale kontajnery sú obľúbeným riešením.

Čo sú kontajnery? Krátke vysvetlenie je, že virtuálny stroj potrebuje obrovské množstvo pamäte operačného systému, ktoré presahuje veľkosť aplikácie, zatiaľ čo kontajner potrebuje na spustenie aplikácie len niekoľko knižníc a konfigurácií. Je zrejmé, že virtuálny počítač má stále dôležité využitie, ale kontajner je ľahké riešenie na hosťovanie aplikácie vrátane aplikačného servera.

Aj keď existujú ďalšie možnosti kontajnerov, najobľúbenejšie sú Docker a Kubernetes.

Docker: Apache 2.0
Kubernetes: Apache 2.0

Stredne pokročilé nástroje automatizácie

Náš kanál DevOps sa primárne zameriava na spoločné vytváranie a nasadzovanie aplikácií, ale s nástrojmi DevOps je možné robiť mnoho ďalších vecí. Jedným z nich je použitie nástrojov Infrastructure as Code (IaC), ktoré sú známe aj ako nástroje na automatizáciu middleware. Tieto nástroje pomáhajú automatizovať inštaláciu, správu a ďalšie úlohy pre middleware. Automatizačný nástroj teda môže napríklad extrahovať aplikácie ako webový aplikačný server, databázu a monitorovací nástroj so správnymi konfiguráciami a nasadiť ich na aplikačný server.

Tu je niekoľko nástrojov na automatizáciu midlvéru s otvoreným zdrojom:

Ansible: GNU Public
SaltStack: Apache 2.0
Šéfkuchár: Apache 2.0
Bábka: Apache alebo GPL

Príručka pre začiatočníkov: Vytvorenie DevOps Pipeline

Zistite podrobnosti o tom, ako získať žiadanú profesiu od nuly alebo Level Up, pokiaľ ide o zručnosti a plat, absolvovaním platených online kurzov od SkillFactory:

viac kurzov

užitočný

Zdroj: hab.com

Pridať komentár