Om du Àr ny inom DevOps, ta en titt pÄ denna guide för att skapa din första pipeline i fem steg.

DevOps har blivit den standardlösning som Ă„tgĂ€rdar lĂ„ngsamma, isolerade eller defekta mjukvaruutvecklingsprocesser. Problemet Ă€r att om du Ă€r ny inom DevOps och inte vet var du ska börja kan det saknas en förstĂ„else för dessa metoder. I denna artikel kommer vi att definiera en DevOps-pipeline samt ge en guide för hur man skapar en i fem steg. Ăven om denna handledning inte Ă€r uttömmande, bör den ge dig en grund för att börja din resa och för att utöka dina kunskaper i framtiden. Men först, lĂ„t oss börja med historien.
Min resa inom DevOps
Tidigare arbetade jag i cloud-teamet pÄ Citi Group, dÀr jag utvecklade en Infrastructure-as-a-Service (IaaS) webbapplikation för att hantera Citis molninfrastruktur, men jag har alltid varit intresserad av hur man kan effektivisera utvecklingsprocessen och föra in positiva kulturella förÀndringar i utvecklarteamet. Svaret fann jag i en bok rekommenderad av Greg Lavender, teknisk direktör för Citis molnarkitektur och infrastruktur. Boken hette "The Phoenix Project" (), och den förklarar principerna för DevOps, samtidigt som den lÀses som en roman.
I tabellen pÄ baksidan av boken visas hur ofta olika företag distribuerar sina system i en release-miljö:
Amazon: 23 000 per dag
Google: 5 500 per dag
Netflix: 500 per dag
Facebook: En gÄng per dag
Twitter: Tre gÄnger i veckan
Typiskt företag: En gÄng var nio mÄnad
Hur Àr det ens möjligt för Amazon, Google och Netflix att ha sÄdana frekvenser? Det beror pÄ att dessa företag har kommit pÄ hur man kan skapa en nÀstan perfekt DevOps-pipeline.
Vi var lÄngt ifrÄn detta tills vi implementerade DevOps pÄ Citi. DÄ hade mitt team olika miljöer, men distributionen pÄ utvecklingsservern var helt manuell. Alla utvecklare hade endast tillgÄng till en utvecklingsserver baserad pÄ IBM WebSphere Application Server Community Edition. Problemet var att servern stÀngdes av varje gÄng flera anvÀndare försökte distribuera samtidigt, sÄ utvecklarna var tvungna att meddela varandra om sina avsikter, vilket var ganska smÀrtsamt. Dessutom fanns det problem med lÄg testtÀckning av koden, besvÀrliga processer för manuell distribution och bristen pÄ möjlighet att spÄra koddistribution kopplad till en specifik uppgift eller anvÀndarhistoria.
Jag insÄg att nÄgot behövde göras och hittade en kollega som tÀnkte som jag. Vi beslutade att samarbeta för att skapa den ursprungliga DevOps-pipelinen - han installerade en virtuell maskin och en Tomcat-applikationsserver medan jag arbetade med Jenkins, integrerade Atlassian Jira och BitBucket, samt arbetade med testtÀckning av koden. Det hÀr sidoprojektet var mycket framgÄngsrikt: vi automatiserade nÀstan helt mÄnga processer, nÄdde nÀra 100 % tillförlitlighet pÄ vÄr utvecklingsserver, sÀkerstÀllde spÄrbarhet och förbÀttrade testtÀckningen av koden, samt lade till möjligheten att koppla grenar i Git med uppgifter i Jira eller distribution. De flesta verktyg som vi anvÀnde för att bygga vÄr DevOps-pipeline hade öppen kÀllkod.
Nu förstÄr jag hur enkel vÄr DevOps-pipeline var: vi anvÀnde inte tillÀgg som Jenkins-filer eller Ansible. Denna enkla pipeline fungerade dock bra, kanske tack vare Paretoprincipen (Àven kÀnd som 80/20-regeln).
En kort introduktion till DevOps och CI/CD-pipelines
Om du frÄgar flera personer: "Vad Àr DevOps?", fÄr du förmodligen flera olika svar. DevOps, precis som Agile, har utvecklats för att omfatta mÄnga olika discipliner, men de flesta hÄller med om nÄgra saker: DevOps Àr en programvaruutvecklingspraxis eller livscykel för programvaruutveckling (SDLC), dÀr en central princip Àr att förÀndra kulturen dÀr utvecklare och icke-utvecklare existerar i en miljö dÀr:
Operationer som tidigare utfördes manuellt Àr automatiserade;
Alla gör det de Àr bÀst pÄ;
Antalet implementeringar under en viss tidsperiod ökar; Genomströmningen ökar;
Utvecklingsflexibiliteten ökar.
Ăven om rĂ€tt programvaruverktyg inte Ă€r det enda som krĂ€vs för att skapa en DevOps-miljö, Ă€r vissa verktyg nödvĂ€ndiga. Ett nyckelverktyg Ă€r kontinuerlig integration och kontinuerlig distribution (CI/CD). I denna pipeline har miljöerna olika faser (t.ex. DEV, INT, TST, QA, UAT, STG, PROD), mĂ„nga operationer Ă€r automatiserade, och utvecklare kan skriva högkvalitativ kod, uppnĂ„ utvecklingsflexibilitet och hög distributionsfrekvens.
I den hÀr artikeln beskrivs en femstegsmetod för att skapa en DevOps-pipeline liknande den som visas i följande diagram, med anvÀndning av verktyg med öppen kÀllkod.
Steg 1: CI/CD-metoder
Det första du behöver Àr ett verktyg för CI/CD. Jenkins, ett verktyg med öppen kÀllkod baserat pÄ Java och distribuerat under MIT-licensen, Àr det verktyg som har populariserat DevOps-riktningen och blivit de facto-standard.
Vad Àr dÄ Jenkins? TÀnk pÄ det som en slags magisk universalfjÀrrkontroll som kan kommunicera med olika tjÀnster och verktyg och organisera dem. SjÀlva CI/CD-verktyget, som Jenkins, Àr vÀrdelöst, men det blir mer kraftfullt nÀr det kopplas till olika verktyg och tjÀnster.
Jenkins Àr bara ett av mÄnga verktyg med öppen kÀllkod för CI/CD som du kan anvÀnda för att bygga DevOps-pipelines.
Jenkins: Creative Commons och MIT
Travis CI: MIT
CruiseControl: BSD
Buildbot: GPL
Apache Gump: Apache 2.0
Cabie: GNU
SÄ hÀr ser DevOps-processerna ut med CI/CD-verktyget:

