Aloittelijan opas: DevOps-putkilinjan luominen

Jos olet uusi DevOps-käyttäjä, tutustu tähän oppaaseen ensimmäisen viisivaiheisen putkilinjan rakentamiseksi.

Aloittelijan opas: DevOps-putkilinjan luominen

DevOpsista on tullut vakioratkaisu hitaiden, hajanaisten tai rikkinäisten ohjelmistokehitysprosessien korjaamiseen. Ongelmana on, että jos olet uusi DevOps-käyttäjä etkä tiedä mistä aloittaa, et ehkä ymmärrä näitä tekniikoita. Tässä artikkelissa käsitellään DevOps-putkilinjan määritelmää ja annetaan myös viisivaiheiset ohjeet sellaisen luomiseen. Vaikka tämä opetusohjelma ei ole tyhjentävä, sen pitäisi antaa sinulle perusta aloittaaksesi matkasi ja laajentaa tietämystäsi tulevaisuudessa. Mutta aloitetaan historiasta.

DevOps-matkani

Työskentelin aiemmin Citi Groupin pilvitiimissä kehittämässä Infrastructure-as-a-Service (IaaS) -verkkosovellusta Citin pilviinfrastruktuurin hallintaan, mutta olin aina kiinnostunut siitä, miten kehitysprosessia voitaisiin tehostaa ja tuoda positiivista kulttuurista muutosta kehitystiimi. Löysin vastauksen kirjasta, jota suosittelee Greg Lavender, Citin Cloud Architecture and Infrastructure -teknologiajohtaja. Kirjan nimi oli The Phoenix Project (Phoenix-projekti), ja se selittää DevOpsin periaatteet, mutta se on kuin romaani.

Kirjan takaosassa oleva taulukko näyttää, kuinka usein eri yritykset ottavat järjestelmiään käyttöön julkaisuympäristössä:

Amazon: 23 000 päivässä
Google: 5 500 per päivä
Netflix: 500 per päivä
Facebook: Kerran päivässä
Twitter: 3 kertaa viikossa
Tyypillinen yritys: Kerran 9 kuukauden välein

Miten Amazonin, Googlen ja Netflixin taajuudet ovat edes mahdollisia? Tämä johtuu siitä, että nämä yritykset ovat keksineet, kuinka luoda lähes täydellinen DevOps-putki.

Olimme kaukana tästä, kunnes otimme DevOpsin käyttöön Citissä. Tuolloin tiimilläni oli erilaisia ​​ympäristöjä, mutta käyttöönotto kehityspalvelimella oli täysin manuaalista. Kaikilla kehittäjillä oli pääsy vain yhteen IBM WebSphere Application Server Community Editioniin perustuvaan kehityspalvelimeen. Ongelmana oli, että palvelin sammui aina, kun useat käyttäjät yrittivät ottaa käyttöön samaan aikaan, joten kehittäjien piti viestiä aikeistaan ​​toisilleen, mikä oli melko tuskaa. Lisäksi ongelmia oli matalan tason testikoodin kattavuudessa, raskaissa manuaalisissa käyttöönottoprosesseissa ja kyvyttömyys seurata tiettyyn tehtävään tai käyttäjätarinaan liittyvän koodin käyttöönottoa.

Tajusin, että jotain oli tehtävä, ja löysin samanmielisen kollegan. Päätimme tehdä yhteistyötä alkuperäisen DevOps-putkilinjan rakentamisessa – hän perusti Tomcat-virtuaalikoneen ja sovelluspalvelimen, kun minä työskentelin Jenkinsin parissa, integroi Atlassian Jiran ja BitBucketin sekä työskenteli testikoodin kattavuuden parissa. Tämä sivuprojekti oli erittäin onnistunut: automatisoimme lähes täysin monet prosessit, saavutimme lähes 100 %:n käyttöajan kehityspalvelimellamme, tarjosimme koodin seurannan ja parannetun testikattavuuden ja lisäsimme mahdollisuuden linkittää Git-haaroja Jira-ongelmiin tai -asetuksiin. Suurin osa DevOps-putkistomme rakentamiseen käyttämistämme työkaluista oli avoimen lähdekoodin.

Nyt ymmärrän, kuinka yksinkertainen DevOps-putkistomme oli: emme käyttäneet laajennuksia, kuten Jenkins-tiedostoja tai Ansible. Tämä yksinkertainen putki toimi kuitenkin hyvin, ehkä johtuen Pareto-periaatteesta (tunnetaan myös nimellä 80/20-sääntö).

Lyhyt johdatus DevOpsiin ja CI/CD-putkilinjaan

