{"id":587,"date":"2019-04-16T14:50:20","date_gmt":"2019-04-16T14:50:20","guid":{"rendered":"http:\/\/www.iprogrammable.com\/?p=587"},"modified":"2019-04-26T09:21:55","modified_gmt":"2019-04-26T09:21:55","slug":"mcet-sec-4-build-server","status":"publish","type":"post","link":"http:\/\/www.iprogrammable.com\/pl\/2019\/04\/16\/mcet-sec-4-build-server\/","title":{"rendered":"MCET-SEC 4: Build server"},"content":{"rendered":"<p><\/p>\n<p style=\"text-align: justify;\">\u015awietnie, \u015bwietnie! Zdecydowa\u0142em si\u0119 przyjrze\u0107 Dockerowi podczas tworzenia mojego wydajnego zestawu narz\u0119dzi dla firm korzystaj\u0105cych z Windowsa. Docker to pierwsze co us\u0142ysza\u0142em jako odzew od moich programist\u00f3w w CODEFUSION. Zapytali mnie &#8211; &#8222;Czy b\u0119dziemy korzysta\u0107 z kontener\u00f3w?&#8221;. &#8222;Po co?&#8221; odpowiedzia\u0142em. Nie dlatego, \u017ce by\u0142em uprzedzony, po prostu uwa\u017cam, \u017ce s\u0105 inne sposoby, z kt\u00f3rych mogliby\u015bmy skorzysta\u0107. Nie mam \u017cadnego do\u015bwiadczenia z kontenerami. Od zawsze korzystam z Windowsa. Wiem, \u017ce Microsoft bardzo promuje Dockera ale my\u015bla\u0142em, \u017ce nie mam czasu, aby zagl\u0119bia\u0107 si\u0119 w now\u0105 technologi\u0119. Wtedy zacz\u0105\u0142em ustawia\u0107 wszystko na Windowsie. Postawienie repozytori\u00f3w z funkcj\u0105 pull request, kt\u00f3re bazowa\u0142y na Gogu to by\u0142a bu\u0142ka z mas\u0142em. Za to stawianie TesLinka wr\u0119cz przeciwnie. Nast\u0119pnie przyszed\u0142 czas na aktualizacje servera do build\u00f3w. To powinno by\u0107 \u0142atwe zadanie. Od kiedy napisa\u0142em &#8221;Continous Integration in .NET&#8221; w 2011 staram si\u0119 by\u0107 na bie\u017c\u0105co z wszystkimi nowinkami o ci\u0105g\u0142ej integracji. Wczoraj jednak rozmawia\u0142em o MCET-SEC z przyjacielem, kt\u00f3rego opinia wiele dla mnie znaczy i opowiedzia\u0142 mi jakie rozwi\u0105zania s\u0105 stosowane w jego firmie &#8211; Docker i Kubernetes. Pomy\u015bla\u0142em: w porz\u0105dku pora na nauk\u0119. Pluralsight strze\u017c si\u0119. Nadchodz\u0119 \u017ceby nauczy\u0107 si\u0119 Dockera i Kubernetesa.<\/p>\n<p style=\"text-align: justify;\">Jednak\u017ce w mi\u0119dzy czasie moi programi\u015bci potrzebuj\u0105 nowy server do buildowania. Ten, kt\u00f3rego u\u017cywamy teraz jest troche przerdzewia\u0142y. Nasz C3PO(tak, nazywamy servery po s\u0142awnych robotach i wiemy, \u017ce to nie pasuje do powa\u017cnej firmy ale i tak b\u0119dziemy to robi\u0107 ;)) jest prawie dziesi\u0119cioletnim WindowsServer 2008 R2 VM. Zosta\u0142 pocz\u0105tkowo za\u0142o\u017cony w vanilli tak jak to powinno by\u0107( starali\u015bmy si\u0119 go nie za\u015bmieci\u0107 i nie instalowa\u0107 nic co nie by\u0142o niezb\u0119dne do procesu buildowania, aby ochroni\u0107 go przed zewn\u0119trznymi wp\u0142ywami). Niestety dziesi\u0119\u0107 lat w IT to du\u017co czasu. Stworzyli\u015bmy bardzo wiele projekt\u00f3w przez te dziesi\u0119\u0107 lat i nasz C3PO nosi pi\u0119tno tej pracy. Pora go odrestaurowa\u0107.<\/p>\n<p style=\"text-align: justify;\">Servery buildowe doros\u0142y od kiedy napisa\u0142em swoj\u0105 ksi\u0105\u017ck\u0119. W przesz\u0142o\u015bci w wi\u0119kszo\u015bci przypadk\u00f3w tworzy\u0142o si\u0119 dedykowane maszyny,\u00a0 na kt\u00f3rych dzia\u0142a\u0142o oprogramowanie, kt\u00f3re robi\u0142o jedn\u0105 prost\u0105 rzecz. Sprawdza\u0142o(albo by\u0142o powiadamiane o fakcie) czy cokolwiek nowego nie pojawi\u0142o si\u0119 w repozytorium i utrzymywa\u0142o dzia\u0142aj\u0105cy proces. Wygl\u0105da\u0142o to bardzo podobnie do tego co wida\u0107 na obrazku poni\u017cej.<\/p>\n<p><a href=\"http:\/\/www.iprogrammable.com\/wp-content\/uploads\/2019\/04\/CI_graph_by_CODEFUSION.png\"><img decoding=\"async\" loading=\"lazy\" style=\"display: inline; background-image: none;\" title=\"CI_graph_by_CODEFUSION\" src=\"http:\/\/www.iprogrammable.com\/wp-content\/uploads\/2019\/04\/CI_graph_by_CODEFUSION_thumb.png\" alt=\"CI_graph_by_CODEFUSION\" width=\"1028\" height=\"728\" border=\"0\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Dzisiaj sam proces wygl\u0105da podobnie jednak\u017ce &#8222;server&#8221; przenoszony jest do chmury. Nadal mamy samodzielny server do build\u00f3w ale jak grzyby po deszczu pojawiaj\u0105 si\u0119 serwisy korzystaj\u0105ce z chmury. Spo\u015br\u00f3d starych rozwi\u0105za\u0144 mamy:<\/p>\n<p>1. <a href=\"https:\/\/jenkins.io\/\">Jenkins<\/a><\/p>\n<p>2. <a href=\"https:\/\/www.jetbrains.com\/teamcity\/\">TeamCity<\/a><\/p>\n<p>3. <a href=\"https:\/\/travis-ci.org\/\">Travis CI<\/a><\/p>\n<p>4. <a href=\"https:\/\/www.atlassian.com\/software\/bamboo\">Bamboo<\/a><\/p>\n<p style=\"text-align: justify;\">Pojawia si\u0119 tak\u017ce du\u017co rozwi\u0105za\u0144 bazuj\u0105cych na SaaS(subskrybcji), kt\u00f3re polegaj\u0105 na udost\u0119pnianiu klientom gotowych server\u00f3w czekaj\u0105cych na u\u017cycie. Wybitnym przyk\u0142adem jest <a href=\"https:\/\/buddy.works\/\">Buddy<\/a>. Wspominam o nim nie tylko dlatego, \u017ce jest to produkt polski. Zas\u0142uguje na szczeg\u00f3ln\u0105 uwag\u0119 ze wzgl\u0119du na to jak perfekcyjnym jest rozwi\u0105zaniem CI\/CD. Dzia\u0142aj\u0105 natywnie w chmurze. Potrafi\u0105 ustawi\u0107 wszystko w kilka minut. Je\u015bli twoje oprogramowanie jest tak nowoczesne jak ich servery to korzystanie z Buddyego to b\u0119dzie magia. Je\u015bli nie, no c\u00f3z, masz problem.<\/p>\n<p style=\"text-align: justify;\">Co mam na my\u015bli? Chodzi mi o to, \u017ce co je\u015bli oprogramowanie, kt\u00f3re buildujesz nie jest nowoczesn\u0105 aplikacj\u0105 bazuj\u0105c\u0105 na mikroserwisach? Co je\u015bli budujesz i utrzymujesz aplikacje desktopow\u0105, kt\u00f3ra po cz\u0119\u015bci korzysta ze starych bibliotek C++ albo WPF? Co je\u015bli utrzymujesz serwisy WCF&#8217;owe dla swoich klient\u00f3w i ci\u0105gle masz dzia\u0142aj\u0105cy zestaw testuj\u0105cych SOAPUi . Co je\u015bli budujesz aplikacje mobilne? U\u017cywasz PHP i potrzebujesz statyczny analizator kodu i maszyn\u0119 do deployu? W takich sytuacjach Buddy nie wystarcza. B\u0119dziesz potrzebowa\u0142 utrzymywa\u0107 w\u0142asne servery, kt\u00f3re zadbaj\u0105 o ci\u0105g\u0142\u0105 integracj\u0119. My tak dzia\u0142amy. Tak ja dzia\u0142a\u0142em.<\/p>\n<p style=\"text-align: justify;\">Postawi\u0142em najnowszy server Jenkinsa na \u015bwie\u017cej maszynie. U\u017cy\u0142em ostatniego wypuszczonego instalatora Windowsa i skorzysta\u0142em z MSI. Instalacja przebieg\u0142a nawet \u0142atwiej ni\u017c dziewi\u0119\u0107 lat temu. Skorzysta\u0142em z kilku dodatk\u00f3w, kt\u00f3rych potrzebowa\u0142em. Konfiguracja LDAP by\u0142a troszk\u0119 specyficzna( filtr wyszukiwania u\u017cytkownika jest ={0} i nie =%s &#8211; powinni da\u0107 medal temu kto w og\u00f3le skonfiguruje LDAP). Konfiguracja SSL&#8217;a nic si\u0119 nie zmieni\u0142a, od kiedy robi\u0142em to ostatni raz. Nadal musisz mie\u0107 jks w stylu javy i edytowa\u0107 plik jenkins.xml \u017ceby doda\u0107 odpowiednie parametry do konsoli dla Jenkinsa.<\/p>\n<p style=\"text-align: justify;\">Ostatnia rzecz, kt\u00f3r\u0105 zrobi\u0142em by\u0142o zainstalowanie dysku SSD dla build\u00f3w. To by\u0142a jedna z g\u0142\u00f3wnych pr\u00f3\u015bb moich developer\u00f3w &#8211; budowanie musi przebiega\u0107 SZYBKO. Oczywi\u015bcie maj\u0105 racj\u0119. Czas sp\u0119dzony na czekaniu a\u017c server CI odpowie jest zmarnowany. Stworzy\u0142em wi\u0119c VHD na serverze. W\u0142o\u017cy\u0142em SSD i odpali\u0142em na niM CI. Nast\u0119pnie skonfigurowa\u0142em g\u0142\u00f3wny katalog w pliku Jenkinsa config.xml w nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<p style=\"text-align: justify;\">&lt;workspaceDir&gt;e:\/jenkins\/jobs\/${ITEM_FULL_NAME}&lt;\/workspaceDir&gt;<br \/>\n&lt;buildsDir&gt;${ITEM_ROOTDIR}\/builds&lt;\/buildsDir&gt;<\/p>\n<p style=\"text-align: justify;\">Nowiutki server do CI ju\u017c dzia\u0142a!<\/p>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>\u015awietnie, \u015bwietnie! Zdecydowa\u0142em si\u0119 przyjrze\u0107 Dockerowi podczas tworzenia mojego wydajnego zestawu narz\u0119dzi dla firm korzystaj\u0105cych z Windowsa. Docker to pierwsze co us\u0142ysza\u0142em jako odzew od moich programist\u00f3w w CODEFUSION. Zapytali mnie &#8211; &#8222;Czy b\u0119dziemy korzysta\u0107 z kontener\u00f3w?&#8221;. &#8222;Po co?&#8221; odpowiedzia\u0142em. Nie dlatego, \u017ce by\u0142em uprzedzony, po prostu uwa\u017cam, \u017ce s\u0105 inne sposoby, z kt\u00f3rych mogliby\u015bmy skorzysta\u0107. Nie mam \u017cadnego do\u015bwiadczenia z kontenerami. Od zawsze korzystam z Windowsa. Wiem, \u017ce Microsoft bardzo promuje Dockera ale my\u015bla\u0142em, \u017ce nie mam czasu, aby zagl\u0119bia\u0107 si\u0119 w now\u0105 technologi\u0119. Wtedy zacz\u0105\u0142em ustawia\u0107 wszystko na Windowsie. Postawienie repozytori\u00f3w z funkcj\u0105 pull request, kt\u00f3re bazowa\u0142y na Gogu to by\u0142a bu\u0142ka z mas\u0142em. Za to stawianie TesLinka wr\u0119cz przeciwnie. Nast\u0119pnie przyszed\u0142 czas na aktualizacje servera do build\u00f3w. To powinno by\u0107 \u0142atwe zadanie. Od kiedy napisa\u0142em &#8221;Continous Integration in .NET&#8221; w 2011 staram si\u0119 by\u0107 na bie\u017c\u0105co z wszystkimi nowinkami o ci\u0105g\u0142ej integracji. Wczoraj jednak rozmawia\u0142em o MCET-SEC z przyjacielem, kt\u00f3rego opinia wiele dla mnie znaczy i opowiedzia\u0142 mi jakie rozwi\u0105zania s\u0105 stosowane w jego firmie &#8211; Docker i Kubernetes. Pomy\u015bla\u0142em: w porz\u0105dku pora na nauk\u0119. Pluralsight strze\u017c si\u0119. Nadchodz\u0119 \u017ceby nauczy\u0107 si\u0119 Dockera i Kubernetesa. Jednak\u017ce w mi\u0119dzy czasie moi programi\u015bci potrzebuj\u0105 nowy server do buildowania. Ten, kt\u00f3rego u\u017cywamy teraz jest troche przerdzewia\u0142y. Nasz C3PO(tak, nazywamy servery po s\u0142awnych robotach i wiemy, \u017ce to nie pasuje do powa\u017cnej firmy ale i tak b\u0119dziemy to robi\u0107 ;)) jest prawie dziesi\u0119cioletnim WindowsServer 2008 R2 VM. Zosta\u0142 pocz\u0105tkowo za\u0142o\u017cony w vanilli tak jak to powinno by\u0107( starali\u015bmy si\u0119 go nie za\u015bmieci\u0107 i nie instalowa\u0107 nic co nie by\u0142o niezb\u0119dne do procesu buildowania, aby ochroni\u0107 go przed zewn\u0119trznymi wp\u0142ywami). Niestety dziesi\u0119\u0107 lat w IT to du\u017co czasu. Stworzyli\u015bmy bardzo wiele projekt\u00f3w przez te dziesi\u0119\u0107 lat i nasz C3PO nosi pi\u0119tno tej pracy. Pora go odrestaurowa\u0107. Servery buildowe doros\u0142y od kiedy napisa\u0142em swoj\u0105 ksi\u0105\u017ck\u0119. W przesz\u0142o\u015bci w wi\u0119kszo\u015bci przypadk\u00f3w tworzy\u0142o si\u0119 dedykowane maszyny,\u00a0 na kt\u00f3rych dzia\u0142a\u0142o oprogramowanie, kt\u00f3re robi\u0142o jedn\u0105 prost\u0105 rzecz. Sprawdza\u0142o(albo by\u0142o powiadamiane o fakcie) czy cokolwiek nowego nie pojawi\u0142o si\u0119 w repozytorium i utrzymywa\u0142o dzia\u0142aj\u0105cy proces. Wygl\u0105da\u0142o to bardzo podobnie do tego co wida\u0107 na obrazku poni\u017cej. Dzisiaj sam proces wygl\u0105da podobnie jednak\u017ce &#8222;server&#8221; przenoszony jest do chmury. Nadal mamy samodzielny server do build\u00f3w ale jak grzyby po deszczu pojawiaj\u0105 si\u0119 serwisy korzystaj\u0105ce z chmury. Spo\u015br\u00f3d starych rozwi\u0105za\u0144 mamy: 1. Jenkins 2. TeamCity 3. Travis CI 4. Bamboo Pojawia si\u0119 tak\u017ce du\u017co rozwi\u0105za\u0144 bazuj\u0105cych na SaaS(subskrybcji), kt\u00f3re polegaj\u0105 na udost\u0119pnianiu klientom gotowych server\u00f3w czekaj\u0105cych na u\u017cycie. Wybitnym przyk\u0142adem jest Buddy. Wspominam o nim nie tylko dlatego, \u017ce jest to produkt polski. Zas\u0142uguje na szczeg\u00f3ln\u0105 uwag\u0119 ze wzgl\u0119du na to jak perfekcyjnym jest rozwi\u0105zaniem CI\/CD. Dzia\u0142aj\u0105 natywnie w chmurze. Potrafi\u0105 ustawi\u0107 wszystko w kilka minut. Je\u015bli twoje oprogramowanie jest tak nowoczesne jak ich servery to korzystanie z Buddyego to b\u0119dzie magia. Je\u015bli nie, no c\u00f3z, masz problem. Co mam na my\u015bli? Chodzi mi o to, \u017ce co je\u015bli oprogramowanie, kt\u00f3re buildujesz nie jest nowoczesn\u0105 aplikacj\u0105 bazuj\u0105c\u0105 na mikroserwisach? Co je\u015bli budujesz i utrzymujesz aplikacje desktopow\u0105, kt\u00f3ra po cz\u0119\u015bci korzysta ze starych bibliotek C++ albo WPF? Co je\u015bli utrzymujesz serwisy WCF&#8217;owe dla swoich klient\u00f3w i ci\u0105gle masz dzia\u0142aj\u0105cy zestaw testuj\u0105cych SOAPUi . Co je\u015bli budujesz aplikacje mobilne? U\u017cywasz PHP i potrzebujesz statyczny analizator kodu i maszyn\u0119 do deployu? W takich sytuacjach Buddy nie wystarcza. B\u0119dziesz potrzebowa\u0142 utrzymywa\u0107 w\u0142asne servery, kt\u00f3re zadbaj\u0105 o ci\u0105g\u0142\u0105 integracj\u0119. My tak dzia\u0142amy. Tak ja dzia\u0142a\u0142em. Postawi\u0142em najnowszy server Jenkinsa na \u015bwie\u017cej maszynie. U\u017cy\u0142em ostatniego wypuszczonego instalatora Windowsa i skorzysta\u0142em z MSI. Instalacja przebieg\u0142a nawet \u0142atwiej ni\u017c dziewi\u0119\u0107 lat temu. Skorzysta\u0142em z kilku dodatk\u00f3w, kt\u00f3rych potrzebowa\u0142em. Konfiguracja LDAP by\u0142a troszk\u0119 specyficzna( filtr wyszukiwania u\u017cytkownika jest ={0} i nie =%s &#8211; powinni da\u0107 medal temu kto w og\u00f3le skonfiguruje LDAP). Konfiguracja SSL&#8217;a nic si\u0119 nie zmieni\u0142a, od kiedy robi\u0142em to ostatni raz. Nadal musisz mie\u0107 jks w stylu javy i edytowa\u0107 plik jenkins.xml \u017ceby doda\u0107 odpowiednie parametry do konsoli dla Jenkinsa. Ostatnia rzecz, kt\u00f3r\u0105 zrobi\u0142em by\u0142o zainstalowanie dysku SSD dla build\u00f3w. To by\u0142a jedna z g\u0142\u00f3wnych pr\u00f3\u015bb moich developer\u00f3w &#8211; budowanie musi przebiega\u0107 SZYBKO. Oczywi\u015bcie maj\u0105 racj\u0119. Czas sp\u0119dzony na czekaniu a\u017c server CI odpowie jest zmarnowany. Stworzy\u0142em wi\u0119c VHD na serverze. W\u0142o\u017cy\u0142em SSD i odpali\u0142em na niM CI. Nast\u0119pnie skonfigurowa\u0142em g\u0142\u00f3wny katalog w pliku Jenkinsa config.xml w nast\u0119puj\u0105cy spos\u00f3b: &lt;workspaceDir&gt;e:\/jenkins\/jobs\/${ITEM_FULL_NAME}&lt;\/workspaceDir&gt; &lt;buildsDir&gt;${ITEM_ROOTDIR}\/builds&lt;\/buildsDir&gt; Nowiutki server do CI ju\u017c dzia\u0142a!<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[24,5,18],"tags":[29],"_links":{"self":[{"href":"http:\/\/www.iprogrammable.com\/pl\/wp-json\/wp\/v2\/posts\/587"}],"collection":[{"href":"http:\/\/www.iprogrammable.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.iprogrammable.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.iprogrammable.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.iprogrammable.com\/pl\/wp-json\/wp\/v2\/comments?post=587"}],"version-history":[{"count":4,"href":"http:\/\/www.iprogrammable.com\/pl\/wp-json\/wp\/v2\/posts\/587\/revisions"}],"predecessor-version":[{"id":631,"href":"http:\/\/www.iprogrammable.com\/pl\/wp-json\/wp\/v2\/posts\/587\/revisions\/631"}],"wp:attachment":[{"href":"http:\/\/www.iprogrammable.com\/pl\/wp-json\/wp\/v2\/media?parent=587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.iprogrammable.com\/pl\/wp-json\/wp\/v2\/categories?post=587"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.iprogrammable.com\/pl\/wp-json\/wp\/v2\/tags?post=587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}