Du har ett CI/CD-verktyg som körs pÄ din lokala vÀrd, men just nu kan du göra lite eller inget. LÄt oss gÄ vidare till nÀsta steg i resan in i DevOps-vÀrlden.
Steg 2: Hantering av versionskontrollsystem
Det bÀsta (och kanske enklaste) sÀttet att kontrollera att ditt CI/CD-verktyg kan göra magi Àr att integrera det med ett versionskontrollsystem (VCS). Varför behöver du kontroll över kÀllkoden? Anta att du utvecklar en applikation. Varje gÄng du bygger en applikation skriver du kod, oavsett om du anvÀnder Java, Python, C++, Go, Ruby, JavaScript eller nÄgon av de miljontals programmeringssprÄken. Koden du skriver kallas kÀllkod. I början, sÀrskilt nÀr du arbetar ensam, Àr det förmodligen okej att lagra allt i en lokal katalog. Men nÀr projektet vÀxer och du bjuder in andra att samarbeta, behöver du ett sÀtt att förhindra konflikter vid effektiv delning av modifieringar. Du behöver ocksÄ ett sÀtt att ÄterstÀlla tidigare versioner, eftersom att göra backuper och kopiera/klistra in dem redan Àr förÄldrat. Du (och dina teamkamrater) behöver nÄgot bÀttre.
HÀr blir ett versionskontrollsystem nÀstan en nödvÀndighet. Detta verktyg lagrar din kod i repositorier, hÄller reda pÄ versioner och koordinerar arbetet mellan projektets deltagare.
Ăven om det finns mĂ„nga versionskontrollsystem Ă€r Git standarden, och det Ă€r sant. Jag rekommenderar starkt att anvĂ€nda Git, Ă€ven om det finns andra alternativ som Ă€r öppen kĂ€llkod.
Git: GPLv2 och LGPL v2.1
Subversion: Apache 2.0
Concurrent Versions System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+
SÄ hÀr ser DevOps-pipelinen ut med tillÀgg av versionskontrollsystem.

