Begyndervejledning: Opbygning af en DevOps-pipeline

Hvis du er ny til DevOps, så tag et kig på denne guide til at bygge din første fem-trins pipeline.

Begyndervejledning: Opbygning af en DevOps-pipeline

DevOps er blevet standardløsningen til at reparere langsomme, afbrudte eller ødelagte softwareudviklingsprocesser. Problemet er, at hvis du er ny til DevOps og ikke ved, hvor du skal starte, så mangler du måske forståelse for disse teknikker. Denne artikel vil fokusere på at definere en DevOps-pipeline og vil også tilbyde instruktioner om, hvordan man opretter den i fem trin. Selvom denne vejledning ikke er udtømmende, bør den give dig et grundlag for at komme i gang og udvide din viden i fremtiden. Men lad os starte med historien.

Min DevOps-rejse

Jeg har tidligere arbejdet for Citi Groups cloud-team med at udvikle en Infrastructure-as-a-Service (IaaS) webapplikation til at administrere Citis cloud-infrastruktur, men jeg har altid været interesseret i, hvordan man kan gøre udviklingsprocessen mere effektiv og bringe positiv kulturel forandring til udviklingsteamet. Jeg fandt svaret i en bog anbefalet af Greg Lavender, Citis CTO for Cloud Architecture and Infrastructure. Bogen hed "The Phoenix Project" (Phoenix-projektet) og forklarer DevOps-principperne, mens du læser som en roman.

Tabellen på bagsiden af ​​bogen viser, hvor ofte forskellige virksomheder implementerer deres systemer i et udgivelsesmiljø:

Amazon: 23 om dagen
Google: 5 pr. dag
Netflix: 500 pr. dag
Facebook: En gang om dagen
Twitter: 3 gange om ugen
Typisk virksomhed: En gang hver 9. måned

Hvordan er frekvenserne for Amazon, Google og Netflix overhovedet mulige? Dette skyldes, at disse virksomheder fandt ud af, hvordan man laver en næsten perfekt DevOps-pipeline.

Det var vi langt fra, før vi implementerede DevOps hos Citi. På det tidspunkt havde mit team forskellige miljøer, men udrulningen til udviklingsserveren var fuldstændig manuel. Alle udviklere havde kun adgang til én udviklingsserver baseret på IBM WebSphere Application Server Community Edition. Problemet var, at serveren ville lukke ned, når flere brugere forsøgte at implementere på samme tid, så udviklerne var nødt til at fortælle hinanden deres hensigter, hvilket var ret smertefuldt. Derudover var der problemer med kodetestdækning på lavt niveau, besværlige manuelle implementeringsprocesser og manglende evne til at spore implementeringen af ​​kode forbundet med en bestemt opgave eller brugerhistorie.

Jeg indså, at der skulle gøres noget, og jeg fandt en ligesindet kollega. Vi besluttede at samarbejde om at bygge den indledende DevOps-pipeline - han satte en Tomcat virtuel maskine og applikationsserver op, mens jeg arbejdede på Jenkins, integrerede Atlassian Jira og BitBucket og arbejdede med kodetestdækning. Dette sideprojekt var meget vellykket: vi automatiserede næsten fuldstændig mange processer, nåede næsten 100 % oppetid på vores udviklingsserver, sørgede for sporing og forbedret kodetestdækning og tilføjede muligheden for at linke filialer i Git til problemer i Jira eller implementering. De fleste af de værktøjer, vi brugte til at bygge vores DevOps-pipeline, var open source.

Nu forstår jeg, hvor enkel vores DevOps-pipeline var: vi brugte ikke udvidelser som Jenkins-filer eller Ansible. Denne simple pipeline fungerede dog godt, måske takket være Pareto-princippet (også kendt som 80/20-reglen).

En kort introduktion til DevOps og CI/CD-pipeline

Hvis du spørger nogle få personer "Hvad er DevOps?" vil du sandsynligvis få et par forskellige svar. DevOps har ligesom Agile udviklet sig til at omfatte mange forskellige discipliner, men de fleste vil være enige om et par ting: DevOps er en softwareudviklingspraksis eller softwareudviklingslivscyklus (SDLC), hvis centrale princip er at ændre den kultur, hvori udviklere og ikke-udviklere eksisterer i et miljø, hvor:

Automatiserede operationer, der tidligere blev udført manuelt;
Enhver gør det, han er bedst til;
Antallet af implementeringer i en vis periode stiger; Øget gennemløb;
Øget udviklingsfleksibilitet.

Selvom det ikke er det eneste, du behøver for at skabe et DevOps-miljø at have de rigtige softwareværktøjer, er nogle værktøjer essentielle. Nøgleværktøjet er kontinuerlig integration og kontinuerlig implementering (CI/CD). I denne pipeline har miljøer forskellige stadier (f.eks. DEV, INT, TST, QA, UAT, STG, PROD), mange operationer er automatiserede, og udviklere kan skrive kode af høj kvalitet, opnå agilitet i udvikling og høj implementeringsfrekvens.

