{"id":33504,"date":"2019-10-31T21:52:58","date_gmt":"2019-10-31T18:52:58","guid":{"rendered":"https:\/\/prohoster.info\/blog\/rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom\/"},"modified":"2019-10-31T21:52:58","modified_gmt":"2019-10-31T18:52:58","slug":"rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom","title":{"rendered":"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/2f9db2f057c4bcb3f2e57a484dd30c8c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Oprettelse af den f\u00f8rste DevOps-k\u00e6de p\u00e5 fem trin for begyndere.<\/em><\/p>\n<p><\/p>\n<p>DevOps er blevet en kur mod for langsomme, fragmenterede og andre problematiske udviklingsprocesser. Men der kr\u00e6ves minimale kendskaber til DevOps. Her vil der blive set p\u00e5 begreber som DevOps-k\u00e6den og hvordan man opretter den p\u00e5 fem trin. Dette er ikke en fuldst\u00e6ndig guide, men blot en 'skitse', som kan udvides. Lad os starte med historien.<\/p>\n<p><\/p>\n<h3 id=\"moe-znakomstvo-s-devops\">Mit m\u00f8de med DevOps<\/h3>\n<p><\/p>\n<p>Engang arbejdede jeg med skyer hos Citi Group og udviklede en IaaS-webapplikation til at administrere Citigroup's cloud-infrastruktur, men jeg har altid v\u00e6ret interesseret i, hvordan man kan optimere udviklingsk\u00e6den og forbedre kulturen blandt udviklerne. Greg Lavender, vores tekniske direkt\u00f8r for cloud-arkitektur og infrastruktur, anbefalede mig en bog <noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/dp\/B078Y98RG8\/\">Projekt \u00abF\u00f8niks\u00bb<\/a><\/noindex>. Den forklarer DevOps-principperne fantastisk og l\u00e6ses som en roman.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>I tabellen p\u00e5 bagsiden vises, hvor ofte virksomheder lancerer nye versioner:<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/bf\/1e\/2_\/bf1e2_l0g8wnb5nojb1n5ruwlsi.png\"><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/a723283e54f7614b6b92eab78509985d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Hvordan f\u00e5r Amazon, Google og Netflix tid til at lancere s\u00e5 meget? Svaret er enkelt: de har forst\u00e5et, hvordan man skaber en n\u00e6sten perfekt DevOps-k\u00e6de.<\/p>\n<p><\/p>\n<p>Hos Citi var det slet ikke s\u00e5dan, indtil vi skiftede til DevOps. Dengang havde mit team forskellige milj\u00f8er, men vi leverede til udviklingsserveren manuelt. Alle udviklere havde adgang til kun \u00e9n udviklingsserver baseret p\u00e5 IBM WebSphere Application Server Community Edition. N\u00e5r vi fors\u00f8gte at levere samtidig, 'h\u00e6vede' serveren, og vi m\u00e5tte hver gang 'smertefuldt' forhandle med hinanden. Derudover havde vi utilstr\u00e6kkelig testd\u00e6kning af koden, en besv\u00e6rlig manuel leveringsproces, og ingen m\u00e5de at spore kodeleverancen via en bestemt opgave eller kundekrav.<\/p>\n<p><\/p>\n<p>Det var klart, at der var behov for hurtigt at g\u00f8re noget, og jeg fandt en kollega, der t\u00e6nkte ligesom mig. Vi besluttede sammen at oprette den f\u00f8rste DevOps-k\u00e6de - han satte en virtuel maskine og Tomcat-applikationsserver op, mens jeg arbejdede med Jenkins, integration med Atlassian Jira og BitBucket samt testd\u00e6kningen af koden. Projektet var en succes: vi automatiserede helt udviklingsk\u00e6den, opn\u00e5ede n\u00e6sten 100% oppetid p\u00e5 udviklingsserveren, kunne spore og forbedre testd\u00e6kningen af koden, og Git-grenen kunne knyttes til leverancens og Jira-opgavens. Og n\u00e6sten alle de v\u00e6rkt\u00f8jer, som vi byggede DevOps-k\u00e6den med, var open source.<\/p>\n<p><\/p>\n<p>Faktisk var k\u00e6den forenklet, da vi ikke engang anvendte avancerede konfigurationer ved hj\u00e6lp af Jenkins eller Ansible. Men vi klarede det. M\u00e5ske er det et resultat af princippet <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Pareto_principle\">Pareto<\/a><\/noindex> (ogs\u00e5 kendt som 80\/20-reglen).<\/p>\n<p><\/p>\n<h3 id=\"kratkoe-opisanie-cepochki-devops-i-cicd\">Kort beskrivelse af DevOps og CI\/CD k\u00e6den<\/h3>\n<p><\/p>\n<p>Der er forskellige definitioner af DevOps. Ligesom Agile inkluderer DevOps forskellige discipliner. Men de fleste vil enige i f\u00f8lgende definition: DevOps er en metode eller livscyklus for softwareudvikling, hvis hovedprincip er at skabe en kultur, hvor udviklere og andre medarbejdere er \"p\u00e5 en b\u00f8lgel\u00e6ngde\", manuelt arbejde automatik er automatiseret, alle besk\u00e6ftiger sig med det, de er bedst til, leveringsfrekvensen stiger, produktiviteten \u00f8ges, fleksibiliteten forbedres.<\/p>\n<p><\/p>\n<p>Og selvom kun v\u00e6rkt\u00f8jer ikke er nok til at skabe et DevOps-milj\u00f8, er de uundg\u00e5elige. Det vigtigste er kontinuerlig integration og kontinuerlig levering (CI\/CD). I k\u00e6den er der forskellige trin for hvert milj\u00f8 (f.eks. DEV (udvikling), INT (integration), TST (test), QA (kvalitetskontrol), UAT (brugertest), STG (forberedelse), PROD (produktion)), manuelle opgaver er automatiserede, udviklere kan skrive kvalitetskode, levere den, og de kan nemt omstille sig.<\/p>\n<p><\/p>\n<p>Denne note beskriver, hvordan man i fem trin kan oprette en DevOps-k\u00e6de, som vist p\u00e5 billedet nedenfor, ved hj\u00e6lp af open source v\u00e6rkt\u00f8jer.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/da\/zq\/qo\/dazqqoyxn3vv-o6p9crpsm9m_eu.jpeg\"><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/da2a6d8ed039f0b8e1ea8e1ba562696d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Lad os komme til sagen.<\/p>\n<p><\/p>\n<h3 id=\"shag-1-platforma-cicd\">Trin 1: CI\/CD-platformen<\/h3>\n<p><\/p>\n<p>F\u00f8rst og fremmest har du brug for et CI\/CD v\u00e6rkt\u00f8j. Jenkins er et open source CI\/CD v\u00e6rkt\u00f8j skrevet i Java med MIT-licens, som satte gang i populariseringen af DevOps-bev\u00e6gelsen og som de facto er blevet standarden for CICD.<\/p>\n<p><\/p>\n<p>Hvad er Jenkins? Forestil dig, at du har en magisk kontrolpanel til forskellige tjenester og v\u00e6rkt\u00f8jer. Selve CI\/CD-v\u00e6rkt\u00f8jet, som Jenkins, er ubrugeligt, men sammen med forskellige v\u00e6rkt\u00f8jer og tjenester bliver det alm\u00e6gtigt.<\/p>\n<p><\/p>\n<p>Udover Jenkins findes der mange andre open source v\u00e6rkt\u00f8jer, v\u00e6lg hvilket som helst. <\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/fb\/ov\/dd\/fbovdd2kb_e8jkj1atm1ycuw3so.png\"><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/2bbe6af719b90da0eb0d367aae66d779.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>S\u00e5dan ser DevOps-processen ud med et CI\/CD-v\u00e6rkt\u00f8j.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/es\/-3\/dj\/es-3djmmligdmtcuvicigopzt8e.jpeg\"><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/2410013c9e6030596a59f3ed7ae3a7e7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Du har et CI\/CD v\u00e6rkt\u00f8j p\u00e5 localhost, men der er ikke meget at lave endnu. Lad os g\u00e5 videre til n\u00e6ste trin.<\/p>\n<p><\/p>\n<h3 id=\"shag-2-upravlenie-versiyami\">Trin 2: Versionsh\u00e5ndtering<\/h3>\n<p><\/p>\n<p>Den bedste (og muligvis den nemmeste) m\u00e5de at teste magien i CI\/CD-v\u00e6rkt\u00f8jet p\u00e5, er at integrere det med et versioneringsv\u00e6rkt\u00f8j (source control management, SCM). Hvorfor er versionering n\u00f8dvendig? Antag, at du laver en applikation. Du skriver den i Java, Python, C++, Go, Ruby, JavaScript eller et andet sprog. Det, du skriver, kaldes kildekode. I starten, is\u00e6r hvis du arbejder alene, kan du gemme alt i en lokal mappe. Men n\u00e5r projektet vokser, og flere personer tilslutter sig, har du brug for en m\u00e5de at dele \u00e6ndringer i koden, uden at der opst\u00e5r konflikter ved sammenfletninger af \u00e6ndringer. Og du skal ogs\u00e5 kunne gendanne tidligere versioner uden at bruge sikkerhedskopier og anvende copy-paste metoden p\u00e5 kodefiler.<\/p>\n<p><\/p>\n<p>Og her er SCM uundg\u00e5eligt. SCM gemmer koden i repositors, h\u00e5ndterer dens versioner og koordinerer den blandt udviklere.<\/p>\n<p><\/p>\n<p>Der findes mange SCM-v\u00e6rkt\u00f8jer, men de facto-standarden er fortjent blevet Git. Jeg anbefaler at bruge netop det, men der er ogs\u00e5 andre muligheder.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/37555a476c27f7066e5648b9e9e4d90b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Her ser pipelinen DevOps ud efter at have tilf\u00f8jet SCM.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/am\/4o\/39\/am4o39ooera5tweytt3uyh80wlu.jpeg\"><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/040819b00dc608a9131856dd6a7d4a19.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>CI\/CD-v\u00e6rkt\u00f8jet kan automatisere upload og download af kildekode og samarbejde i teamet. Ikke d\u00e5rligt? Men hvordan laver man nu en fungerende applikation, der elskes af milliarder af brugere?<\/p>\n<p><\/p>\n<h3 id=\"shag-3-instrument-avtomatizacii-sborki\">Trin 3: v\u00e6rkt\u00f8j til automatisering af bygning<\/h3>\n<p><\/p>\n<p>Alt g\u00e5r som det skal. Du kan uploade koden og registrere \u00e6ndringer i versioneringssystemet og invitere venner til at arbejde sammen med dig. Men du har stadig ikke nogen applikation. For at det skal blive en webapplikation, skal det kompileres og pakkes til distribution eller k\u00f8res som en eksekverbar fil. (Et fortolket programmeringssprog som JavaScript eller PHP beh\u00f8ver ikke at blive kompileret.)<\/p>\n<p><\/p>\n<p>Anvend v\u00e6rkt\u00f8jet til automatisering af bygning. Uanset hvilket v\u00e6rkt\u00f8j du v\u00e6lger, vil det samle koden i det n\u00f8dvendige format og automatisere reng\u00f8ring, kompilering, testning og distribution. Byggev\u00e6rkt\u00f8jer varierer afh\u00e6ngigt af sproget, men der anvendes normalt f\u00f8lgende \u00e5bne kilder.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/cc6e958a82ac0676429da6c48e66910f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fremragende! Nu inds\u00e6tter vi konfigurationsfilerne til automatiseringsv\u00e6rkt\u00f8jet i versioneringssystemet, s\u00e5 CI\/CD-v\u00e6rkt\u00f8jet kan samle dem.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/gl\/t1\/ii\/glt1ii73wdg2roq5fus-fzd0ury.jpeg\"><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/bba539d128425e7e3ddacdc6028d3604.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Det ser tilsyneladende fint ud. Men hvor skal vi nu udrulle det hele?<\/p>\n<p><\/p>\n<h3 id=\"shag-4-server-veb-prilozheniy\">Trin 4: webapplikationsserver<\/h3>\n<p><\/p>\n<p>S\u00e5, du har en pakket fil, som kan k\u00f8res eller implementeres. For at applikationen virkelig er nyttig, skal den have en slags service eller gr\u00e6nseflade, men du har brug for et sted at placere det hele.<\/p>\n<p><\/p>\n<p>Webapplikationen kan placeres p\u00e5 en applikationsserver. Applikationsserveren tilbyder et milj\u00f8, hvor den programmeringslogik, der er i pakken, kan udf\u00f8res, gr\u00e6nsefladen kan tegnes, og webtjenester kan \u00e5bnes via en socket. Du har brug for en HTTP-server og flere andre milj\u00f8er (en virtuel maskine, for eksempel), for at installere applikationsserveren. Lad os i mellemtiden forestille os, at du har styr p\u00e5 alt dette undervejs (selvom jeg senere vil fort\u00e6lle om containere).<\/p>\n<p><\/p>\n<p>Der er flere \u00e5bne applikationsservere.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/v7\/-q\/tq\/v7-qtqzlpp5nvxlqz1oshw4mw1i.png\"><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/7802afe041a9d56c20ddbe2885b5cf37.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>Vi har allerede f\u00e5et n\u00e6sten en fungerende DevOps-k\u00e6de. Godt arbejde!<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/lf\/wm\/rx\/lfwmrx3grlcbwb5s_olj33npn7o.jpeg\"><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/3d1e524b63fecebf4973cc34a40c160d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>I princippet kan vi stoppe her, du klarer resten selv, men det er ogs\u00e5 v\u00e6rd at tale om kodekvalitet.<\/p>\n<p><\/p>\n<h3 id=\"shag-5-testovoe-pokrytie\">Trin 5: Testd\u00e6kning<\/h3>\n<p><\/p>\n<p>Testning tager meget tid og kr\u00e6fter, men det er bedre at finde fejl og forbedre koden med det samme for at gl\u00e6de slutbrugerne. Til dette form\u00e5l findes der mange \u00e5bne v\u00e6rkt\u00f8jer, der ikke kun tester koden, men ogs\u00e5 giver forslag til, hvordan den kan forbedres. De fleste CI\/CD-v\u00e6rkt\u00f8jer kan integreres med disse v\u00e6rkt\u00f8jer og automatisere processen.<\/p>\n<p><\/p>\n<p>Testning er opdelt i to dele: testframeworks til at skrive og udf\u00f8re tests, og v\u00e6rkt\u00f8jer med forslag til at forbedre kodekvaliteten.<\/p>\n<p><\/p>\n<h3 id=\"freymvorki-testirovaniya\">Testframeworks<\/h3>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/cu\/4l\/pn\/cu4lpnpdqa7yd9f5zwsxrrlbylg.png\"><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/c17426a30a4f140be87489d2c8b0d0b9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>V\u00e6rkt\u00f8jer med kvalitetsforslag<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/ab\/g_\/oh\/abg_ohfxhtbprzhcicxos3jx4yg.png\"><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/bc65784b8bf5ccaaeef96a0c6ee4422e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>De fleste af disse v\u00e6rkt\u00f8jer og frameworks er skrevet til Java, Python og JavaScript, fordi C++ og C# er propriet\u00e6re (selvom GCC har \u00e5ben kildekode).<\/p>\n<p><\/p>\n<p>Vi har anvendt testd\u00e6kningsv\u00e6rkt\u00f8jerne, og nu b\u00f8r DevOps-pipelines se ud som i billedet i starten af vejledningen.<\/p>\n<p><\/p>\n<h2 id=\"dopolnitelnye-shagi\">Yderligere trin<\/h2>\n<p><\/p>\n<h3 id=\"konteynery\">Containere<\/h3>\n<p><\/p>\n<p>Som jeg allerede har n\u00e6vnt, kan applikationsserveren placeres p\u00e5 en virtuel maskine eller server, men containere er mere popul\u00e6re.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/resources\/what-are-linux-containers\">Hvad er containere<\/a><\/noindex>? \u0412\u043a\u0440\u0430\u0442\u0446\u0435, \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430, \u0447\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0431\u0435\u0437 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c, \u043d\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0431\u0435\u0437 \u043b\u0438\u0448\u043d\u0438\u0445 \u0437\u0430\u0442\u0440\u0430\u0442.<\/p>\n<p><\/p>\n<p>Til containere bruges normalt Docker og Kubernetes, selvom der ogs\u00e5 er andre muligheder.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/6n\/wc\/rc\/6nwcrcuhk9swwjxdddudr1cqpzc.png\"><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/8749b7044102ff7f23f2c970d6939246.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p><\/p>\n<p>L\u00e6s artikler om Docker og Kubernetes p\u00e5 <noindex><a rel=\"nofollow\" href=\"http:\/\/opensource.com\/\">Opensource.com<\/a><\/noindex>:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/resources\/what-docker\">Hvad er Docker?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/business\/15\/1\/introduction-docker\">Introduktion til Docker<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/resources\/what-is-kubernetes\">Hvad er Kubernetes?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/17\/11\/kubernetes-lightning-talk\">Kubernetes fra bunden<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"instrumenty-avtomatizacii-promezhutochnogo-po\">V\u00e6rkt\u00f8jer til automatisering af middleware<\/h3>\n<p><\/p>\n<p>Vores DevOps-k\u00e6de er fokuseret p\u00e5 samarbejdende opbygning og levering af applikationer, men med DevOps-v\u00e6rkt\u00f8jer kan man ogs\u00e5 g\u00f8re mange andre interessante ting. For eksempel kan man bruge v\u00e6rkt\u00f8jer til \"infrastruktur som kode\" (IaC), som ogs\u00e5 kaldes middleware-automatiseringsv\u00e6rkt\u00f8jer. Disse v\u00e6rkt\u00f8jer hj\u00e6lper med at automatisere installation, administration og andre opgaver for middleware. For eksempel kan et automatiseringsv\u00e6rkt\u00f8j tage applikationer (webapplikationsserver, database, overv\u00e5gningsv\u00e6rkt\u00f8jer) med de rette konfigurationer og implementere dem p\u00e5 applikationsserveren.<\/p>\n<p><\/p>\n<p>Her er nogle \u00e5bne v\u00e6rkt\u00f8jer til middleware-automatisering:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Guide til begyndere: Oprettelse af DevOps-k\u00e6der ved hj\u00e6lp af open source-v\u00e6rkt\u00f8jer\" src=\"\/wp-content\/uploads\/2019\/05\/23bb3259f336a3f0ebf11ab4aa5471ea.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L\u00e6s videre i artiklerne p\u00e5 <noindex><a rel=\"nofollow\" href=\"http:\/\/opensource.com\/\">Opensource.com<\/a><\/noindex>:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/19\/2\/quickstart-guide-ansible\">Guide til at komme i gang med Ansible<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/19\/1\/automating-deployment-strategies-ansible\">Strategier for automatisering af deployment med Ansible<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/18\/12\/configuration-management-tools\">5 bedste konfigurationsstyringsv\u00e6rkt\u00f8jer<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"i-chto-teper\">Og hvad nu?<\/h3>\n<p><\/p>\n<p>Dette er kun toppen af isbjerget. DevOps-k\u00e6den kan meget mere. Start med et CI\/CD-v\u00e6rkt\u00f8j og find ud af, hvad der ellers kan automatiseres for at g\u00f8re dit arbejde lettere. Glem ikke <noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/alternatives\/slack\">\u00e5bne kommunikationsv\u00e6rkt\u00f8jer<\/a><\/noindex> til effektivt samarbejde.<\/p>\n<p><\/p>\n<p>Her er nogle flere gode artikler om DevOps for begyndere:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/resources\/devops\">Hvad er DevOps<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/19\/2\/master-devops-engineer\">5 f\u00e6rdigheder for en DevOps-udvikler<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/18\/11\/how-non-engineer-got-devops\">DevOps til alle<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/19\/1\/getting-started-predictive-analytics-devops\">Introduktion til prediktiv analyse i DevOps<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<p>Man kan ogs\u00e5 integrere DevOps med \u00e5bne v\u00e6rkt\u00f8jer til agile:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/18\/10\/what-agile\">Hvad er agile?<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.com\/article\/19\/2\/steps-agile-developer\">4 trin til at mestre agile<\/a><\/noindex><\/li>\n<\/ul>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/southbridge\/blog\/451508\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 DevOps \u0437\u0430 \u043f\u044f\u0442\u044c \u0448\u0430\u0433\u043e\u0432 \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432. DevOps \u0441\u0442\u0430\u043b \u043f\u0430\u043d\u0430\u0446\u0435\u0435\u0439 \u0434\u043b\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445, \u0440\u0430\u0437\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041d\u043e \u043d\u0443\u0436\u043d\u044b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0437\u043d\u0430\u043d\u0438\u044f \u0432 DevOps. \u0417\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f, \u043a\u0430\u043a \u0446\u0435\u043f\u043e\u0447\u043a\u0430 DevOps \u0438 \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0435 \u0437\u0430 \u043f\u044f\u0442\u044c \u0448\u0430\u0433\u043e\u0432. \u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u201c\u0440\u044b\u0431\u0430\u201d, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0438\u0441\u0442\u043e\u0440\u0438\u0438. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":25204,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33504","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=\"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-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom\" \/>\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 \u0447\u0430\u0439\u043d\u0438\u043a\u043e\u0432: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u0435\u043a DevOps \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom\" \/>\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=\"2019-10-31T18:52:58+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:52:58+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\udd47Guide for begyndere: Oprettelse af DevOps-k\u00e6der med open source-v\u00e6rkt\u00f8jer | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom","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 \u0447\u0430\u0439\u043d\u0438\u043a\u043e\u0432: \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0446\u0435\u043f\u043e\u0447\u0435\u043a DevOps \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c | ProHoster","og:url":"https:\/\/prohoster.info\/da\/blog\/administrirovanie\/rukovodstvo-dlya-chajnikov-sozdanie-tsepochek-devops-s-pomoshhyu-instrumentov-s-otkrytym-ishodnym-kodom","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":"2019-10-31T18:52:58+00:00","article:modified_time":"2019-10-31T18:52:58+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33504","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":"2026-01-21 15:33:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:39:23","updated":"2026-01-21 15:33:19","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\/33504","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=33504"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/33504\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/25204"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=33504"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=33504"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=33504"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}