{"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\/pl\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","title":{"rendered":"Przewodnik dla pocz\u0105tkuj\u0105cych: tworzenie potoku DevOps","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Je\u015bli jeste\u015b nowicjuszem w DevOps, zapoznaj si\u0119 z tym przewodnikiem po tworzeniu swojego pierwszego pi\u0119cioetapowego procesu.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Przewodnik dla pocz\u0105tkuj\u0105cych: tworzenie potoku DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/605ed7d81323d0b5e094f7f912f8c669.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>DevOps sta\u0142 si\u0119 standardowym rozwi\u0105zaniem dla naprawy wolnych, rozproszonych lub nieefektywnych proces\u00f3w rozwoju oprogramowania. Problem w tym, \u017ce je\u015bli jeste\u015b nowy w DevOps i nie wiesz, od czego zacz\u0105\u0107, mo\u017cesz nie mie\u0107 pe\u0142nego zrozumienia tych metod. W tym artykule om\u00f3wimy, czym jest pipeline DevOps oraz przedstawimy instrukcj\u0119 jego stworzenia w pi\u0119ciu krokach. Cho\u0107 ten poradnik nie jest wyczerpuj\u0105cy, ma on na celu zapewnienie podstaw do rozpocz\u0119cia twojej drogi oraz dalszego zg\u0142\u0119biania tej tematyki. Zacznijmy jednak od historii.<\/p>\n<h3>Moja podr\u00f3\u017c z DevOps<\/h3>\n<p>\nDawniej pracowa\u0142em w zespole chmurowym Citi Group, rozwijaj\u0105c aplikacj\u0119 webow\u0105 Infrastructure-as-a-Service (IaaS) do zarz\u0105dzania infrastruktur\u0105 chmurow\u0105 Citi, ale zawsze interesowa\u0142o mnie, jak uczyni\u0107 proces rozwoju bardziej efektywnym oraz wprowadzi\u0107 pozytywne zmiany kulturowe w zespole programist\u00f3w. Odpowied\u017a znalaz\u0142em w ksi\u0105\u017cce polecanej przez Grega Lavender, dyrektora technicznego Citi ds. architektury chmurowej i infrastruktury. Ksi\u0105\u017cka nosi\u0142a tytu\u0142 \u201eProjekt Feniks\u201d (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/dp\/B078Y98RG8\/\">The Phoenix Project<\/a><\/noindex>), kt\u00f3ra wyja\u015bnia zasady DevOps, a czyta si\u0119 j\u0105 jak powie\u015b\u0107.<\/p>\n<p>W tabeli na odwrocie ksi\u0105\u017cki pokazano, jak cz\u0119sto r\u00f3\u017cne firmy wdra\u017caj\u0105 swoje systemy w \u015brodowisku produkcyjnym:<\/p>\n<p>Amazon: 23 000 dziennie<br \/>\nGoogle: 5 500 dziennie<br \/>\nNetflix: 500 dziennie<br \/>\nFacebook: raz dziennie<br \/>\nTwitter: 3 razy w tygodniu<br \/>\nTypowa firma: raz na 9 miesi\u0119cy<\/p>\n<p>Jak w og\u00f3le mo\u017cliwe s\u0105 takie cz\u0119stotliwo\u015bci w Amazonie, Google i Netflixie? Wszystko dlatego, \u017ce te firmy wymy\u015bli\u0142y, jak stworzy\u0107 niemal idealny pipeline DevOps.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nByli\u015bmy daleko od tego, a\u017c do momentu, gdy wprowadzili\u015bmy DevOps w Citi. Wtedy w moim zespole by\u0142y r\u00f3\u017cne \u015brodowiska, ale wdro\u017cenie na serwerze deweloperskim by\u0142o ca\u0142kowicie r\u0119czne. Wszyscy programi\u015bci mieli dost\u0119p tylko do jednego serwera deweloperskiego opartego na IBM WebSphere Application Server Community Edition. Problem polega\u0142 na tym, \u017ce serwer wy\u0142\u0105cza\u0142 si\u0119 za ka\u017cdym razem, gdy kilku u\u017cytkownik\u00f3w pr\u00f3bowa\u0142o jednocze\u015bnie przeprowadzi\u0107 wdro\u017cenie, wi\u0119c programi\u015bci musieli informowa\u0107 si\u0119 nawzajem o swoich zamiarach, co by\u0142o do\u015b\u0107 bolesne. Ponadto wyst\u0119powa\u0142y problemy z niskim pokryciem testowym kodu, ci\u0119\u017ckimi procesami r\u0119cznego wdro\u017cenia i brakiem mo\u017cliwo\u015bci \u015bledzenia wdro\u017cenia kodu zwi\u0105zanego z okre\u015blonym zadaniem lub histori\u0105 u\u017cytkownika.<\/p>\n<p>Zrozumia\u0142em, \u017ce trzeba co\u015b zrobi\u0107, i znalaz\u0142em koleg\u0119 z podobnymi pogl\u0105dami. Postanowili\u015bmy wsp\u00f3\u0142pracowa\u0107 przy tworzeniu pocz\u0105tkowego konwejera DevOps \u2013 on zainstalowa\u0142 maszyn\u0119 wirtualn\u0105 i serwer aplikacji Tomcat, podczas gdy ja pracowa\u0142em nad Jenkins, integruj\u0105c Atlassian Jira i BitBucket, a tak\u017ce zajmuj\u0105c si\u0119 pokryciem testowym kodu. Ten projekt poboczny okaza\u0142 si\u0119 bardzo udany: prawie ca\u0142kowicie zautomatyzowali\u015bmy wiele proces\u00f3w, osi\u0105gn\u0119li\u015bmy niemal 100% funkcjonalno\u015bci naszego serwera deweloperskiego, zapewnili\u015bmy \u015bledzenie oraz poprawili\u015bmy pokrycie testowe kodu, a tak\u017ce dodali\u015bmy mo\u017cliwo\u015b\u0107 \u0142\u0105czenia ga\u0142\u0119zi w Git z zadaniami w Jira lub z wdro\u017ceniami. Wi\u0119kszo\u015b\u0107 narz\u0119dzi, kt\u00f3re u\u017cywali\u015bmy do budowy naszego konwejera DevOps, mia\u0142a otwarty kod \u017ar\u00f3d\u0142owy.<\/p>\n<p>Teraz rozumiem, jak prosty by\u0142 nasz pipeline DevOps: nie u\u017cywali\u015bmy rozszerze\u0144 takich jak pliki Jenkins czy Ansible. Jednak ten prosty konwejer dzia\u0142a\u0142 dobrze, by\u0107 mo\u017ce dzi\u0119ki zasadzie Pareto (znanej r\u00f3wnie\u017c jako zasada 80\/20).<\/p>\n<h3>Kr\u00f3tkie wprowadzenie do DevOps i pipeline'u CI\/CD<\/h3>\n<p>\nJe\u015bli zapytasz kilka os\u00f3b: \u201eCzym jest DevOps?\u201d, prawdopodobnie otrzymasz kilka r\u00f3\u017cnych odpowiedzi. DevOps, podobnie jak Agile, rozwija\u0142 si\u0119, aby obj\u0105\u0107 wiele r\u00f3\u017cnych dyscyplin, ale wi\u0119kszo\u015b\u0107 ludzi zgodzi si\u0119 co do kilku rzeczy: DevOps to praktyka rozwoju oprogramowania lub cykl \u017cycia rozwoju oprogramowania (SDLC), kt\u00f3rego centralnym zasad\u0105 jest zmiana kultury, w kt\u00f3rej programi\u015bci i osoby spoza obszaru IT istniej\u0105 w \u015brodowisku, w kt\u00f3rym:<\/p>\n<p>Automatyzowane s\u0105 operacje, kt\u00f3re wcze\u015bniej by\u0142y wykonywane r\u0119cznie; <br \/>\nKa\u017cdy robi to, co potrafi najlepiej;<br \/>\nLiczba wdro\u017ce\u0144 w okre\u015blonym czasie ro\u015bnie; Wydajno\u015b\u0107 wzrasta; <br \/>\nZwi\u0119ksza si\u0119 elastyczno\u015b\u0107 rozwoju.<\/p>\n<p>Chocia\u017c posiadanie odpowiednich narz\u0119dzi programowych to nie jedyna rzecz potrzebna do stworzenia \u015brodowiska DevOps, niekt\u00f3re narz\u0119dzia s\u0105 niezb\u0119dne. Kluczowym narz\u0119dziem jest ci\u0105g\u0142a integracja i ci\u0105g\u0142e wdra\u017canie (CI\/CD). W tym procesie \u015brodowiska maj\u0105 r\u00f3\u017cne etapy (np. DEV, INT, TST, QA, UAT, STG, PROD), wiele operacji jest zautomatyzowanych, a programi\u015bci mog\u0105 pisa\u0107 wysokiej jako\u015bci kod, osi\u0105ga\u0107 elastyczno\u015b\u0107 rozwoju i wysok\u0105 cz\u0119stotliwo\u015b\u0107 wdro\u017ce\u0144.<\/p>\n<p>W tym artykule opisano pi\u0119cioetapowe podej\u015bcie do budowania potoku DevOps, podobnego do przedstawionego na nast\u0119pnej diagramie, przy u\u017cyciu narz\u0119dzi open source.<\/p>\n<h3>Krok 1: Metody CI\/CD<\/h3>\n<p>\nPierwsz\u0105 rzecz\u0105, kt\u00f3rej potrzebujesz, jest narz\u0119dzie CI\/CD. Jenkins, narz\u0119dzie open source, oparte na Javie i udost\u0119pniane na licencji MIT, to \u015brodek, kt\u00f3ry spopularyzowa\u0142 kierunek DevOps i sta\u0142 si\u0119 de facto standardem.<\/p>\n<p>Czym wi\u0119c jest Jenkins? Mo\u017cna to uzna\u0107 za pewien magiczny uniwersalny pilot zdalnego sterowania, kt\u00f3ry mo\u017ce rozmawia\u0107 z r\u00f3\u017cnymi us\u0142ugami i narz\u0119dziami oraz je organizowa\u0107. Samo narz\u0119dzie CI\/CD, takie jak Jenkins, jest bezu\u017cyteczne, ale staje si\u0119 pot\u0119\u017cniejsze, gdy \u0142\u0105czy si\u0119 z r\u00f3\u017cnymi narz\u0119dziami i us\u0142ugami.<\/p>\n<p>Jenkins to tylko jedno z wielu narz\u0119dzi open source do CI\/CD, kt\u00f3re mo\u017cesz wykorzysta\u0107 do budowy potoku DevOps.<\/p>\n<p>Jenkins: Creative Commons i MIT<br \/>\nTravis CI: MIT<br \/>\nCruiseControl: BSD<br \/>\nBuildbot: GPL<br \/>\nApache Gump: Apache 2.0<br \/>\nCabie: GNU<\/p>\n<p>Oto, jak wygl\u0105daj\u0105 procesy DevOps z narz\u0119dziem CI\/CD:<\/p>\n<p><img decoding=\"async\" alt=\"Przewodnik dla pocz\u0105tkuj\u0105cych: tworzenie potoku DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/e937f3da170b24c53cb5d67a67a365bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Masz narz\u0119dzie CI\/CD dzia\u0142aj\u0105ce na swoim lokalnym serwerze, ale na razie niewiele mo\u017cesz zrobi\u0107. Przejd\u017amy na kolejny etap podr\u00f3\u017cy w \u015bwiat DevOps.<\/p>\n<h3>Krok 2: Zarz\u0105dzanie systemami kontroli wersji<\/h3>\n<p>\nNajlepszym (i prawdopodobnie najprostszym) sposobem, aby sprawdzi\u0107, czy twoje narz\u0119dzie CI\/CD mo\u017ce zdzia\u0142a\u0107 cuda, jest integracja z narz\u0119dziem kontroli wersji (SCM). Po co potrzebujesz kontroli wersji? Za\u0142\u00f3\u017cmy, \u017ce tworzysz aplikacj\u0119. Za ka\u017cdym razem, gdy programujesz, niezale\u017cnie od tego, czy u\u017cywasz Javy, Pythona, C++, Go, Rubiego, JavaScriptu czy jakiegokolwiek innego z niezliczonej ilo\u015bci j\u0119zyk\u00f3w programowania. Kod, kt\u00f3ry piszesz, nazywa si\u0119 kodem \u017ar\u00f3d\u0142owym. Na pocz\u0105tku, zw\u0142aszcza gdy pracujesz sam, prawdopodobnie mo\u017cna wszystko umie\u015bci\u0107 w lokalnym katalogu. Ale gdy projekt ro\u015bnie i zapraszasz innych do wsp\u00f3\u0142pracy, potrzebujesz sposobu na zapobieganie konfliktom podczas efektywnej wymiany modyfikacji. Potrzebujesz te\u017c sposobu na przywracanie wcze\u015bniejszych wersji, poniewa\u017c tworzenie kopii zapasowych i kopiowanie\/wklejanie ich ju\u017c nie wystarcza. Ty (i twoi koledzy z zespo\u0142u) potrzebujecie czego\u015b lepszego.<\/p>\n<p>To w\u0142a\u015bnie tutaj narz\u0119dzie kontroli wersji staje si\u0119 praktycznie niezb\u0119dne. To narz\u0119dzie przechowuje tw\u00f3j kod w repozytoriach, prowadzi rejestr wersji i koordynuje prac\u0119 uczestnik\u00f3w projektu.<\/p>\n<p>Chocia\u017c istnieje wiele narz\u0119dzi kontroli wersji, Git jest standardem i to prawda. Zdecydowanie polecam korzystanie z Gita, chocia\u017c istniej\u0105 tak\u017ce inne opcje z otwartym kodem.<\/p>\n<p>Git: GPLv2 i 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>Tak wygl\u0105da pipeline DevOps z dodanym narz\u0119dziem kontroli wersji.<\/p>\n<p><img decoding=\"async\" alt=\"Przewodnik dla pocz\u0105tkuj\u0105cych: tworzenie potoku DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/47793d73d3b496aa38e027ff116f729d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Narz\u0119dzie CI\/CD mo\u017ce zautomatyzowa\u0107 procesy sprawdzania, pobierania kodu \u017ar\u00f3d\u0142owego i wsp\u00f3\u0142pracy mi\u0119dzy cz\u0142onkami zespo\u0142u. Niez\u0142e, prawda? Ale jak sprawi\u0107, aby to dzia\u0142a\u0142o jako aplikacja, z kt\u00f3rej miliardy ludzi b\u0119d\u0105 mog\u0142y korzysta\u0107 i j\u0105 ocenia\u0107?<\/p>\n<h3>Krok 3: Tworzenie narz\u0119dzia automatyzacji kompilacji<\/h3>\n<p>\n\u015awietnie! Mo\u017cesz sprawdza\u0107 kod i wprowadza\u0107 zmiany w systemie kontroli wersji, a tak\u017ce zaprasza\u0107 swoich znajomych do wsp\u00f3\u0142pracy przy rozwoju. Ale jeszcze nie stworzy\u0142e\u015b aplikacji. Aby stworzy\u0107 aplikacj\u0119 internetow\u0105, musisz j\u0105 skompilowa\u0107 i spakowa\u0107 w format wywo\u0142ywalny lub uruchomi\u0107 jako plik wykonywalny. (Zauwa\u017c, \u017ce interpretowany j\u0119zyk programowania, taki jak JavaScript czy PHP, nie wymaga kompilacji).<\/p>\n<p>Skorzystaj z narz\u0119dzia automatyzacji budowy. Niezale\u017cnie od tego, kt\u00f3re narz\u0119dzie automatyzacji budowy zdecydujesz si\u0119 u\u017cy\u0107, wszystkie one d\u0105\u017c\u0105 do tego samego celu: przekszta\u0142cenia kodu \u017ar\u00f3d\u0142owego w po\u017c\u0105dany format i zautomatyzowania zadania czyszczenia, kompilacji, testowania i wdra\u017cania w okre\u015blonym \u015brodowisku. Narz\u0119dzia do budowy b\u0119d\u0105 si\u0119 r\u00f3\u017cni\u0107 w zale\u017cno\u015bci od twojego j\u0119zyka programowania, oto kilka og\u00f3lnych opcji z otwartym kodem \u017ar\u00f3d\u0142owym.<\/p>\n<p>Nazwa<br \/>\nLicencja<br \/>\nJ\u0119zyk programowania<\/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 \/>\nApache<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>\u015awietnie! Mo\u017cesz umie\u015bci\u0107 pliki konfiguracyjne narz\u0119dzia automatyzacji budowy w systemie kontroli wersji i pozwoli\u0107 swojemu narz\u0119dziu CI\/CD po\u0142\u0105czy\u0107 wszystko w jedn\u0105 ca\u0142o\u015b\u0107.<\/p>\n<p><img decoding=\"async\" alt=\"Przewodnik dla pocz\u0105tkuj\u0105cych: tworzenie potoku DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/573d613914d278e738a0fc7f05644b62.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Wszystko w porz\u0105dku, prawda? Ale gdzie wdro\u017cy\u0107 swoj\u0105 aplikacj\u0119?<\/p>\n<h3>Krok 4: Serwer dla aplikacji internetowych<\/h3>\n<p>\nNa razie masz zapakowany plik, kt\u00f3ry mo\u017ce by\u0107 zar\u00f3wno wykonywalny, jak i instalacyjny. Aby aplikacja by\u0142a naprawd\u0119 przydatna, musi oferowa\u0107 jak\u0105\u015b us\u0142ug\u0119 lub interfejs, ale potrzebujesz kontenera do umieszczenia swojej aplikacji.<\/p>\n<p>Serwer dla aplikacji internetowych to dok\u0142adnie taki kontener. Serwer zapewnia \u015brodowisko, w kt\u00f3rym logiczna struktura pakietu wywo\u0142ywalnego mo\u017ce by\u0107 okre\u015blona. Serwer tak\u017ce udost\u0119pnia interfejs i oferuje us\u0142ugi internetowe, otwieraj\u0105c gniazda dla zewn\u0119trznego \u015bwiata. Potrzebujesz serwera HTTP oraz jakiego\u015b \u015brodowiska (na przyk\u0142ad maszyny wirtualnej) do jego instalacji. A na razie za\u0142\u00f3\u017cmy, \u017ce dowiesz si\u0119 o tym p\u00f3\u017aniej (cho\u0107 powiem o kontenerach poni\u017cej).<\/p>\n<p>Istnieje kilka otwartych serwer\u00f3w dla aplikacji internetowych.<\/p>\n<p>Nazwa<br \/>\nLicencja<br \/>\nJ\u0119zyk programowania<\/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>Tw\u00f3j pipeline DevOps jest prawie gotowy do u\u017cycia. Dobra robota!<\/p>\n<p><img decoding=\"async\" alt=\"Przewodnik dla pocz\u0105tkuj\u0105cych: tworzenie potoku DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/9c314e8a42f154ded3b16ec7bdf01f99.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Cho\u0107 mo\u017cna na tym poprzesta\u0107 i zaj\u0105\u0107 si\u0119 integracj\u0105 samodzielnie, jako\u015b\u0107 kodu to wa\u017cna kwestia dla programisty aplikacji i nale\u017cy si\u0119 ni\u0105 martwi\u0107.<\/p>\n<h3>Krok 5: Pokrycie testowania kodu<\/h3>\n<p>\nWdra\u017canie test\u00f3w mo\u017ce by\u0107 kolejnym uci\u0105\u017cliwym wymaganiem, ale programi\u015bci musz\u0105 wychwytywa\u0107 wszelkie b\u0142\u0119dy w aplikacji na wczesnym etapie i poprawia\u0107 jako\u015b\u0107 kodu, aby zapewni\u0107 satysfakcj\u0119 ko\u0144cowych u\u017cytkownik\u00f3w. Na szcz\u0119\u015bcie istnieje wiele narz\u0119dzi open source do testowania kodu i generowania rekomendacji dotycz\u0105cych poprawy jego jako\u015bci. Jeszcze lepiej, \u017ce wi\u0119kszo\u015b\u0107 narz\u0119dzi CI\/CD mo\u017ce \u0142\u0105czy\u0107 si\u0119 z tymi narz\u0119dziami i automatyzowa\u0107 proces.<\/p>\n<p>Testowanie kodu sk\u0142ada si\u0119 z dw\u00f3ch cz\u0119\u015bci: framework\u00f3w do testowania kodu, kt\u00f3re pomagaj\u0105 pisa\u0107 i uruchamia\u0107 testy, oraz narz\u0119dzi do generowania sugestii, kt\u00f3re pomagaj\u0105 poprawi\u0107 jako\u015b\u0107 kodu.<\/p>\n<p><b>Systemy testowania kodu<\/b><\/p>\n<p>Nazwa<br \/>\nLicencja<br \/>\nJ\u0119zyk programowania<\/p>\n<p>JUnit<br \/>\nLicencja publiczna Eclipse<br \/>\nJava<\/p>\n<p>EasyMock<br \/>\nApache<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>Systemy rekomendacji dotycz\u0105ce poprawy kodu<\/b><\/p>\n<p>Nazwa<br \/>\nLicencja<br \/>\nJ\u0119zyk programowania<\/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 Licencja publiczna Eclipse<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>Zauwa\u017c, \u017ce wi\u0119kszo\u015b\u0107 narz\u0119dzi i framework\u00f3w wymienionych powy\u017cej zosta\u0142a napisanych dla Javy, Pythona i JavaScriptu, poniewa\u017c C++ i C# s\u0105 j\u0119zykami programowania obj\u0119tymi prawami w\u0142asno\u015bciowymi (cho\u0107 GCC ma otwarte \u017ar\u00f3d\u0142o).<\/p>\n<p>Teraz, gdy wdro\u017cy\u0142e\u015b narz\u0119dzia do pokrycia kodu testami, Tw\u00f3j pipeline DevOps powinien przypomina\u0107 diagram pokazany na pocz\u0105tku tego przewodnika.<\/p>\n<h3>Dodatkowe kroki<\/h3>\n<p>\n<b>Kontenery<\/b><\/p>\n<p>Jak ju\u017c wspomina\u0142em, mo\u017cesz hostowa\u0107 sw\u00f3j serwer na maszynie wirtualnej lub serwerze, ale kontenery s\u0105 popularnym rozwi\u0105zaniem.<\/p>\n<p>Czym s\u0105 kontenery? Kr\u00f3tkie wyja\u015bnienie polega na tym, \u017ce maszyna wirtualna potrzebuje ogromnej ilo\u015bci pami\u0119ci systemu operacyjnego, przekraczaj\u0105cej rozmiar aplikacji, podczas gdy kontener potrzebuje tylko kilku bibliotek i konfiguracji do uruchomienia aplikacji. Oczywi\u015bcie maszyna wirtualna ma wci\u0105\u017c wa\u017cne zastosowania, ale kontener to lekkie rozwi\u0105zanie do hostingu aplikacji, w tym serwer\u00f3w aplikacyjnych.<\/p>\n<p>Cho\u0107 istniej\u0105 inne opcje kontener\u00f3w, najpopularniejsze to Docker i Kubernetes.<\/p>\n<p>Docker: Apache 2.0<br \/>\nKubernetes: Apache 2.0<\/p>\n<p><b>\u015arodki automatyzacji po\u015bredniej<\/b><\/p>\n<p>Nasz pipeline DevOps g\u0142\u00f3wnie skupia si\u0119 na wsp\u00f3lnym tworzeniu i wdra\u017caniu aplikacji, ale istnieje wiele innych rzeczy, kt\u00f3re mo\u017cna zrobi\u0107 za pomoc\u0105 narz\u0119dzi DevOps. Jednym z nich jest wykorzystanie narz\u0119dzi Infrastructure as Code (IaC), kt\u00f3re znane s\u0105 r\u00f3wnie\u017c jako \u015brodki automatyzacji po\u015bredniej. Te narz\u0119dzia pomagaj\u0105 zautomatyzowa\u0107 instalacj\u0119, zarz\u0105dzanie i inne zadania dla oprogramowania po\u015bredniego. Na przyk\u0142ad, narz\u0119dzie automatyzacji mo\u017ce wyodr\u0119bnia\u0107 aplikacje, takie jak serwer aplikacji, bazy danych i narz\u0119dzia do monitorowania, z odpowiednimi konfiguracjami i wdra\u017ca\u0107 je na serwerze aplikacji.<\/p>\n<p>Oto kilka narz\u0119dzi automatyzacji po\u015bredniej z otwartym kodem \u017ar\u00f3d\u0142owym:<\/p>\n<p>Ansible: GNU Public<br \/>\nSaltStack: Apache 2.0<br \/>\nChef: Apache 2.0<br \/>\nPuppet: Apache lub GPL<\/p>\n<p><img decoding=\"async\" alt=\"Przewodnik dla pocz\u0105tkuj\u0105cych: tworzenie potoku DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/148ef7317ca5780b412241ddaec9dc76.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Dowiedz si\u0119 szczeg\u00f3\u0142\u00f3w, jak zdoby\u0107 po\u017c\u0105dan\u0105 profesj\u0119 od podstaw lub rozwin\u0105\u0107 umiej\u0119tno\u015bci i zarobki, ucz\u0105c si\u0119 na p\u0142atnych kursach online 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\">Kurs z DevOps<\/a><\/noindex> (12 miesi\u0119cy)<\/li>\n<\/ul>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">jeszcze kursy<\/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\">Kurs z Machine Learning<\/a><\/noindex> (12 tygodni)<\/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\">Szkolenie w zawodzie Data Science od podstaw<\/a><\/noindex> (12 miesi\u0119cy)<\/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\">Zaw\u00f3d analityka z dowolnym poziomem wyj\u015bciowym<\/a><\/noindex> (9 miesi\u0119cy)<\/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\">Kurs \u201ePython dla deweloper\u00f3w webowych\u201d<\/a><\/noindex> (9 miesi\u0119cy)<\/li>\n<\/ul>\n<p><\/p>\n<h3>Przydatne<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/503196\/\">450 bezp\u0142atnych kurs\u00f3w od Ligi Ivy<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/508450\/\">Trendy w Data Science 2020<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/508556\/\">Data Science umar\u0142a. Niech \u017cyje Business Science!<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/506790\/\">Data Science na sterydach: wprowadzenie do Decision Intelligence<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/503504\/\">Najbardziej udany i kontrowersyjny projekt Data Science: Cambridge Analytica<\/a><\/noindex><\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <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.1.1 - 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\/pl\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/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\udd47Przewodnik dla pocz\u0105tkuj\u0105cych: tworzymy pipeline DevOps | ProHoster","description":"Je\u015bli jeste\u015b nowicjuszem w DevOps, zapoznaj si\u0119 z tym przewodnikiem po tworzeniu swojego pierwszego pi\u0119cioetapowego procesu.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/87467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=87467"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/87467\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/87468"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=87467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=87467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=87467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}