Denne artikel beskriver en fem-trins tilgang til at bygge en DevOps-pipeline svarende til den, der er vist i det følgende diagram, ved hjælp af open source-værktøjer.

Trin 1: CI/CD-metoder

Det første du skal bruge er et CI/CD-værktøj. Jenkins, et open source-værktøj baseret på Java og licenseret under MIT-licensen, er det værktøj, der populariserede DevOps og blev de facto-standarden.

Så hvad er Jenkins? Tænk på det som en slags magisk universel fjernbetjening, der kan tale med og organisere forskellige tjenester og værktøjer. I sig selv er et CI/CD-værktøj som Jenkins ubrugeligt, men det bliver mere kraftfuldt, da det forbinder til forskellige værktøjer og tjenester.

Jenkins er blot et af mange open source CI/CD-værktøjer, som du kan bruge til at bygge din DevOps-pipeline.

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

Sådan ser DevOps-processer ud med et CI/CD-værktøj:

Begyndervejledning: Opbygning af en DevOps-pipeline

Du har et CI/CD-værktøj kørende på din lokale vært, men der er ikke meget du kan gøre i øjeblikket. Lad os gå videre til næste trin i vores DevOps-rejse.

Trin 2: Håndtering af kildekodekontrolsystemer

Den bedste (og muligvis nemmeste) måde at teste, at dit CI/CD-værktøj kan magi, er at integrere med et kildekodekontrolværktøj (SCM). Hvorfor har du brug for kildekontrol? Lad os sige, at du er ved at udvikle en applikation. Når du opretter en applikation, programmerer du, uanset om du bruger Java, Python, C++, Go, Ruby, JavaScript eller et hvilket som helst af en gazillion programmeringssprog. Den kode du skriver kaldes kildekode. I begyndelsen, især når du arbejder alene, er det sikkert fint at lægge alt i en lokal mappe. Men efterhånden som projektet bliver større, og du inviterer andre mennesker til at bidrage, har du brug for en måde at undgå konflikter på, mens du deler ændringer effektivt. Du har også brug for en måde at gendanne tidligere versioner på, fordi oprettelse af sikkerhedskopier og kopiering/indsættelse i dem allerede er forældet. Du (og dine holdkammerater) har brug for noget bedre.

Det er her kildekodekontrol bliver nærmest en nødvendighed. Dette værktøj opbevarer din kode i arkiver, holder styr på versioner og koordinerer projektdeltagernes arbejde.

Selvom der er mange kildekodekontrolværktøjer derude, er Git standarden, og det med rette. Jeg anbefaler stærkt at bruge Git, selvom der er andre open source-muligheder, hvis du vil.

Git: GPLv2 og LGPL v2.1
Subversion: Apache 2.0
Concurrent Versions System (CVS): GNU
Vesta: LGPL
Mercurial: GNU GPL v2+

Sådan ser en DevOps-pipeline ud med tilføjelsen af ​​kildekodekontroller.

Begyndervejledning: Opbygning af en DevOps-pipeline

Et CI/CD-værktøj kan automatisere processerne for verifikation, kildekodeanskaffelse og samarbejde mellem medlemmer. Ikke dårligt? Men hvordan gør man det til en fungerende applikation, så milliarder af mennesker kan bruge og værdsætte det?

Trin 3: Opret et Build Automation Tool

Store! Du kan tjekke koden og foretage ændringer i kildekodekontrolsystemet, samt invitere dine venner til at bidrage til udviklingen. Men du har ikke oprettet en applikation endnu. For at lave en webapplikation skal den kompileres og pakkes i et deployerbart pakkeformat eller køres som en eksekverbar fil. (Bemærk, at et fortolket programmeringssprog såsom JavaScript eller PHP ikke behøver at blive kompileret.)

Brug et byggeautomatiseringsværktøj. Uanset hvilket byggeautomatiseringsværktøj du vælger at bruge, deler de alle det samme mål: at bygge kildekode i et ønsket format og automatisere opgaven med at rense, kompilere, teste og implementere til et specifikt miljø. Byggeværktøjer vil variere afhængigt af dit programmeringssprog, men her er nogle almindelige open source-muligheder.

Navn
Licens
Programmeringssprog

Maven
Apache 2.0
Java

Ant
Apache 2.0
Java

Gradle
Apache 2.0
Java

Bazel
Apache 2.0
Java

Lave
GNU
N / A

Grunt
MIT
JavaScript

Gulp
MIT
JavaScript

Bygger
Apache
Rubin

Rive
MIT
Rubin

AAP
GNU
Python

SCons
MIT
Python

bitbake
GPLv2
Python

Kage
MIT
C#

asdf
Expat (MIT)
lisp

Cabal
BSD
Haskell

Store! Du kan sætte konfigurationsfilerne til byggeautomatiseringsværktøjet i kildestyring og lade dit CI/CD-værktøj sætte alt sammen.

Begyndervejledning: Opbygning af en DevOps-pipeline

Det er alt sammen godt, ikke? Men hvor skal du implementere din applikation?

Trin 4: Webapplikationsserver

Indtil videre har du en pakket fil, der enten kan eksekveres eller installeres. For at enhver applikation virkelig kan være nyttig, skal den give en form for service eller grænseflade, men du har brug for en container til at være vært for din applikation.