CI/CD-verktyget kan automatisera processerna för testning, hÀmtning av kÀllkod och samarbetet mellan medlemmar. Inte illa? Men hur omvandlar man detta till en fungerande applikation som miljarder mÀnniskor kan anvÀnda och vÀrdera?
Steg 3: Skapa automatiseringsverktyget för byggprocessen
Bra! Du kan kontrollera koden och göra Àndringar i versionshanteringssystemet, samt bjuda in dina vÀnner att samarbeta i utvecklingen. Men du har Ànnu inte skapat en applikation. För att skapa ett webbprogram mÄste det kompileras och paketeras i ett distribuerbart format eller köras som en körbar fil. (Observera att tolkade programmeringssprÄk som JavaScript eller PHP inte behöver kompileras).
AnvÀnd automatiseringsverktyget för byggande. Oavsett vilket automatiseringsverktyg för byggande du vÀljer att anvÀnda, syftar de alla mot samma mÄl: att sammanstÀlla koden till ett önskat format och automatisera uppgifter som stÀdning, kompilering, testning och distribution i en viss miljö. Byggverktyg kan variera beroende pÄ ditt programmeringssprÄk, men hÀr Àr nÄgra vanliga open source-alternativ.
Namn
Licens
ProgrammeringssprÄk
Maven
Apache 2.0
Java
Ant
Apache 2.0
Java
Gradle
Apache 2.0
Java
Bazel
Apache 2.0
Java
Make
(Gnuâs Not Unix), som syftar till att utveckla systemkomponenter för att skapa ett fritt alternativ till Unix, vilket gör det möjligt att helt undvika proprietĂ€r programvara. Under GNU:s skydd har det skapats en gemenskap av fria projekt, som rör sig mot ett gemensamt mĂ„l och utvecklas i enlighet med en enad ideologi och filosofi. Initialt var de centrala delarna av projektet
N/A
Grunt
MIT
JavaScript
Gulp
MIT
JavaScript
Buildr
Apache
Ruby
Rake
MIT
Ruby
A-A-P
(Gnuâs Not Unix), som syftar till att utveckla systemkomponenter för att skapa ett fritt alternativ till Unix, vilket gör det möjligt att helt undvika proprietĂ€r programvara. Under GNU:s skydd har det skapats en gemenskap av fria projekt, som rör sig mot ett gemensamt mĂ„l och utvecklas i enlighet med en enad ideologi och filosofi. Initialt var de centrala delarna av projektet
Python
SCons
MIT
Python
BitBake
GPLv2
Python
Cake
MIT
C#
ASDF
Expat (MIT)
LISP
Cabal
BSD
Haskell
Bra! Du kan placera konfigurationsfilerna för automatiseringsverktyget i versionshanteringssystemet och lÄta ditt CI/CD-verktyg sÀtta ihop allt.

Allt ser bra ut, eller hur? Men var ska du distribuera din applikation?
Steg 4: Server för webbapplikationer
SÄ lÄngt har du en paketerad fil som kan vara antingen körbar eller installerbar. För att en applikation ska vara verkligt nyttig mÄste den erbjuda nÄgon form av tjÀnst eller grÀnssnitt, och du behöver en behÄllare för att hysa din applikation.
En server för webbapplikationer Àr just en sÄdan behÄllare. Servern tillhandahÄller en miljö dÀr logiken för den distribuerade paketet kan definieras. Den erbjuder ocksÄ ett grÀnssnitt och webb tjÀnster, vilket öppnar upp för externa kontakter. Du behöver en HTTP-server och ocksÄ en viss miljö (till exempel en virtuell maskin) för att installera den. Och för nu, lÄt oss anta att du fÄr veta mer om det senare (Àven om jag kommer att berÀtta om containrar nedan).
Det finns flera open source-servrar för webbapplikationer.
Namn
Licens
ProgrammeringssprÄk
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
Din DevOps-pipeline Àr nÀstan klar att anvÀnda. Bra jobbat!