Jos kysyt useilta ihmisiltä: "Mikä on DevOps?", saat todennäköisesti useita erilaisia ​​vastauksia. DevOps, kuten Agile, on kehittynyt kattamaan monia eri tieteenaloja, mutta useimmat ihmiset ovat samaa mieltä muutamasta asiasta: DevOps on ohjelmistokehityskäytäntö tai ohjelmistokehityksen elinkaari (SDLC), jonka keskeinen periaate on muuttaa kulttuuria, jossa kehittäjät ja muut kehittäjät ovat ympäristössä, jossa:

Aiemmin manuaalisesti suoritetut toiminnot on automatisoitu;
Jokainen tekee mitä osaa parhaiten;
Toteutusten määrä tietyn ajanjakson aikana kasvaa; Lisääntynyt suorituskyky;
Lisää kehitysjoustavuutta.

Vaikka oikeat ohjelmistotyökalut eivät ole ainoa asia, jonka tarvitset DevOps-ympäristön luomiseen, jotkin työkalut ovat välttämättömiä. Keskeinen työkalu on jatkuva integrointi ja jatkuva käyttöönotto (CI/CD). Tässä putkistossa ympäristöillä on eri vaiheita (esim. DEV, INT, TST, QA, UAT, STG, PROD), monet toiminnot ovat automatisoituja ja kehittäjät voivat kirjoittaa korkealaatuista koodia, saavuttaa kehitysketteryyden ja korkean käyttöönottotiheyden.

Tässä artikkelissa kuvataan viisivaiheinen lähestymistapa DevOps-putkilinjan luomiseen, kuten seuraavassa kaaviossa on esitetty avoimen lähdekoodin työkaluilla.

Vaihe 1: CI/CD-menetelmät

Ensimmäinen asia, jonka tarvitset, on CI/CD-työkalu. Jenkins, Java-pohjainen avoimen lähdekoodin työkalu, joka on lisensoitu MIT-lisenssillä, on työkalu, joka teki DevOpsin suosituksi ja siitä on tullut de facto standardi.

Joten mikä on Jenkins? Ajattele sitä jonkinlaisena maagisena yleiskaukosäätimenä, joka voi puhua ja järjestää erilaisia ​​palveluita ja työkaluja. Pelkästään Jenkinsin kaltainen CI/CD-työkalu on hyödytön, mutta siitä tulee tehokkaampi, kun se yhdistetään eri työkaluihin ja palveluihin.

Jenkins on vain yksi monista avoimen lähdekoodin CI/CD-työkaluista, joita voit käyttää DevOps-putkilinjasi rakentamiseen.

Jenkins: Creative Commons ja MIT
Travis CI: MIT
Vakionopeudensäädin: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU

Tältä DevOps-prosessit näyttävät CI/CD-työkalulla:

Aloittelijan opas: DevOps-putkilinjan luominen

Sinulla on CI/CD-työkalu käynnissä localhostissasi, mutta et voi tehdä paljoa tällä hetkellä. Siirrytään DevOps-matkan seuraavaan vaiheeseen.

Vaihe 2: Hallinnoi lähteen ohjausjärjestelmiä

Paras (ja ehkä helpoin) tapa varmistaa, että CI/CD-työkalusi voi tehdä taikansa, on integroida lähdekoodin ohjaustyökalu (SCM). Miksi tarvitset lähteen hallintaa? Oletetaan, että olet kehittämässä sovellusta. Aina kun luot sovelluksen, ohjelmoit, eikä sillä ole väliä, käytätkö Javaa, Pythonia, C++:aa, Goa, Rubyä, JavaScriptiä vai mitä tahansa lukuisista ohjelmointikielistä. Kirjoittamasi koodia kutsutaan lähdekoodiksi. Alussa, varsinkin kun työskentelet yksin, on luultavasti ok laittaa kaikki paikalliseen hakemistoon. Mutta kun projekti laajenee ja kutsut muita ihmisiä yhteistyöhön, tarvitset tavan estää konflikteja ja jakaa samalla tehokkaasti muutoksia. Tarvitset myös tavan palauttaa aiemmat versiot, koska varmuuskopioiden luominen ja niihin kopioiminen/liittäminen on vanhentumassa. Sinä (ja joukkuetoverisi) tarvitset jotain parempaa.

Tässä lähdekoodin hallinnasta tulee melkein välttämättömyys. Tämä työkalu tallentaa koodisi arkistoihin, pitää kirjaa versioista ja koordinoi projektiin osallistujien työtä.