Webapplikationsserveren er netop sådan en container. Serveren giver et miljø, hvor logikken for den pakke, der implementeres, kan defineres. Serveren giver også en grænseflade og tilbyder webtjenester ved at åbne stikkontakter til omverdenen. Du skal bruge en HTTP-server samt et eller andet miljø (som en virtuel maskine) for at konfigurere den. Indtil videre, lad os antage, at du lærer mere om dette yderligere (selvom jeg vil dække beholdere nedenfor).

Der er flere open source webapplikationsservere.

Navn
Licens
Programmeringssprog

Tomcat
Apache 2.0
Java

Anløbsbro
Apache 2.0
Java

WildFly
GNU Lesser Public
Java

Glasfisk
CDDL & GNU Mindre offentligt
Java

Django
3-klausul BSD
Python

Tornado
Apache 2.0
Python

kanonhjørning
MIT
Python

Python
MIT
Python

Skinner
MIT
Rubin

node.js
MIT
Javascript

Din DevOps-pipeline er næsten klar til brug. Godt arbejde!

Begyndervejledning: Opbygning af en DevOps-pipeline

Selvom du kan stoppe der og selv udføre integrationen, er kodekvalitet en vigtig ting for en applikationsudvikler at bekymre sig om.

Trin 5: Kodetestdækning

Implementering af test kan være et andet besværligt krav, men udviklere skal fange eventuelle fejl i applikationen tidligt og forbedre kodekvaliteten for at sikre, at slutbrugerne er tilfredse. Heldigvis er der mange open source-værktøjer tilgængelige til at teste din kode og komme med anbefalinger til at forbedre dens kvalitet. Endnu bedre, de fleste CI/CD-værktøjer kan tilsluttes disse værktøjer og automatisere processen.

Kodetest kommer i to dele: Kodetestrammer, der hjælper dig med at skrive og køre test, og forslagsværktøjer, der hjælper med at forbedre kodekvaliteten.

Kode test systemer

Navn
Licens
Programmeringssprog

JUnit
Eclipse Public License
Java

Nem Mock
Apache
Java

mockito
MIT
Java

powermock
Apache 2.0
Java

Pytest
MIT
Python

Hypotese
Mozilla
Python

Tox
MIT
Python

Kodeforbedringsanbefalingssystemer

Navn
Licens
Programmeringssprog

Dækning
GNU
Java

kodecover
Eclipse Public (EPL)
Java

Coverage.py
Apache 2.0
Python

Emma
Fælles offentlig licens
Java

JaCoCo
Eclipse Public License
Java

Hypotese
Mozilla
Python

Tox
MIT
Python

Jasmine
MIT
JavaScript

Karma
MIT
JavaScript

mokka
MIT
JavaScript

der er
MIT
JavaScript

Bemærk, at de fleste af værktøjerne og rammerne nævnt ovenfor er skrevet til Java, Python og JavaScript, da C++ og C# er proprietære programmeringssprog (selvom GCC er open source).

Nu hvor du har implementeret kodedækningsværktøjer, bør din DevOps-pipeline ligne diagrammet vist i begyndelsen af ​​denne øvelse.

Yderligere trin

Containere

Som jeg sagde før, kan du hoste din server i en virtuel maskine eller server, men containere er en populær løsning.

Hvad er containere? Den korte forklaring er, at en virtuel maskine har brug for en enorm mængde operativsystemhukommelse, mere end størrelsen af ​​en applikation, mens en container kun behøver nogle få biblioteker og konfigurationer for at køre en applikation. Naturligvis er der stadig vigtige anvendelser for en virtuel maskine, men en container er en letvægtsløsning til at hoste en applikation, herunder en applikationsserver.

Mens der findes andre containermuligheder, er Docker og Kubernetes de mest populære.

Docker: Apache 2.0
Kubernetes: Apache 2.0

Mellemliggende automatiseringsværktøjer

Vores DevOps-pipeline er primært fokuseret på samskabelse og implementering af applikationer, men der er mange andre ting, du kan gøre med DevOps-værktøjer. En af disse er brugen af ​​Infrastructure as Code (IaC) værktøjer, som også er kendt som middleware automatiseringsværktøjer. Disse værktøjer hjælper med at automatisere installation, administration og andre opgaver til middleware. Så for eksempel kan et automatiseringsværktøj udtrække applikationer som en webapplikationsserver, en database og et overvågningsværktøj med de rigtige konfigurationer og implementere dem til en applikationsserver.

Her er nogle open source middleware automatiseringsværktøjer:

Ansible: GNU Public
SaltStack: Apache 2.0
Kok: Apache 2.0
Dukke: Apache eller GPL

Begyndervejledning: Opbygning af en DevOps-pipeline

Find ud af detaljerne om, hvordan du får et efterspurgt erhverv fra bunden eller Level Up med hensyn til færdigheder og løn ved at gennemføre SkillFactory betalte onlinekurser:

flere kurser

nyttig

Kilde: www.habr.com

Tilføj en kommentar