Ăven om man kan stanna hĂ€r och integrera sjĂ€lv, Ă€r kodens kvalitet en viktig aspekt för applikationsutvecklare, och detta behöver uppmĂ€rksammas.
Steg 5: TĂ€ckning av kodtestning
Implementering av tester kan vara ett annat tungt krav, men utvecklare bör fĂ„nga alla fel i applikationen tidigt och förbĂ€ttra kodens kvalitet för att sĂ€kerstĂ€lla att slutanvĂ€ndarna kommer att vara nöjda. Lyckligtvis finns det mĂ„nga verktyg med öppen kĂ€llkod för att testa din kod och ge rekommendationer för att förbĂ€ttra dess kvalitet. Ănnu bĂ€ttre Ă€r att de flesta CI/CD-verktyg kan kopplas till dessa verktyg och automatisera processen.
Kodtestning bestÄr av tvÄ delar: testningsramverk som hjÀlper till att skriva och köra tester, samt verktyg för att generera förslag som hjÀlper till att förbÀttra kodens kvalitet.
Kodtestningssystem
Namn
Licens
ProgrammeringssprÄk
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
Rekommendationssystem för kodförbÀttring
Namn
Licens
ProgrammeringssprÄk
Cobertura
(Gnuâs Not Unix), som syftar till att utveckla systemkomponenter för att skapa ett fritt alternativ till Unix, vilket gör det möjligt att helt undvika proprietĂ€r programvara. Under GNU:s skydd har det skapats en gemenskap av fria projekt, som rör sig mot ett gemensamt mĂ„l och utvecklas i enlighet med en enad ideologi och filosofi. Initialt var de centrala delarna av projektet
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
Observera att de flesta verktyg och ramverk som nÀmns ovan Àr skrivna för Java, Python och JavaScript, medan C++ och C# Àr proprietÀra programmeringssprÄk (Àven om GCC har öppen kÀllkod).
Nu nÀr du har implementerat verktygen för kodtÀckning bör din DevOps-pipeline se ut som diagrammet som visas i början av denna guide.
Extra steg
Containrar
Som jag redan nÀmnt kan du hosta din server pÄ en virtuell maskin eller server, men containrar Àr en populÀr lösning.
Vad Àr containrar? En kort förklaring Àr att en virtuell maskin behöver en enorm mÀngd minne frÄn operativsystemet, vilket överstiger storleken pÄ applikationen, medan en container bara behöver nÄgra bibliotek och konfigurationer för att köra applikationen. Det Àr uppenbart att virtuella maskiner fortfarande har viktiga anvÀndningsomrÄden, men en container Àr en lÀtt lösning för att hosta applikationen, inklusive applikationsservrar.
Ăven om det finns andra alternativ för containrar, Ă€r de mest populĂ€ra Docker och Kubernetes.
Docker: Apache 2.0
Kubernetes: Apache 2.0
Mellanautomatiseringsverktyg
VÄr DevOps-pipeline Àr frÀmst inriktad pÄ samarbete för skapande och distribution av applikationer, men det finns mÄnga andra saker som kan göras med hjÀlp av DevOps-verktyg. En av dem Àr anvÀndningen av verktyg för Infrastruktur som Kod (IaC), som ocksÄ Àr kÀnda som mellanautomatiseringsmedel. Dessa verktyg hjÀlper till att automatisera installation, hantering och andra uppgifter för mellanprogramvara. Till exempel kan ett automatiseringsverktyg extrahera applikationer som webbapplikationsservrar, databaser och övervakningsverktyg, med rÀtt konfigurationer och distribuera dem pÄ applikationsservern.
HÀr Àr nÄgra mellanautomatiseringsverktyg med öppen kÀllkod:
Ansible: GNU Public
SaltStack: Apache 2.0
Chef: Apache 2.0
Puppet: Apache eller GPL

LÀr dig mer om hur du kan skaffa en eftertraktad yrkesroll frÄn grunden eller Level Up dina fÀrdigheter och din lön genom att ta betalda onlinekurser frÄn SkillFactory:
- (12 mÄnader)
fler kurser
- (12 veckor)
- (12 mÄnader)
- (9 mÄnader)
- (9 mÄnader)
Nyttigt
KĂ€lla: habr.com
