{"id":87467,"date":"2020-07-08T13:42:11","date_gmt":"2020-07-08T11:42:11","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn"},"modified":"2020-07-08T13:42:11","modified_gmt":"2020-07-08T11:42:11","slug":"rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","title":{"rendered":"Begynderguide: opret DevOps-pipeline","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Hvis du er ny inden for DevOps, s\u00e5 se denne vejledning til at oprette din f\u00f8rste pipeline i fem trin.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Begynderguide: opret DevOps-pipeline\" src=\"\/wp-content\/uploads\/2020\/07\/605ed7d81323d0b5e094f7f912f8c669.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>DevOps er blevet den standardl\u00f8sning til at rette langsomme, fragmenterede eller ikke-fungerende softwareudviklingsprocesser. Problemet er, at hvis du er ny inden for DevOps og ikke ved, hvor du skal starte, kan du mangle forst\u00e5else for disse metoder. I denne artikel vil vi definere DevOps-pipelinen og give en vejledning til at oprette den i fem trin. Selvom denne vejledning ikke er udt\u00f8mmende, b\u00f8r den give dig et fundament til at starte din rejse og udvide din viden i fremtiden. Men lad os begynde med historien.<\/p>\n<h3>Min rejse inden for DevOps<\/h3>\n<p>\nTidligere arbejdede jeg i Citi Groups cloud-team med at udvikle en Infrastructure-as-a-Service (IaaS) webapplikation til at styre Citi's cloud-infrastruktur, men jeg har altid v\u00e6ret interesseret i, hvordan man kan g\u00f8re udviklingsprocessen mere effektiv og bringe positive kulturforandringer til udviklingsteamet. Svaret fandt jeg i en bog, anbefalet af Greg Lavender, Citis tekniske direkt\u00f8r for cloud-arkitektur og -infrastruktur. Bogen hedder \"The Phoenix Project\" (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/dp\/B078Y98RG8\/\">The Phoenix Project<\/a><\/noindex>), og den forklarer DevOps-principper, mens den l\u00e6ses som en roman.<\/p>\n<p>I tabellen p\u00e5 bagsiden af bogen vises, hvor ofte forskellige virksomheder implementerer deres systemer i release-milj\u00f8er:<\/p>\n<p>Amazon: 23.000 om dagen<br \/>\nGoogle: 5.500 om dagen<br \/>\nNetflix: 500 om dagen<br \/>\nFacebook: \u00c9n gang om dagen<br \/>\nTwitter: 3 gange om ugen<br \/>\nTypisk virksomhed: \u00c9n gang hvert 9. m\u00e5ned<\/p>\n<p>Hvordan er det overhovedet muligt for Amazon, Google og Netflix at have s\u00e5 h\u00f8je frekvenser? Alt sammen fordi disse virksomheder har fundet ud af, hvordan man skaber n\u00e6sten den perfekte DevOps-pipeline.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nVi var langt fra det, indtil vi implementerede DevOps hos Citi. P\u00e5 det tidspunkt havde mit team forskellige milj\u00f8er, men implementeringen p\u00e5 udviklingsserveren var helt manuel. Alle udviklere havde kun adgang til \u00e9n udviklingsserver baseret p\u00e5 IBM WebSphere Application Server Community Edition. Problemet var, at serveren lukkede hver gang, flere brugere fors\u00f8gte at udf\u00f8re implementeringen samtidigt, hvilket bet\u00f8d, at udviklerne m\u00e5tte informere hinanden om deres hensigter, hvilket var ret besv\u00e6rligt. Desuden var der problemer med lavt testd\u00e6kning af koden, besv\u00e6rlige manuelle implementeringsprocesser og manglen p\u00e5 mulighed for at spore implementeringen af kode relateret til en bestemt opgave eller brugerhistorie.<\/p>\n<p>Jeg inds\u00e5, at vi var n\u00f8dt til at g\u00f8re noget, og jeg fandt en kollega med samme tanker. Vi besluttede at samarbejde om at skabe den oprindelige DevOps-pipeline \u2013 han satte en virtuel maskine og en Tomcat-applikationsserver op, mens jeg arbejdede p\u00e5 Jenkins, integrerede Atlassian Jira og BitBucket, samt arbejdede p\u00e5 testd\u00e6kning af koden. Dette sideprojekt var meget succesfuldt: vi n\u00e6sten helt automatiserede mange processer, n\u00e5ede praktisk talt 100% driftssikkerhed p\u00e5 vores udviklingsserver, sikrede sporing og forbedrede testd\u00e6kningen af koden samt tilf\u00f8jede muligheden for at knytte grene i Git til opgaver i Jira eller implementeringen. De fleste v\u00e6rkt\u00f8jer, vi brugte til at opbygge vores DevOps-pipeline, havde open source.<\/p>\n<p>Nu forst\u00e5r jeg, hvor simpelt vores DevOps-pipeline var: vi brugte ikke udvidelser som Jenkins-filer eller Ansible. Alligevel fungerede denne enkle pipeline godt, muligvis takket v\u00e6re Pareto-princippet (ogs\u00e5 kendt som 80\/20-reglen).<\/p>\n<h3>En kort introduktion til DevOps og CI\/CD pipeline<\/h3>\n<p>\nHvis du sp\u00f8rger flere personer: 'Hvad er DevOps?', f\u00e5r du sikkert flere forskellige svar. DevOps, ligesom Agile, har udviklet sig til at omfatte mange forskellige discipliner, men de fleste mennesker vil enige om nogle ting: DevOps er en praksis inden for softwareudvikling eller softwareudviklingslivscyklussen (SDLC), hvis centrale princip er at \u00e6ndre kulturen, hvor udviklere og ikke-udviklere eksisterer i et milj\u00f8, hvor:<\/p>\n<p>Driftsopgaver, der tidligere blev udf\u00f8rt manuelt, er automatiseret; <br \/>\nAlle g\u00f8r det, de g\u00f8r bedst;<br \/>\nAntallet af deployment i en bestemt tidsramme stiger; Igennemstr\u00f8mningen \u00f8ges; <br \/>\nUdviklingsfleksibiliteten forbedres.<\/p>\n<p>Selvom de rigtige softwarev\u00e6rkt\u00f8jer ikke er det eneste, der er n\u00f8dvendigt for at oprette et DevOps-milj\u00f8, er visse v\u00e6rkt\u00f8jer essentielle. Et n\u00f8glev\u00e6rkt\u00f8j er Continous Integration og Continuous Deployment (CI\/CD). I denne pipeline har milj\u00f8erne forskellige faser (f.eks. DEV, INT, TST, QA, UAT, STG, PROD), mange operationer er automatiseret, og udviklerne kan skrive kvalitetskoder, opn\u00e5 fleksibilitet i udviklingen og h\u00f8j deployeringsfrekvens.<\/p>\n<p>I denne artikel beskrives en fem-trins tilgang til oprettelse af en DevOps-pipeline, som den der er vist i det f\u00f8lgende diagram, ved hj\u00e6lp af open-source v\u00e6rkt\u00f8jer.<\/p>\n<h3>Trin 1: CI\/CD metoder<\/h3>\n<p>\nDet f\u00f8rste, du har brug for, er et v\u00e6rkt\u00f8j til CI\/CD. Jenkins, et open-source v\u00e6rkt\u00f8j baseret p\u00e5 Java og distribueret under MIT-licensen, er det middel, der populariserede DevOps-retningen og er blevet de facto-standarden.<\/p>\n<p>Hvad er Jenkins s\u00e5? T\u00e6skt det som en slags magisk universel fjernbetjening, der kan kommunikere med forskellige tjenester og v\u00e6rkt\u00f8jer og organisere dem. CI\/CD-v\u00e6rkt\u00f8jer som Jenkins er v\u00e6rdil\u00f8se i sig selv, men de bliver mere kraftfulde, n\u00e5r de forbindes til forskellige v\u00e6rkt\u00f8jer og tjenester.<\/p>\n<p>Jenkins er blot et af mange open-source v\u00e6rkt\u00f8jer til CI\/CD, som du kan bruge til at opbygge en DevOps-pipeline.<\/p>\n<p>Jenkins: Creative Commons og MIT<br \/>\nTravis CI: MIT<br \/>\nCruiseControl: BSD<br \/>\nBuildbot: GPL<br \/>\nApache Gump: Apache 2.0<br \/>\nCabie: GNU<\/p>\n<p>S\u00e5dan ser DevOps-processerne ud med et CI\/CD-v\u00e6rkt\u00f8j:<\/p>\n<p><img decoding=\"async\" alt=\"Begynderguide: opret DevOps-pipeline\" src=\"\/wp-content\/uploads\/2020\/07\/e937f3da170b24c53cb5d67a67a365bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Du har et CI\/CD-v\u00e6rkt\u00f8j, der k\u00f8rer p\u00e5 din localhost, men lige nu kan du ikke g\u00f8re meget med det. Lad os g\u00e5 videre til det n\u00e6ste trin i rejsen ind i DevOps-verdenen.<\/p>\n<h3>Trin 2: H\u00e5ndtering af versionskontrolsystemer<\/h3>\n<p>\nDen bedste (og muligvis nemmeste) m\u00e5de at teste, om dit CI\/CD-v\u00e6rkt\u00f8j kan udf\u00f8re magi p\u00e5, er at integrere det med et versionskontrolsystem (VCS). Hvorfor har du brug for versionskontrol? Antag, at du udvikler en applikation. Hver gang du bygger en applikation, programmerer du, og det er ligegyldigt, om du bruger Java, Python, C++, Go, Ruby, JavaScript eller en hvilken som helst af de mange programmeringssprog. Koden, du skriver, kaldes kildekode. I starten, is\u00e6r n\u00e5r du arbejder alene, kan du sandsynligvis placere alt i et lokalt bibliotek. Men n\u00e5r projektet vokser, og du inviterer andre til at samarbejde, har du brug for en m\u00e5de at undg\u00e5 konflikter ved effektivt at dele modifikationer. Du har ogs\u00e5 brug for en m\u00e5de at gendanne tidligere versioner p\u00e5, fordi sikkerhedskopiering og kopiering\/inds\u00e6tning i dem er for\u00e6ldet. Du (og dit team) har brug for noget bedre.<\/p>\n<p>Det er her, et versionskontrolv\u00e6rkt\u00f8j bliver n\u00e6rmest en n\u00f8dvendighed. Dette v\u00e6rkt\u00f8j gemmer din kode i repositories, holder styr p\u00e5 versioner og koordinerer arbejdet mellem projektets deltagere.<\/p>\n<p>Selvom der findes mange versionskontrolv\u00e6rkt\u00f8jer, er Git standarden, og det er sandt. Jeg anbefaler kraftigt at bruge Git, selvom der ogs\u00e5 er andre open source-muligheder, hvis du \u00f8nsker det.<\/p>\n<p>Git: GPLv2 og LGPL v2.1<br \/>\nSubversion: Apache 2.0<br \/>\nConcurrent Versions System (CVS): GNU<br \/>\nVesta: LGPL<br \/>\nMercurial: GNU GPL v2+<\/p>\n<p>S\u00e5dan ser et DevOps-pipeline ud med tilf\u00f8jelsen af versionskontrolv\u00e6rkt\u00f8jer.<\/p>\n<p><img decoding=\"async\" alt=\"Begynderguide: opret DevOps-pipeline\" src=\"\/wp-content\/uploads\/2020\/07\/47793d73d3b496aa38e027ff116f729d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Et CI\/CD-v\u00e6rkt\u00f8j kan automatisere processerne for kontrol, indhentning af kildekode og samarbejde mellem medlemmerne. Ikke d\u00e5rligt? Men hvordan g\u00f8r man dette til en fungerende applikation, s\u00e5 milliarder af mennesker kan bruge og v\u00e6rds\u00e6tte den?<\/p>\n<h3>Trin 3: Oprettelse af et automatiseringsv\u00e6rkt\u00f8j til bygning<\/h3>\n<p>\nFremragende! Du kan kontrollere koden og foretage \u00e6ndringer i versionskontrolsystemet samt invitere dine venner til at samarbejde om udviklingen. Men du har endnu ikke oprettet en applikation. For at lave et webapplikation skal det kompilere og pakkes i et deployerbart format eller k\u00f8res som en eksekverbar fil. (Bem\u00e6rk, at et fortolket programmeringssprog som JavaScript eller PHP ikke har brug for at blive kompileret).<\/p>\n<p>Brug automatiseringsv\u00e6rkt\u00f8jet til bygning. Uanset hvilket automatiseringsv\u00e6rkt\u00f8j til bygning du v\u00e6lger at bruge, har de alle det samme m\u00e5l: at samle kildekoden i et \u00f8nsket format og automatisere opgaven med reng\u00f8ring, kompilering, test og deployment i et bestemt milj\u00f8. Byggev\u00e6rkt\u00f8jer vil variere afh\u00e6ngigt af dit programmeringssprog, men her er nogle almindelige open source muligheder.<\/p>\n<p>Navn<br \/>\nLicens<br \/>\nProgrammeringssprog<\/p>\n<p>Maven<br \/>\nApache 2.0<br \/>\n Java<\/p>\n<p>Ant<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>Gradle<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>Bazel<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>Make<br \/>\nGNU<br \/>\nN\/A<\/p>\n<p>Grunt<br \/>\nMIT<br \/>\nJavaScript<\/p>\n<p>Gulp<br \/>\nMIT<br \/>\nJavaScript<\/p>\n<p>Buildr<br \/>\n\u00abRessourcen kan v\u00e6re s\u00e5rbar overfor DROWN, hvis dens n\u00f8gler bruges af en ekstern server med SSLv2, for eksempel en mailserver\u00bb, bem\u00e6rker lederen af udviklingsafdelingen<br \/>\nRuby<\/p>\n<p>Rake<br \/>\nMIT<br \/>\nRuby<\/p>\n<p>A-A-P<br \/>\nGNU<br \/>\nPython<\/p>\n<p>SCons<br \/>\nMIT<br \/>\nPython<\/p>\n<p>BitBake<br \/>\nGPLv2<br \/>\nPython<\/p>\n<p>Cake<br \/>\nMIT<br \/>\nC#<\/p>\n<p>ASDF<br \/>\nExpat (MIT)<br \/>\nLISP<\/p>\n<p>Cabal<br \/>\nBSD<br \/>\nHaskell<\/p>\n<p>Super! Du kan placere konfigurationsfilerne for dit automatiseringsv\u00e6rkt\u00f8j i versionskontrolsystemet og lade dit CI\/CD-v\u00e6rkt\u00f8j samle alt.<\/p>\n<p><img decoding=\"async\" alt=\"Begynderguide: opret DevOps-pipeline\" src=\"\/wp-content\/uploads\/2020\/07\/573d613914d278e738a0fc7f05644b62.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Alt er godt, ikke? Men hvor skal du implementere din applikation?<\/p>\n<h3>Trin 4: Server til webapplikationer<\/h3>\n<p>\nIndtil videre har du en pakket fil, der kan v\u00e6re enten eksekverbar eller installationsbar. For at enhver applikation kan v\u00e6re virkelig nyttig, skal den tilbyde en eller anden service eller interface, men du har brug for en container til at hoste din applikation.<\/p>\n<p>En server til webapplikationer fungerer som den container. Serveren leverer et milj\u00f8, hvor logikken for det implementerbare pakke kan defineres. Serveren tilbyder ogs\u00e5 et interface og tilbyder webtjenester ved at \u00e5bne sockets til den ydre verden. Du har brug for en HTTP-server samt et eller andet milj\u00f8 (som en virtuel maskine) til at installere den. Og indtil da, lad os antage, at du vil l\u00e6re om dette senere (selvom jeg vil tale om containere nedenfor).<\/p>\n<p>Der findes flere open source-servere til webapplikationer.<\/p>\n<p>Navn<br \/>\nLicens<br \/>\nProgrammeringssprog<\/p>\n<p>Tomcat<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>Jetty<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>WildFly<br \/>\nGNU Lesser Public<br \/>\nJava<\/p>\n<p>GlassFish<br \/>\nCDDL &amp; GNU Less Public<br \/>\nJava<\/p>\n<p>Django<br \/>\n3-Clause BSD<br \/>\nPython<\/p>\n<p>Tornado<br \/>\nApache 2.0<br \/>\nPython<\/p>\n<p>Gunicorn<br \/>\nMIT<br \/>\nPython<\/p>\n<p>Python<br \/>\nMIT<br \/>\nPython<\/p>\n<p>Rails<br \/>\nMIT<br \/>\nRuby<\/p>\n<p>Node.js<br \/>\nMIT<br \/>\nJavascript<\/p>\n<p>Din DevOps-pipeline er n\u00e6sten klar til brug. Godt arbejde!<\/p>\n<p><img decoding=\"async\" alt=\"Begynderguide: opret DevOps-pipeline\" src=\"\/wp-content\/uploads\/2020\/07\/9c314e8a42f154ded3b16ec7bdf01f99.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Selv om man kunne stoppe her og h\u00e5ndtere integrationen selv, er kodekvalitet en vigtig ting for applikationsudviklere, og det er noget, man skal tage sig af.<\/p>\n<h3>Trin 5: D\u00e6kning af testning af koden<\/h3>\n<p>\nImplementering af tests kan v\u00e6re et yderligere tungt krav, men udviklere skal fange eventuelle fejl i applikationen tidligt og forbedre kodekvaliteten for at sikre, at de endelige brugere er tilfredse. Heldigvis findes der mange open source-v\u00e6rkt\u00f8jer til at teste din kode og generere anbefalinger til forbedring af dens kvalitet. Endnu bedre er det, at de fleste CI\/CD-v\u00e6rkt\u00f8jer kan integreres med disse v\u00e6rkt\u00f8jer og automatisere processen.<\/p>\n<p>Testning af kode best\u00e5r af to dele: testframeworks, der hj\u00e6lper med at skrive og k\u00f8re tests, samt v\u00e6rkt\u00f8jer til generering af forslag, der hj\u00e6lper med at forbedre kodekvaliteten.<\/p>\n<p><b>Testningssystemer til kode<\/b><\/p>\n<p>Navn<br \/>\nLicens<br \/>\nProgrammeringssprog<\/p>\n<p>JUnit<br \/>\nEclipse Public License<br \/>\nJava<\/p>\n<p>EasyMock<br \/>\n\u00abRessourcen kan v\u00e6re s\u00e5rbar overfor DROWN, hvis dens n\u00f8gler bruges af en ekstern server med SSLv2, for eksempel en mailserver\u00bb, bem\u00e6rker lederen af udviklingsafdelingen<br \/>\nJava<\/p>\n<p>Mockito<br \/>\nMIT<br \/>\nJava<\/p>\n<p>PowerMock<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>Pytest<br \/>\n MIT<br \/>\nPython<\/p>\n<p>Hypothesis<br \/>\nMozilla<br \/>\nPython<\/p>\n<p>Tox<br \/>\nMIT<br \/>\nPython<\/p>\n<p><b>Forslagsystemer til forbedring af koden<\/b><\/p>\n<p>Navn<br \/>\nLicens<br \/>\nProgrammeringssprog<\/p>\n<p>Cobertura<br \/>\nGNU<br \/>\nJava<\/p>\n<p>CodeCover<br \/>\nEclipse Public (EPL)<br \/>\nJava<\/p>\n<p>Coverage.py<br \/>\n Apache 2.0<br \/>\nPython<\/p>\n<p>Emma<br \/>\nCommon Public License<br \/>\nJava<\/p>\n<p>JaCoCo<br \/>\n Eclipse Public License<br \/>\nJava<\/p>\n<p>Hypothesis<br \/>\n Mozilla<br \/>\nPython<\/p>\n<p>Tox<br \/>\nMIT<br \/>\nPython<\/p>\n<p>Jasmine<br \/>\nMIT<br \/>\nJavaScript<\/p>\n<p>Karma<br \/>\nMIT<br \/>\nJavaScript<\/p>\n<p>Mocha<br \/>\n MIT<br \/>\nJavaScript<\/p>\n<p>Jest<br \/>\nMIT<br \/>\nJavaScript<\/p>\n<p>V\u00e6r opm\u00e6rksom p\u00e5, at de fleste v\u00e6rkt\u00f8jer og frameworks n\u00e6vnt ovenfor er skrevet til Java, Python og JavaScript, da C++ og C# er propriet\u00e6re programmeringssprog (selvom GCC er open source).<\/p>\n<p>Nu hvor du har implementeret v\u00e6rkt\u00f8jerne til testd\u00e6kning af koden, skal din DevOps-pipeline se ud som diagrammet vist i begyndelsen af denne vejledning.<\/p>\n<h3>Yderligere trin<\/h3>\n<p>\n<b>Containere<\/b><\/p>\n<p>Som jeg n\u00e6vnte tidligere, kan du hoste din server p\u00e5 en virtuel maskine eller server, men containere er en popul\u00e6r l\u00f8sning.<\/p>\n<p>Hvad er containere? En kort forklaring er, at en virtuel maskine kr\u00e6ver et stort antal ressourcer fra operativsystemet, der overstiger st\u00f8rrelsen af applikationen, mens en container kun har brug for nogle f\u00e5 biblioteker og konfigurationer for at k\u00f8re applikationen. Det er tydeligt, at der stadig findes vigtige anvendelsesomr\u00e5der for virtuelle maskiner, men en container er en letv\u00e6gtsl\u00f8sning til hosting af applikationer, herunder applikationsservere.<\/p>\n<p>Selv om der findes andre containerl\u00f8sninger, er de mest popul\u00e6re Docker og Kubernetes.<\/p>\n<p>Docker: Apache 2.0<br \/>\nKubernetes: Apache 2.0<\/p>\n<p><b>Mellemsoftwareautomatiseringsv\u00e6rkt\u00f8jer<\/b><\/p>\n<p>Vores DevOps-pipeline er prim\u00e6rt fokuseret p\u00e5 samarbejdsskabende og implementering af applikationer, men der er mange andre ting, der kan g\u00f8res med DevOps-v\u00e6rkt\u00f8jer. En af dem er brugen af Infrastructure as Code (IaC) v\u00e6rkt\u00f8jer, som ogs\u00e5 kendes som mellemsoftwareautomatiseringsv\u00e6rkt\u00f8jer. Disse v\u00e6rkt\u00f8jer hj\u00e6lper med at automatisere installation, administration og andre opgaver for mellemsoftware. For eksempel kan et automatiseringsv\u00e6rkt\u00f8j hente applikationer som webapplikationsservere, databaser og overv\u00e5gningsv\u00e6rkt\u00f8jer med de rette konfigurationer og implementere dem p\u00e5 applikationsserveren.<\/p>\n<p>Her er nogle open source mellemsoftwareautomatiseringsv\u00e6rkt\u00f8jer:<\/p>\n<p>Ansible: GNU Public<br \/>\nSaltStack: Apache 2.0<br \/>\nChef: Apache 2.0<br \/>\nPuppet: Apache eller GPL<\/p>\n<p><img decoding=\"async\" alt=\"Begynderguide: opret DevOps-pipeline\" src=\"\/wp-content\/uploads\/2020\/07\/148ef7317ca5780b412241ddaec9dc76.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>F\u00e5 detaljer om, hvordan du kan f\u00e5 en eftertragtet profession fra bunden eller level up dine f\u00e6rdigheder og l\u00f8n ved at tage betalte onlinekurser fra SkillFactory:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/skillfactory.ru\/devops?utm_source=infopartners&amp;utm_medium=habr&amp;utm_campaign=DEVOPS&amp;utm_term=regular&amp;utm_content=07072002\">Kursus i DevOps<\/a><\/noindex> (12 m\u00e5neder)<\/li>\n<\/ul>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">yderligere kurser<\/b><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/skillfactory.ru\/ml-programma-machine-learning-online?utm_source=infopartners&amp;utm_medium=habr&amp;utm_campaign=ML&amp;utm_term=regular&amp;utm_content=07072002\">Kursus i Maskinl\u00e6ring<\/a><\/noindex> (12 uger)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/skillfactory.ru\/data-scientist?utm_source=infopartners&amp;utm_medium=habr&amp;utm_campaign=DST&amp;utm_term=regular&amp;utm_content=07072002\">Uddannelse i Data Science fra bunden<\/a><\/noindex> (12 m\u00e5neder)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/skillfactory.ru\/analytics?utm_source=infopartners&amp;utm_medium=habr&amp;utm_campaign=SDA&amp;utm_term=regular&amp;utm_content=07072002\">Profession som analytiker fra hvilken som helst startniveau<\/a><\/noindex> (9 m\u00e5neder)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/skillfactory.ru\/python-for-web-developers?utm_source=infopartners&amp;utm_medium=habr&amp;utm_campaign=PWS&amp;utm_term=regular&amp;utm_content=07072002\">Kursus \u00abPython til webudvikling\u00bb<\/a><\/noindex> (9 m\u00e5neder)<\/li>\n<\/ul>\n<p><\/p>\n<h3>Nyttigt<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/503196\/\">450 gratis kurser fra Ivy League<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/508450\/\">Trends inden for Data Science 2020<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/508556\/\">Data Science er d\u00f8d. L\u00e6nge leve Business Science<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/506790\/\">Data Science p\u00e5 steroider: introduktion til Decision Intelligence<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/503504\/\">Det mest succesfulde og mest skandal\u00f8se Data Science-projekt: Cambridge Analytica<\/a><\/noindex><\/li>\n<\/ul>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/509964\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 DevOps, \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0438\u0437 \u043f\u044f\u0442\u0438 \u044d\u0442\u0430\u043f\u043e\u0432. DevOps \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445, \u0440\u0430\u0437\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 DevOps \u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u0441 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c, \u0442\u043e \u0432\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0442\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0412 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87468,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87467","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 DevOps, \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0438\u0437 \u043f\u044f\u0442\u0438 \u044d\u0442\u0430\u043f\u043e\u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445: \u0441\u043e\u0437\u0434\u0430\u0435\u043c DevOps-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 DevOps, \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0438\u0437 \u043f\u044f\u0442\u0438 \u044d\u0442\u0430\u043f\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-08T11:42:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-08T11:42:11+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Begynderguide: Opret en DevOps-pipeline | ProHoster","description":"Hvis du er ny inden for DevOps, s\u00e5 se denne vejledning til at oprette din f\u00f8rste pipeline i fem trin.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445: \u0441\u043e\u0437\u0434\u0430\u0435\u043c DevOps-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d | ProHoster","og:description":"\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 DevOps, \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0438\u0437 \u043f\u044f\u0442\u0438 \u044d\u0442\u0430\u043f\u043e\u0432.","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-08T11:42:11+00:00","article:modified_time":"2020-07-08T11:42:11+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87467","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:50:31","updated":"2022-09-29 03:37:01","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/87467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=87467"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/87467\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/87468"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=87467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=87467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=87467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}