Vaikka siellä on monia lähdekoodin ohjaustyökaluja, Git on standardi, ja oikeutetusti. Suosittelen Gitin käyttöä, vaikka on muitakin avoimen lähdekoodin vaihtoehtoja, jos haluat.

Git: GPLv2 ja LGPL v2.1
Subversion: Apache 2.0
Samanaikaisten versioiden järjestelmä (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

Tältä DevOps-putki näyttää lähdekoodiohjaimien lisättynä.

Aloittelijan opas: DevOps-putkilinjan luominen

CI/CD-työkalu voi automatisoida tarkistusprosesseja, lähdekoodin hankintaa ja yhteistyötä jäsenten välillä. Ei paha? Mutta miten se tehdään toimivaksi sovellukseksi, jotta miljardit ihmiset voivat käyttää ja arvostaa sitä?

Vaihe 3: Luo rakennusautomaatiotyökalu

Loistava! Voit tarkastella koodia ja tehdä muutoksia lähteen hallintaan ja kutsua ystäviäsi kehittämään yhteistyötä. Mutta et ole vielä luonut sovellusta. Verkkosovelluksen tekemiseksi se on käännettävä ja pakattava käyttöönotettavissa olevaan erämuotoon tai ajettava suoritettavana tiedostona. (Huomaa, että tulkittua ohjelmointikieltä, kuten JavaScript tai PHP, ei tarvitse kääntää).

Käytä rakennusautomaatiotyökalua. Riippumatta siitä, mitä rakennusautomaatiotyökalua päätät käyttää, niillä kaikilla on sama tavoite: rakentaa lähdekoodi johonkin haluttuun muotoon ja automatisoida puhdistus, kääntäminen, testaus ja käyttöönotto tietyssä ympäristössä. Rakennustyökalut vaihtelevat ohjelmointikielestäsi riippuen, mutta tässä on joitain yleisiä avoimen lähdekoodin vaihtoehtoja.

Nimi
lisenssi
Ohjelmointikieli

Maven
Apache 2.0
Jaava

Muurahainen
Apache 2.0
Jaava

Gradle
Apache 2.0
Jaava

Bazel
Apache 2.0
Jaava

Tehdä
GNU
N / A

Murahdus
MIT
JavaScript

Kulaus
MIT
JavaScript

Rakentaja
Apache
Rubiini

harava
MIT
Rubiini

AAP
GNU
Python

SCons
MIT
Python

bitbake
GPLv2
Python

Kakku
MIT
C#

ASDF
Expat (MIT)
LISP

täydellinen
BSD
Haskell

Loistava! Voit laittaa rakennusautomaatiotyökalun määritystiedostot lähdehallintaan ja antaa CI/CD-työkalusi koota kaiken.

Aloittelijan opas: DevOps-putkilinjan luominen

Kaikki on hyvin, eikö? Mutta missä otat sovelluksesi käyttöön?

Vaihe 4: Verkkosovelluspalvelin

Toistaiseksi sinulla on pakattu tiedosto, joka voi olla joko suoritettava tai asennettava. Jotta mikä tahansa sovellus olisi todella hyödyllinen, sen on tarjottava jonkinlainen palvelu tai käyttöliittymä, mutta tarvitset säilön sovelluksesi isännöintiä varten.

Verkkosovelluspalvelin on juuri tällainen säilö. Palvelin tarjoaa ympäristön, jossa käyttöön otettavan paketin logiikka voidaan määrittää. Palvelin tarjoaa myös käyttöliittymän ja tarjoaa verkkopalveluita paljastamalla pistorasiat ulkomaailmalle. Tarvitset HTTP-palvelimen sekä jonkin ympäristön (kuten virtuaalikoneen) sen asentamiseen. Oletetaan toistaiseksi, että opit tästä lisää (vaikka käsittelen säiliöitä alla).

On olemassa useita avoimen lähdekoodin verkkosovelluspalvelimia.

Nimi
lisenssi
Ohjelmointikieli

kollikissa
Apache 2.0
Jaava

aallonmurtaja
Apache 2.0
Jaava

wildfly
GNU Lesser Public
Jaava

GlassFish
CDDL & GNU vähemmän julkinen
Jaava

Django
3-lauseke BSD
Python

Tornado
Apache 2.0
Python

Gunicorn
MIT
Python

Python
MIT
Python

Raiteet
MIT
Rubiini

Node.js
MIT
Javascript

DevOps-putkisi on melkein käyttövalmis. Hyvää työtä!

Aloittelijan opas: DevOps-putkilinjan luominen

Vaikka voit pysähtyä tähän ja hoitaa integroinnin itse, koodin laatu on tärkeä asia, josta sovelluskehittäjän on huolehdittava.

Vaihe 5: Kooditestauksen kattavuus

Testien toteuttaminen voi olla toinen hankala vaatimus, mutta kehittäjien on löydettävä sovelluksen virheet ajoissa ja parannettava koodin laatua varmistaakseen, että loppukäyttäjät ovat tyytyväisiä. Onneksi on olemassa monia avoimen lähdekoodin työkaluja koodin testaamiseen ja suositusten tekemiseen sen laadun parantamiseksi. Vielä parempaa on, että useimmat CI/CD-työkalut voivat muodostaa yhteyden näihin työkaluihin ja automatisoida prosessin.

Kooditestaus koostuu kahdesta osasta: koodin testauskehykset, jotka auttavat sinua kirjoittamaan ja suorittamaan testejä, ja ehdotustyökalut, jotka auttavat parantamaan koodin laatua.

Koodin testausjärjestelmät

Nimi
lisenssi
Ohjelmointikieli

JUnit
Eclipse julkinen lisenssi
Jaava

EasyMock
Apache
Jaava

mockito
MIT
Jaava

PowerMock
Apache 2.0
Jaava

Pytest
MIT
Python

Hypoteesi
mozilla
Python

Tox
MIT
Python

Suositusjärjestelmät koodin parantamiseksi

Nimi
lisenssi
Ohjelmointikieli

Kattavuus
GNU
Jaava

CodeCover
Eclipse Public (EPL)
Jaava

Coverage.py
Apache 2.0
Python

Emma
Yhteinen julkinen lisenssi
Jaava

JaCoCo
Eclipse julkinen lisenssi
Jaava

Hypoteesi
mozilla
Python

Tox
MIT
Python

Jasmiini
MIT
JavaScript

Karma
MIT
JavaScript

mokkakahvi
MIT
JavaScript

on
MIT
JavaScript

Huomaa, että suurin osa yllä mainituista työkaluista ja kehyksistä on kirjoitettu Javalle, Pythonille ja JavaScriptille, koska C++ ja C# ovat patentoituja ohjelmointikieliä (vaikka GCC on avoimen lähdekoodin kieli).

Nyt kun olet ottanut käyttöön testikattavuustyökalut, DevOps-putkilinjasi pitäisi näyttää samanlaiselta kuin tämän opetusohjelman alussa näkyvä kaavio.

Lisävaiheet

kontit

Kuten sanoin, voit isännöidä palvelintasi virtuaalikoneella tai palvelimella, mutta säiliöt ovat suosittu ratkaisu.

Mitä ovat kontit? Lyhyt selitys on, että virtuaalikone tarvitsee valtavan määrän käyttöjärjestelmämuistia, joka ylittää sovelluksen koon, kun taas kontti tarvitsee vain muutaman kirjaston ja kokoonpanon sovelluksen suorittamiseen. On selvää, että virtuaalikoneen on edelleen tärkeitä käyttötarkoituksia, mutta kontti on kevyt ratkaisu sovelluksen, mukaan lukien sovelluspalvelimen, isännöintiin.

Vaikka muitakin konttivaihtoehtoja on, suosituimmat ovat Docker ja Kubernetes.

Docker: Apache 2.0
Kubernetes: Apache 2.0

Keskitason automaatiotyökalut

DevOps-putkistomme keskittyy ensisijaisesti yhteiskäyttöön sovellusten luomiseen ja käyttöönottoon, mutta DevOps-työkaluilla voidaan tehdä monia muita asioita. Yksi niistä on Infrastructure as Code (IaC) -työkalujen käyttö, jotka tunnetaan myös väliohjelmiston automaatiotyökaluina. Nämä työkalut auttavat automatisoimaan väliohjelmiston asennuksen, hallinnan ja muut tehtävät. Joten esimerkiksi automaatiotyökalu voi poimia sovelluksia, kuten verkkosovelluspalvelimen, tietokannan ja valvontatyökalun oikeilla kokoonpanoilla, ja ottaa ne käyttöön sovelluspalvelimelle.

Tässä on joitain avoimen lähdekoodin väliohjelmiston automatisointityökaluja:

Mahdollisuus: GNU Public
SaltStack: Apache 2.0
Kokki: Apache 2.0
Nukke: Apache tai GPL

Aloittelijan opas: DevOps-putkilinjan luominen

Ota selvää kuinka saada haluttu ammatti tyhjästä tai Level Up taitojen ja palkan suhteen suorittamalla SkillFactoryn maksullisia verkkokursseja:

lisää kursseja

hyödyllinen

Lähde: will.com

Lisää kommentti