{"id":93885,"date":"2020-09-10T19:42:23","date_gmt":"2020-09-10T17:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov"},"modified":"2020-09-10T19:42:23","modified_gmt":"2020-09-10T17:42:23","slug":"continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov","title":{"rendered":"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/ed8a32ae63b8dccfc8b4893ab27f1527.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Besz\u00e9lj\u00fcnk arr\u00f3l, hogy mi\u00e9rt k\u00fcl\u00f6nb\u00f6znek a CI-eszk\u00f6z\u00f6k \u00e9s a CI teljesen.<\/p>\n<p><\/p>\n<p>Milyen probl\u00e9m\u00e1t old meg a CI, honnan j\u00f6tt az \u00f6tlet, mik az utols\u00f3 meger\u0151s\u00edt\u00e9sek, hogy m\u0171k\u00f6dik, hogyan \u00e9rthetj\u00fck meg, hogy val\u00f3ban gyakorlatunk van, nem csak egy telep\u00edtett Jenkins.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Az \u00f6tlet, hogy el\u0151ad\u00e1st tartsak a folyamatos integr\u00e1ci\u00f3r\u00f3l, m\u00e1r egy \u00e9ve megsz\u00fcletett, amikor \u00e1ll\u00e1sinterj\u00fakra j\u00e1rtam. 10-15 c\u00e9ggel besz\u00e9lgettem, \u00e9s csak egy tudta \u00e9rthet\u0151en elmagyar\u00e1zni, mi a CI, \u00e9s hogy mik\u00e9nt jutottak arra, hogy nekik ez nincs. A t\u00f6bbiek pedig zavaros h\u00fclyes\u00e9geket mondtak Jenkinsr\u0151l \ud83d\ude42 Nos, van Jenkins, csin\u00e1lja a buildet, ami CI! Az el\u0151ad\u00e1somban igyekszem magyar\u00e1zni, mi is a folyamatos integr\u00e1ci\u00f3 val\u00f3j\u00e1ban, \u00e9s mi\u00e9rt van ez a nagyon gyenge viszonya Jenkinsnek \u00e9s hasonl\u00f3 eszk\u00f6z\u00f6knek.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/a57813a652c0d788e5a927dc8a7130ba.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sz\u00f3val, mi jut \u00e1ltal\u00e1ban esz\u00fcnkbe a CI sz\u00f3n\u00e1l? A legt\u00f6bb embernek a Jenkins, Gitlab CI, Travis stb. jut esz\u00e9be.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/c9799c11ba7bb7bbdb2048c2f314b22a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00e9g ha r\u00e1keres\u00fcnk, is ezeket az eszk\u00f6z\u00f6ket fogjuk kapni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/028ef088b28b73e7905b1666d9d53d1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ha megk\u00e9rdezz\u00fck, hogy ismerik-e, akkor a felsorol\u00e1s ut\u00e1n azonnal elmondj\u00e1k, hogy a CI az, amikor a Pull Request alatt a commitn\u00e1l build t\u00f6rt\u00e9nik \u00e9s tesztek futnak.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/f37ba8f985c10900f669540e063c5e43.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A folyamatos integr\u00e1ci\u00f3 nem az eszk\u00f6z\u00f6kr\u0151l sz\u00f3l, nem a buildr\u0151l a tesztekkel az \u00e1gon! A folyamatos integr\u00e1ci\u00f3 a k\u00f6vetkez\u0151 k\u00f3d nagyon gyakori integr\u00e1l\u00e1s\u00e1r\u00f3l sz\u00f3l, \u00e9s ennek megval\u00f3s\u00edt\u00e1s\u00e1hoz nem sz\u00fcks\u00e9ges Jenkinseket, GitLabokat \u00e9s hasonl\u00f3kat \u00e9p\u00edteni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/c3a12b4a875050550b42714607e787c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Miel\u0151tt \u00e1ttekinten\u00e9nk, hogy n\u00e9z ki a teljes \u00e9rt\u00e9k\u0171 CI, el\u0151sz\u00f6r mer\u00fclj\u00fcnk el azoknak az embereknek a kontextus\u00e1ban, akik ezt kital\u00e1lt\u00e1k, \u00e9s \u00e9rezz\u00fck \u00e1t azt a f\u00e1jdalm\u00e1t, amit megpr\u00f3b\u00e1ltak megoldani.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/2ab9c0f4dba2887fed5744c8b021b424.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Azt a f\u00e1jdalmat oldott\u00e1k meg, ami a csapatban t\u00f6rt\u00e9n\u0151 egy\u00fcttm\u0171k\u00f6d\u00e9sb\u0151l fakadt!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/11a5f3b1075f8b8d0f169fe07adf6c91.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg p\u00e9ld\u00e1kon, milyen neh\u00e9zs\u00e9gekkel n\u00e9znek szembe a fejleszt\u0151k csapatban t\u00f6rt\u00e9n\u0151 fejleszt\u00e9skor. Van egy projekt\u00fcnk, a master-\u00e1g a gitben, \u00e9s k\u00e9t fejleszt\u0151.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/8138a52376e87239ff5f7b0af5cd8fee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Elkezdt\u00e9k dolgozni, mint ahogy azt r\u00e9g\u00f3ta megszokt\u00e1k. Felvettek egy feladatot a JIRA-ban, l\u00e9trehoztak egy feature branchet, \u00e9s \u00edrt\u00e1k a k\u00f3dot.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/54720c40d9bbd9631b411a2a26c4083f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az egyik\u00fck gyorsabban befejezte a funkci\u00f3t, \u00e9s \u00f6sszeolvadt a masterrel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/4593dc3cf33a44bf3a4d8166be9bc5da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A m\u00e1siknak t\u00f6bb id\u0151re volt sz\u00fcks\u00e9ge, k\u00e9s\u0151bb olvadt \u00f6ssze, \u00e9s konfliktust kapott. Most ahelyett, hogy sz\u00fcks\u00e9ges \u00fczleti funkci\u00f3kat \u00edrna, a fejleszt\u0151 az idej\u00e9t \u00e9s energi\u00e1j\u00e1t konfliktusok megold\u00e1s\u00e1ra ford\u00edtja.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/c947601fb1dd3b3dd64bac455dc6691a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Min\u00e9l nehezebb \u00f6sszekapcsolni a funkci\u00f3dat a k\u00f6z\u00f6s f\u0151\u00e1g\u00e1val, ann\u00e1l t\u00f6bb id\u0151t pazarolunk el r\u00e1. \u00c9s ez m\u00e9g egy viszonylag egyszer\u0171 p\u00e9lda. Ez egy p\u00e9lda, ahol csak 2 fejleszt\u0151 van. De k\u00e9pzeld el, ha 10 vagy 15 vagy 100 ember \u00edr ugyanabba a t\u00e1rol\u00f3ba. Meg\u0151r\u00fcln\u00e9l az \u00f6sszes konfliktus megold\u00e1s\u00e1t\u00f3l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/16c6b8b51ae462f1e0acb966a93c0ae5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Van egy kis elt\u00e9r\u0151 eset. Van egy f\u0151\u00e1gunk \u00e9s n\u00e9h\u00e1ny fejleszt\u0151, akik dolgoznak valamin.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/21b78ad8d0cb7cb5bded6ef9d49707c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mindegyik\u00fck l\u00e9trehozott egy \u00e1gat.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/b85d8aa0080f08c1ad8ad83f3a9ab084.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az egyik \u00f6sszeolvadt, minden rendben van, befejezte a feladat\u00e1t.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/e96d4fd52c39089e3377ed85adeeb591.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A m\u00e1sodik fejleszt\u0151 id\u0151k\u00f6zben befejezte a feladat\u00e1t. Tegy\u00fck fel, hogy elk\u00fcldte fel\u00fclvizsg\u00e1latra. Sok c\u00e9gn\u00e9l van egy ilyen gyakorlat \u2013 a fel\u00fclvizsg\u00e1lat. Egyr\u00e9szt ez egy j\u00f3 \u00e9s hasznos gyakorlat, m\u00e1sr\u00e9szt viszont sok helyen lelass\u00edt minket. Nem mer\u00fclj\u00fcnk bele, de itt egy remek p\u00e9lda arra, hova vezethet a hib\u00e1s fel\u00fclvizsg\u00e1lati folyamat. Elk\u00fcldted a pull requestet fel\u00fclvizsg\u00e1latra. A fejleszt\u0151nek nincs m\u00e1s dolga. Mit kezd el csin\u00e1lni? Elkezd m\u00e1s feladatokat hozni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/7b8e121be99432606056acf11e20f518.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez id\u0151 alatt a m\u00e1sodik fejleszt\u0151 is dolgozott valamin. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/ceaa5ba5b3b5014fad527362f5794e94.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az els\u0151 befejezte a harmadik feladat\u00e1t. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/9c27663e63bb9489ecffc5a1f73abb87.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c9s egy bizonyos id\u0151 eltelt\u00e9vel, amikor a fel\u00fclvizsg\u00e1lata megt\u00f6rt\u00e9nt, pr\u00f3b\u00e1lkozik az \u00f6sszevon\u00e1ssal. \u00c9s mi t\u00f6rt\u00e9nik? Hatalmas mennyis\u00e9g\u0171 konfliktust fog elkapni. Mi\u00e9rt? Mert m\u00edg a pull requestje fel\u00fclvizsg\u00e1latra v\u00e1rt, a k\u00f3dban m\u00e1r sok minden megv\u00e1ltozott. <\/p>\n<p><\/p>\n<p>A konfliktusok t\u00f6rt\u00e9nete mellett van egy m\u00e1sik t\u00f6rt\u00e9net a kommunik\u00e1ci\u00f3val. Am\u00edg a te \u00e1gad fel\u00fclvizsg\u00e1latra v\u00e1r, mik\u00f6zben hossz\u00fa ideig dolgozol a funkci\u00f3n, abbahagyod annak k\u00f6vet\u00e9s\u00e9t, hogy mi v\u00e1ltozik m\u00e9g a szolg\u00e1ltat\u00e1sod k\u00f3dalapj\u00e1ban. Lehet, hogy amit most pr\u00f3b\u00e1lsz megoldani, azt m\u00e1r tegnap megoldott\u00e1k, \u00e9s \u00fajra felhaszn\u00e1lhatsz egy m\u00f3dszert. De ezt nem l\u00e1tod, mert mindig egy elavult \u00e1ggal dolgozol. \u00c9s ez az elavult \u00e1g mindig ahhoz vezet, hogy mergen konfliktust kell megoldanod. <\/p>\n<p><\/p>\n<p>Teh\u00e1t, ha csapatban dolgozunk, teh\u00e1t nem egy ember turk\u00e1l a t\u00e1rol\u00f3ban, hanem 5-10 ember, akkor min\u00e9l tov\u00e1bb nem adjuk hozz\u00e1 a k\u00f3dunkat a f\u0151\u00e1ghoz, ann\u00e1l ink\u00e1bb szenved\u00fcnk att\u00f3l, hogy v\u00e9g\u00fcl \u00f6ssze kell vonnunk valamit. Min\u00e9l t\u00f6bb konfliktusunk van, \u00e9s min\u00e9l r\u00e9gebbi verzi\u00f3val dolgozunk, ann\u00e1l t\u00f6bb probl\u00e9m\u00e1nk lesz.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/55c070f65a4d3838fb8c02bb9684c76b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00f6z\u00f6sen dolgozni \u2013 ez f\u00e1jdalmas! Mindig zavarjuk egym\u00e1st. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/b914c50aad6f3c9f97edcad7e71ba627.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Erre a probl\u00e9m\u00e1ra t\u00f6bb mint 20 \u00e9vvel ezel\u0151tt ir\u00e1ny\u00edtott\u00e1k a figyelmet. Az els\u0151 eml\u00edt\u00e9st a Continuous Integration gyakorlat\u00e1r\u00f3l az Extreme Programmingben tal\u00e1ltam.<\/p>\n<p><\/p>\n<p>Az Extreme Programming az els\u0151 agilis keretrendszer. Az oldal 1996-ban k\u00e9sz\u00fclt el. Az \u00f6tlet az volt, hogy k\u00fcl\u00f6nb\u00f6z\u0151 programoz\u00e1si, tervez\u00e9si \u00e9s egy\u00e9b gyakorlatokat alkalmazzunk annak \u00e9rdek\u00e9ben, hogy a fejleszt\u00e9s a lehet\u0151 legnagyobb rugalmass\u00e1ggal m\u0171k\u00f6dj\u00f6n, \u00edgy gyorsabban reag\u00e1lhatunk a v\u00e1ltoz\u00e1sokra \u00e9s az \u00fcgyfeleink ig\u00e9nyeire. 24 \u00e9vvel ezel\u0151tt kezdt\u00e9k ezzel szembes\u00fclni, hogy ha valamit nagyon sok\u00e1ig \u00e9s egyed\u00fcl csin\u00e1lsz, akkor t\u00f6bb id\u0151t pazarolsz r\u00e1, mert \u00f6ssze\u00fctk\u00f6z\u00e9sek keletkeznek. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/93a80838bdb3b297557dbf2ac7587965.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Most a \u201eContinuous Integration\u201d kifejez\u00e9s jelent\u00e9s\u00e9t bontjuk le a szavakra. Ha sz\u00f3 szerint ford\u00edtjuk, akkor folyamatos integr\u00e1ci\u00f3t kapunk. De hogy mennyire folyamatos, az nem teljesen vil\u00e1gos, val\u00f3j\u00e1ban nagyon is megszak\u00edtott. Az is megk\u00e9rd\u0151jelezhet\u0151, hogy mennyire integr\u00e1ci\u00f3 a b\u0151v\u00edtm\u00e9ny. <\/p>\n<p><\/p>\n<p>Ez\u00e9rt most id\u00e9zeteket id\u00e9zek az Extreme Programmingb\u0151l. Mindk\u00e9t sz\u00f3t k\u00fcl\u00f6n fogjuk elemezni. <\/p>\n<p><\/p>\n<p>Integr\u00e1ci\u00f3 \u2014 Ahogy m\u00e1r mondtam, arra t\u00f6reksz\u00fcnk, hogy minden m\u00e9rn\u00f6k a legfrissebb k\u00f3dkapcsolattal dolgozzon, \u00e9s a saj\u00e1t k\u00f3dj\u00e1t a lehet\u0151 leggyakrabban adja hozz\u00e1 a k\u00f6z\u00f6s \u00e1ghoz, hogy ezek kicsi \u00e1gacsk\u00e1k legyenek. Mert ha nagyok, akkor k\u00f6nnyen egy h\u00e9tig akadozhatunk a merge konfliktusok miatt. K\u00fcl\u00f6n\u00f6sen, ha hossz\u00fa fejleszt\u00e9si ciklusunk van, mint a waterfall, ahol a fejleszt\u0151 egy h\u00f3napig dolgozik egy hatalmas funkci\u00f3n. Az integr\u00e1ci\u00f3 szakasz\u00e1ban nagyon sok\u00e1ig akadhat. <\/p>\n<p><\/p>\n<p>Az integr\u00e1ci\u00f3 \u2014 amikor a saj\u00e1t \u00e1gat \u00f6sszevonjuk a mester \u00e1ggal, akkor merge-elj\u00fck. Van egy v\u00e9gs\u0151 megold\u00e1s, amikor transbase developert alkalmazunk, ahol t\u00f6reksz\u00fcnk arra, hogy k\u00f6zvetlen\u00fcl a mesterbe \u00edrjunk, felesleges \u00e1gak n\u00e9lk\u00fcl.<\/p>\n<p><\/p>\n<p>\u00d6sszefoglalva, az integr\u00e1ci\u00f3 azt jelenti, hogy a saj\u00e1t k\u00f3dodat \u00e1tvissz\u00fck a mester \u00e1gba. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/8950103e6a59ed7132ec321ac6abe600.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mit \u00e9rtenek itt a \u201efolyamatos\u201d sz\u00f3 alatt, mi nevezhet\u0151 folyamatoss\u00e1gnak? A gyakorlat azt jelenti, hogy a fejleszt\u0151 arra t\u00f6rekszik, hogy a k\u00f3dj\u00e1t a lehet\u0151 leggyorsabban integr\u00e1lja. Ez a c\u00e9lja b\u00e1rmilyen feladat elv\u00e9gz\u00e9sekor \u2013 hogy a k\u00f3dja min\u00e9l hamarabb beker\u00fclj\u00f6n a mesters\u00e9gbe. Ide\u00e1lis vil\u00e1gban a fejleszt\u0151k ezt p\u00e1r \u00f3r\u00e1nk\u00e9nt tenn\u00e9k. Teh\u00e1t, veszel egy kis feladatot, \u00e9s \u00f6sszemerg\u00edted a mesters\u00e9ggel. Minden csod\u00e1latos. Teh\u00e1t erre t\u00f6rekszel. Ezt folyamatosan kell csin\u00e1lni. Amint befejezt\u00e9l valamit, azonnal be is rakod a mesters\u00e9be. <\/p>\n<p><\/p>\n<p>A fejleszt\u0151, aki valamit csin\u00e1l, felel\u0151ss\u00e9ggel tartozik az\u00e9rt, amit tett, hogy az m\u0171k\u00f6dj\u00f6n \u00e9s ne t\u00f6rj\u00f6n el semmit. Itt j\u00f6n el\u0151 \u00e1ltal\u00e1ban a tesztel\u00e9s t\u00f6rt\u00e9nete. Szeretn\u00e9nk n\u00e9h\u00e1ny tesztet futtatni a commitunkra, az \u00f6sszemerger\u00fcnkre, hogy megbizonyosodjunk r\u00f3la, hogy m\u0171k\u00f6dik. \u00c9s itt seg\u00edthetnek neked a Jenkins.<\/p>\n<p><\/p>\n<p>De a t\u00f6rt\u00e9netek mind arr\u00f3l sz\u00f3lnak, hogy a v\u00e1ltoz\u00e1sok kicsik legyenek, a feladatok kicsik legyenek, \u00e9s hogy megoldjuk a feladatot, majd azonnal megpr\u00f3b\u00e1ljuk \u00f6sszemerg\u00edteni a mesters\u00e9be \u2013 itt a Jenkins sem seg\u00edt. Mert a Jenkins kiz\u00e1r\u00f3lag a tesztek futtat\u00e1s\u00e1ban seg\u00edt. <\/p>\n<p><\/p>\n<p>Meg is lehet n\u00e9lk\u00fcle oldani. Ez nem okoz probl\u00e9m\u00e1t. Mert a gyakorlat c\u00e9lja, hogy min\u00e9l gyakrabban \u00f6sszemerj\u00fck, hogy ne pazaroljunk el \u00f3ri\u00e1si mennyis\u00e9g\u0171 id\u0151t j\u00f6v\u0151beli konfliktusokra. <\/p>\n<p><\/p>\n<p>K\u00e9pzelj\u00fck el, hogy 2020-ban valami\u00e9rt nincs internet. Helyben dolgozunk. Nincs Jenkins\u00fcnk. Ez rendben van. M\u00e9g mindig l\u00e9trehozhatsz egy helyi \u00e1gat. \u00cdrt\u00e1l valamilyen k\u00f3dot benne. Megcsin\u00e1lt\u00e1l egy feladatot 3-4 \u00f3ra alatt. \u00c1tv switched a mesters\u00e9gre, v\u00e9gezt\u00e9l egy git pull-t, \u00e9s mergesd az \u00e1gad. K\u00e9sz. Ha ezt gyakran csin\u00e1lod \u2013 gratul\u00e1lok, neked van Folyamatos Integr\u00e1ci\u00f3d!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/1f2117b65994b940edb04e0e119f6e8a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mik a mai vil\u00e1gban a bizony\u00edt\u00e9kok arra, hogy \u00e9rdemes erre az energi\u00e1t ford\u00edtani? Mert ez \u00f6sszess\u00e9g\u00e9ben neh\u00e9z. Ha \u00edgy pr\u00f3b\u00e1lsz dolgozni, meg fogod \u00e9rteni, hogy mostan\u00e1ban valamif\u00e9le tervez\u00e9sben kihat\u00e1said lesznek, t\u00f6bb id\u0151t kell szentelned a feladatok dekompon\u00e1l\u00e1s\u00e1ra. Mert ha csin\u00e1lod a man\u2026-t, akkor nem tudsz gyorsan \u00f6sszemergetni, \u00e9s ennek megfelel\u0151en kellemetlen helyzetbe fogsz ker\u00fclni. Gyakorlatod m\u00e1r nem lesz. <\/p>\n<p><\/p>\n<p>Ez dr\u00e1ga lesz. A Continuous Integration-nel holnapt\u00f3l dolgozni nem fogunk tudni. Mindannyian nagyon sok\u00e1ig fogtok hozz\u00e1szokni, nagyon sok\u00e1ig fogtok tanulni a feladatok lebont\u00e1s\u00e1ra, nagyon sok\u00e1ig fogtok tanulni a review gyakorlatait, ha van ilyen. Mert a mi c\u00e9lunk, hogy a ma \u00f6ssze legyen f\u00e9s\u00fclve. Ha pedig a review-t h\u00e1rom nap alatt csin\u00e1lj\u00e1tok, akkor probl\u00e9m\u00e1itok lesznek, \u00e9s a Continuous Integration nem fog m\u0171k\u00f6dni. <\/p>\n<p><\/p>\n<p>De vannak aktu\u00e1lis bizony\u00edt\u00e9kaink, amik \u00e9ppen most mondj\u00e1k nek\u00fcnk, hogy \u00e9rdemes ebbe a gyakorlatba fektetni?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/2026a8f1d72fb05613511e7bab57e8ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az els\u0151, ami eszembe jutott \u2013 a State of DevOps. Ez egy kutat\u00e1s, amit a fi\u00fak m\u00e1r 7 \u00e9ve v\u00e9geznek. Most m\u00e1r f\u00fcggetlen szervezetk\u00e9nt csin\u00e1lj\u00e1k, de a Google alatt.<\/p>\n<p><\/p>\n<p>Az \u0151 2018-as kutat\u00e1suk korrel\u00e1ci\u00f3t mutatott a c\u00e9gek k\u00f6z\u00f6tt, amelyek pr\u00f3b\u00e1lnak r\u00f6vid \u00e9let\u0171 \u00e1gakat haszn\u00e1lni, amelyek gyorsan, gyakran integr\u00e1l\u00f3dnak, sokkal szebb IT teljes\u00edtm\u00e9ny mutat\u00f3kkal rendelkeznek.<\/p>\n<p><\/p>\n<p>Mik ezek a mutat\u00f3k? Ez 4 m\u00e9r\u0151sz\u00e1m, amelyeket minden c\u00e9gt\u0151l gy\u0171jtenek a k\u00e9rd\u0151\u00edveikben: telep\u00edt\u00e9si gyakoris\u00e1g, a v\u00e1ltoz\u00e1sokhoz sz\u00fcks\u00e9ges id\u0151, a szolg\u00e1ltat\u00e1s helyre\u00e1ll\u00edt\u00e1s\u00e1hoz sz\u00fcks\u00e9ges id\u0151, a v\u00e1ltoz\u00e1sok hib\u00e1s ar\u00e1nya.<\/p>\n<p><\/p>\n<p>El\u0151sz\u00f6r is, van ez a korrel\u00e1ci\u00f3, tudjuk, hogy a c\u00e9gek, amelyek gyakran \u00f6sszeolvadnak, sokkal jobban teljes\u00edtenek ezekben a mutat\u00f3kban. \u00c9s a c\u00e9geket t\u00f6bb kateg\u00f3ri\u00e1ba bontj\u00e1k: lass\u00fa c\u00e9gek, amelyek lassan termelnek, k\u00f6zepes teljes\u00edtm\u00e9ny\u0171ek, magas teljes\u00edtm\u00e9ny\u0171ek \u00e9s az elit. Az elit \u2013 ez a Netflix, az Amazon, akik szupergyorsak, mindent gyorsan, sz\u00e9pen \u00e9s min\u0151s\u00e9gben csin\u00e1lnak.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/4fd98ef48a5cffdd6ae2ceea93dbb0bf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A m\u00e1sodik t\u00f6rt\u00e9net, ami \u00e9ppen egy h\u00f3nappal ezel\u0151tt t\u00f6rt\u00e9nt. A Technology Radar-ban megjelent egy nagyszer\u0171 jegyzet a Gitflow-r\u00f3l. A Gitflow abban k\u00fcl\u00f6nb\u00f6zik az \u00f6sszes t\u00f6bbit\u0151l, hogy az \u00e1gai sok\u00e1ig \u00e9lnek. Vannak kiad\u00e1si \u00e1gak, amelyek sok\u00e1ig \u00e9lnek, feature \u00e1gak, amelyek szint\u00e9n sok\u00e1ig \u00e9lnek. Ez a gyakorlat a Technology Radar-ban a HOLD-ba ker\u00fclt. Mi\u00e9rt? Mert az emberek szembes\u00fclnek az integr\u00e1ci\u00f3s f\u00e1jdalmakkal. <\/p>\n<p><\/p>\n<p>Ha az \u00e1g nagyon sok\u00e1ig \u00e9l, akkor elakad, megromlik, \u00e9s elkezd\u00fcnk t\u00f6bb id\u0151t pazarolni arra, hogy valamilyen v\u00e1ltoz\u00e1st vigy\u00fcnk bele. <\/p>\n<p><\/p>\n<p>Nemr\u00e9giben a Gitflow szerz\u0151je azt mondta, hogy ha a folyamatos integr\u00e1ci\u00f3ra t\u00f6rekszik, \u00e9s azt szeretn\u00e9, hogy a lehet\u0151 leggyakrabban bejusson, akkor a Gitflow rossz \u00f6tlet. K\u00fcl\u00f6n \u00edrt egy cikkben arr\u00f3l, hogy ha van backendje, ahol ezt c\u00e9lul t\u0171zheti ki, akkor a Gitflow felesleges, mert az lass\u00edtani fogja, \u00e9s probl\u00e9m\u00e1kat okoz az integr\u00e1ci\u00f3val. <\/p>\n<p><\/p>\n<p>Ez nem jelenti azt, hogy a Gitflow rossz, \u00e9s hogy nem kell haszn\u00e1lnia. M\u00e1s esetekre val\u00f3. P\u00e9ld\u00e1ul, amikor t\u00f6bb verzi\u00f3t kell fenntartania a szolg\u00e1ltat\u00e1sb\u00f3l vagy alkalmaz\u00e1sb\u00f3l, azaz amikor hosszabb id\u0151n \u00e1t kell t\u00e1mogatnia. <\/p>\n<p><\/p>\n<p>De ha besz\u00e9lget a szolg\u00e1ltat\u00e1sokat t\u00e1mogat\u00f3 emberekkel, sok f\u00e1jdalmat hall, hogy ez a verzi\u00f3 3.2 volt, ami n\u00e9gy h\u00f3nappal ezel\u0151tt k\u00e9sz\u00fclt, \u00e9s ebbe nem ker\u00fclt be ez a jav\u00edt\u00e1s, \u00e9s most, hogy ezt be lehessen vinni, rengeteg m\u00f3dos\u00edt\u00e1st kell v\u00e9gezni. \u00c9s megint elakadnak, \u00e9s hetekig dolgoznak azon, hogy be tudjanak illeszteni egy \u00faj funkci\u00f3t. <\/p>\n<p><\/p>\n<p>Ahogy Alexander Kovalev helyesen megjegyezte a csoportban, a korrel\u00e1ci\u00f3 nem egyenl\u0151 az ok-okozati \u00f6sszef\u00fcgg\u00e9ssel. \u00cdgy van. Azaz nincs k\u00f6zvetlen \u00f6sszef\u00fcgg\u00e9s, hogy ha van folyamatos integr\u00e1ci\u00f3, akkor minden mutat\u00f3 csod\u00e1latos lesz, nem. De van pozit\u00edv korrel\u00e1ci\u00f3, hogy ha az egyik, akkor val\u00f3sz\u00edn\u0171leg a m\u00e1sik is az. Nem biztos, de val\u00f3sz\u00edn\u0171. Ez csup\u00e1n egy korrel\u00e1ci\u00f3. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"A folyamatos integr\u00e1ci\u00f3 mint gyakorlat, nem pedig Jenkins. Andrej Alekszandr\" src=\"\/wp-content\/uploads\/2020\/09\/d5fc050550b0e9f86a1fdf85fff32fa5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dagy t\u0171nik, hogy m\u00e1r csin\u00e1lunk valamit, \u00fagy t\u0171nik, hogy m\u00e1r \u00f6ssze is olvadunk, de hogyan tudjuk meg, hogy a folyamatos integr\u00e1ci\u00f3 val\u00f3ban megvan, hogy el\u00e9g gyakran olvadunk \u00f6ssze?<\/p>\n<p><\/p>\n<p>Jez Humble a Handbook, az Accelerate, a Continuous Delivery webhely \u00e9s a \"Continuous Delivery\" k\u00f6nyv szerz\u0151je. \u0150 egy ilyen tesztet javasol:<\/p>\n<p><\/p>\n<ul>\n<li>A m\u00e9rn\u00f6k k\u00f3dja naponta ker\u00fcl be a master branchbe. <\/li>\n<li>Minden egyes commitn\u00e1l egys\u00e9gteszteket futtat.<\/li>\n<li>A masterben l\u00e9v\u0151 build megbukott, k\u00f6r\u00fclbel\u00fcl 10 percen bel\u00fcl jav\u00edtott\u00e1k.<\/li>\n<\/ul>\n<p><\/p>\n<p>Azt javasolja, hogy haszn\u00e1lja ezt a tesztet, hogy megbizonyosodjon arr\u00f3l, hogy a gyakorlat biztosan jelen van. <\/p>\n<p><\/p>\n<p>Az utols\u00f3t kicsit vit\u00e1snak tal\u00e1lom. Teh\u00e1t, ha 10 perc alatt tudj\u00e1tok jav\u00edtani, akkor van Continuous Integration, ez kicsit furcs\u00e1n hangzik a v\u00e9lem\u00e9nyem szerint, de van benne logika. Mi\u00e9rt? Mert ha gyakran egyes\u00edtetek, az azt jelenti, hogy a v\u00e1ltoz\u00e1sok kicsiek. Ha egy apr\u00f3 v\u00e1ltoz\u00e1s miatt megszakad a master build, gyorsan megtal\u00e1lj\u00e1tok az ok\u00e1t, mert a v\u00e1ltoz\u00e1s kicsi. Volt egy apr\u00f3 egyes\u00edt\u00e9s, amelyben 20-30 sor m\u00f3dosult. Ennek megfelel\u0151en gyorsan meg\u00e9rthetitek, hogy mi volt a probl\u00e9ma oka, mert a v\u00e1ltoz\u00e1sok apr\u00f3k, teh\u00e1t nagyon kicsi a hiba keres\u00e9si ter\u00fclete. <\/p>\n<p><\/p>\n<p>\u00c9s m\u00e9g ha a kiad\u00e1s ut\u00e1n a prod sz\u00e9tesik is, ha van Continuous Integration gyakorlatunk, sokkal k\u00f6nnyebb cselekedni, mert a v\u00e1ltoz\u00e1sok apr\u00f3k. Igen, ez \u00e9rinteni fogja a tervez\u00e9st. F\u00e1jni fog. \u00c9s val\u00f3sz\u00edn\u0171leg a legnehezebb e gyakorlatban az, hogy megszokj\u00e1tok, hogyan kell apr\u00f3 feladatokat v\u00e9gezni, teh\u00e1t hogyan lehet valamit megcsin\u00e1lni n\u00e9h\u00e1ny \u00f3ra alatt, \u00e9s mellette \u00e1tmenni a fel\u00fclvizsg\u00e1laton, ha van. A fel\u00fclvizsg\u00e1lat \u2013 ez egy k\u00fcl\u00f6n f\u00e1jdalom. <\/p>\n<p><\/p>\n<p>A unit tesztek csak seg\u00edt\u0151k, amelyek seg\u00edtenek meg\u00e9rteni, hogy val\u00f3ban sikeres volt-e az integr\u00e1ci\u00f3, val\u00f3ban semmi nem romlott el. V\u00e9lem\u00e9nyem szerint ez sem k\u00f6telez\u0151 elem, mert a gyakorlat l\u00e9nyege nem ez. <\/p>\n<p><\/p>\n<p>Ez r\u00f6viden a Continuous Integration. Ez minden, ami ebben a gyakorlatban szerepel. K\u00e9szen \u00e1llok a k\u00e9rd\u00e9sekre. <\/p>\n<p><\/p>\n<p>R\u00f6viden \u00f6sszefoglalva m\u00e9g egyszer:<\/p>\n<p><\/p>\n<ul>\n<li>A Continuous Integration nem Jenkins, ez nem GitLab.<\/li>\n<li>Ez nem eszk\u00f6z, hanem arr\u00f3l sz\u00f3l, hogy a lehet\u0151 legt\u00f6bbsz\u00f6r egyes\u00edtj\u00fck a k\u00f3dunkat a master-be. <\/li>\n<li>Ezt az\u00e9rt csin\u00e1ljuk, hogy elker\u00fclj\u00fck a j\u00f6v\u0151beli \u00f3ri\u00e1si f\u00e1jdalmakat, teh\u00e1t most kicsi f\u00e1jdalmat \u00e9rz\u00fcnk, hogy a j\u00f6v\u0151ben elker\u00fclj\u00fcnk egy nagyot. Ebben rejlik az eg\u00e9sz l\u00e9nyeg. <\/li>\n<li>A k\u00f3don kereszt\u00fcl kommunik\u00e1ci\u00f3 folyik, de ezt ritk\u00e1n l\u00e1tom, de ez\u00e9rt is tervezt\u00e9k.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>K\u00e9rd\u00e9sek<\/strong><\/p>\n<p><\/p>\n<p><em>Mit tegy\u00fcnk a nem dekompon\u00e1lhat\u00f3 feladatokkal?<\/em><\/p>\n<p><\/p>\n<p>Dekompon\u00e1lni. Mi a probl\u00e9ma? Tudn\u00e1l p\u00e9ld\u00e1t hozni, hogy van egy feladat, \u00e9s az nem dekompon\u00e1lhat\u00f3?<\/p>\n<p><\/p>\n<p><em>Vannak olyan feladatok, amelyeket egy\u00e1ltal\u00e1n nem lehet dekompon\u00e1lni, p\u00e9ld\u00e1ul azok, amelyek nagyon m\u00e9ly szak\u00e9rtelmet ig\u00e9nyelnek, \u00e9s amelyeket val\u00f3ban h\u00f3napokig lehet megoldani egy elviselhet\u0151 eredm\u00e9nyhez.<\/em> <\/p>\n<p><\/p>\n<p>Ha j\u00f3l \u00e9rtelek, van egy nagy \u00e9s komplex feladat, aminek az eredm\u00e9nye csak egy h\u00f3nap m\u00falva lesz l\u00e1that\u00f3?<\/p>\n<p><\/p>\n<p><em>Igen, pontosan. Igen, az eredm\u00e9nyt legkor\u00e1bban egy h\u00f3nap m\u00falva lehet \u00e9rt\u00e9kelni.<\/em> <\/p>\n<p><\/p>\n<p>J\u00f3l van. \u00d6sszess\u00e9g\u00e9ben ez nem probl\u00e9ma. Mi\u00e9rt? Mert ebben az esetben, amikor az \u00e1gakr\u00f3l besz\u00e9l\u00fcnk, nem egy olyan \u00e1gr\u00f3l besz\u00e9l\u00fcnk, amely benne van a funkci\u00f3val. A funkci\u00f3k lehetnek nagyok \u00e9s \u00f6sszetettek. Sok komponenst \u00e9rinthetnek. \u00c9s lehet, hogy nem tudjuk egy \u00e1gon teljesen megval\u00f3s\u00edtani \u0151ket. Ez norm\u00e1lis. Csak ezt a t\u00f6rt\u00e9netet kell sz\u00e9tbontanunk. Ha a funkci\u00f3 nem k\u00e9sz teljesen, az nem jelenti azt, hogy a k\u00f3dja egyes r\u00e9szei nem mergethet\u0151k. P\u00e9ld\u00e1ul hozz\u00e1adt\u00e1l egy migr\u00e1ci\u00f3t, \u00e9s a funkci\u00f3ban vannak bizonyos l\u00e9p\u00e9sek. P\u00e9ld\u00e1ul van egy l\u00e9p\u00e9s \u2013 a migr\u00e1ci\u00f3 elk\u00e9sz\u00edt\u00e9se, \u00faj met\u00f3dus hozz\u00e1ad\u00e1sa. Ezeket a dolgokat m\u00e1r napi rendszeress\u00e9ggel merge-elheted. <\/p>\n<p><\/p>\n<p><em>Rendben. Mi \u00e9rtelme van ennek?<\/em><\/p>\n<p><\/p>\n<p>Mi \u00e9rtelme van kicsi dolgokat napi szinten merge-elni?<\/p>\n<p><\/p>\n<p><em>Igen.<\/em><\/p>\n<p><\/p>\n<p>Ha valami elromlott, azt azonnal l\u00e1tod. Van egy kis darab, ami elromlott, \u00e9s k\u00f6nnyebb azt jav\u00edtani. Az \u00e9rtelme az, hogy egy kis darab most sokkal k\u00f6nnyebb merge-elni, mint egy nagyot n\u00e9h\u00e1ny h\u00e9t m\u00falva. A harmadik \u00e9rtelme pedig az, hogy m\u00e1s m\u00e9rn\u00f6k\u00f6k m\u00e1r a legfrissebb k\u00f3dverzi\u00f3val fognak dolgozni. L\u00e1tni fogj\u00e1k, hogy itt n\u00e9h\u00e1ny migr\u00e1ci\u00f3 hozz\u00e1 lett adva, ott megjelent egy \u00faj met\u00f3dus, amit szint\u00e9n lehet, hogy haszn\u00e1lni akarnak. Mindenki l\u00e1tni fogja, hogy mi t\u00f6rt\u00e9nik a k\u00f3dban. Pontosan ezek miatt a h\u00e1rom dolog miatt van ennek a gyakorlatnak \u00e9rtelme. <\/p>\n<p><\/p>\n<p><em>K\u00f6sz\u00f6n\u00f6m, a k\u00e9rd\u00e9s lez\u00e1rva!<\/em><\/p>\n<p><\/p>\n<p><em>(Oleg Soroka) Hozz\u00e1tehetek valamit? J\u00f3l mondtad, csak egy mondatot szeretn\u00e9k hozz\u00e1f\u0171zni.<\/em><\/p>\n<p><\/p>\n<p>Igen.<\/p>\n<p><\/p>\n<p><em>A Continuous Integration keret\u00e9ben a k\u00f3d a k\u00f6z\u00f6s \u00e1gba nem akkor merge-el\u0151dik, amikor a funkci\u00f3 teljesen k\u00e9sz, hanem amikor a build m\u00e1r nem hib\u00e1zik. \u00c9s b\u00e1tran commit\u00e1lhatsz a masterbe, ah\u00e1nyszor csak akarod naponta. A m\u00e1sodik szempont \u2013 ha valami okb\u00f3l nem tudod a havi feladatot legal\u00e1bb h\u00e1romnapos feladatokra bontani, nem besz\u00e9lve a h\u00e1rom\u00f3r\u00e1sakr\u00f3l, akkor hatalmas probl\u00e9m\u00e1d van. \u00c9s az a t\u00e9ny, hogy nincs Continuous Integration \u2013 ez a legkisebb ezek k\u00f6z\u00fcl a probl\u00e9m\u00e1k k\u00f6z\u00fcl. Ez azt jelenti, hogy probl\u00e9m\u00e1id vannak az architekt\u00far\u00e1val, \u00e9s az m\u00e9rn\u00f6ki gyakorlatod a null\u00e1n van. Mert ha ez m\u00e9g kutat\u00e1s is, akkor is meg kell jelen\u00edteni hipot\u00e9zisek vagy ciklusok form\u00e1j\u00e1ban.<\/em> <\/p>\n<p><\/p>\n<p><em>Besz\u00e9lt\u00fcnk n\u00e9gy olyan metrik\u00e1r\u00f3l, amelyek megk\u00fcl\u00f6nb\u00f6ztetik a sikeres v\u00e1llalatokat a lemarad\u00f3kt\u00f3l. Ezeket a n\u00e9gy metrik\u00e1t el\u0151bb m\u00e9g el kell \u00e9rni. Ha egy \u00e1tlagos feladat elv\u00e9gz\u00e9se egy h\u00f3napba telik, akkor el\u0151sz\u00f6r erre a metrik\u00e1ra kellene \u00f6sszpontos\u00edtani. Ezt el\u0151bb h\u00e1rom napra kellene cs\u00f6kkenteni, \u00e9s csak azut\u00e1n \u00e9rdemes a Continuous-ra gondolni.<\/em><\/p>\n<p><\/p>\n<p>J\u00f3l \u00e9rtettem, hogy azt gondolod, hogy \u00e1ltal\u00e1noss\u00e1gban nincs \u00e9rtelme befektetni a m\u00e9rn\u00f6ki gyakorlatokba, ha b\u00e1rmely feladat egy h\u00f3napig tart?<\/p>\n<p><\/p>\n<p><em>Van Continuous Integration-ed. Ott van az a t\u00e9ma, hogy h\u00fasz perc alatt vagy megjav\u00edtod a hib\u00e1t, vagy visszavonod. K\u00e9pzeld el, hogy kiadtad. R\u00e1ad\u00e1sul van folyamatos kiad\u00e1sod, kiadtad a produkci\u00f3ra, \u00e9s csak ut\u00e1na vetted \u00e9szre, hogy valami nem ment j\u00f3l. Vissza kell vonnod, de m\u00e1r megt\u00f6rt\u00e9nt az adatb\u00e1zis-migr\u00e1ci\u00f3. M\u00e1r a k\u00f6vetkez\u0151 verzi\u00f3j\u00fa adatb\u00e1zis s\u00e9ma van, s\u0151t, m\u00e9g egy adatb\u00e1zis ment\u00e9s is t\u00f6rt\u00e9nt, \u00e9s m\u00e1r adatok is ker\u00fcltek oda.<\/em><\/p>\n<p><\/p>\n<p><em>Mi a lehet\u0151s\u00e9ged? Ha visszavonod a k\u00f3dot, m\u00e1r nem tud kapcsol\u00f3dni ehhez az \u00faj, friss\u00edtett adatb\u00e1zishoz.<\/em><\/p>\n<p><\/p>\n<p>Az adatb\u00e1zis csak el\u0151re halad, igen. <\/p>\n<p><\/p>\n<p><em>Azok az emberek, akikn\u00e9l rossz m\u00e9rn\u00f6ki gyakorlat van, val\u00f3sz\u00edn\u0171leg nem is olvast\u00e1k el azt a vastag k\u00f6nyvet ... Mi a helyzet a ment\u00e9ssel? Ha egy ment\u00e9sb\u0151l \u00e1llsz helyre, akkor elvesz\u00edted az abban az id\u0151szakban megszerzett adatokat. P\u00e9ld\u00e1ul dolgozt\u00e1l h\u00e1rom \u00f3r\u00e1t az \u00faj verzi\u00f3j\u00fa adatb\u00e1zissal, ott regisztr\u00e1ltak felhaszn\u00e1l\u00f3k. Te a r\u00e9gi ment\u00e9sre \u00e1llsz vissza, mert az \u00faj verzi\u00f3j\u00fa s\u00e9ma nem m\u0171k\u00f6dik, ez\u00e9rt ezeket a felhaszn\u00e1l\u00f3kat elvesztetted. R\u00e1ad\u00e1sul \u0151k el\u00e9gedetlenek, \u00e9s panaszkodnak.<\/em><\/p>\n<p><\/p>\n<p><em>Ahhoz, hogy elsaj\u00e1t\u00edtsd a folyamatos integr\u00e1ci\u00f3t \u00e9s folyamatos sz\u00e1ll\u00edt\u00e1st t\u00e1mogat\u00f3 \u00f6sszes gyakorlatot, nem el\u00e9g csak annyit megtanulni, hogy .. Az els\u0151 dolog, hogy ezekb\u0151l lehet nagyon sok, ami gyakorlatilag haszn\u00e1lhatatlann\u00e1 v\u00e1lik. R\u00e1ad\u00e1sul vannak m\u00e1s gyakorlatok is, p\u00e9ld\u00e1ul a tudom\u00e1nyos megk\u00f6zel\u00edt\u00e9s. \u00c9ppen ez\u00e9rt n\u00e9pszer\u0171s\u00edtette a GitHub egy id\u0151ben. Ez az, amikor egyszerre fut a r\u00e9gi \u00e9s az \u00faj k\u00f3d. Amikor egy befejezetlen funkci\u00f3t k\u00e9sz\u00edtesz, de ez m\u00e1r visszaadhat valamilyen \u00e9rt\u00e9ket: ak\u00e1r funkci\u00f3k\u00e9nt, ak\u00e1r Rest API-k\u00e9nt. Futtatod az \u00faj \u00e9s a r\u00e9gi k\u00f3dot, \u00e9s \u00f6sszehasonl\u00edtod a kett\u0151 k\u00f6z\u00f6tti k\u00fcl\u00f6nbs\u00e9get. Ha van elt\u00e9r\u00e9s, akkor ezt az esem\u00e9nyt napl\u00f3zod. \u00cdgy tudod, hogy az \u00faj funkci\u00f3 k\u00e9szen \u00e1ll a r\u00e9gi hely\u00e9re val\u00f3 kiad\u00e1sra, ha bizonyos id\u0151n bel\u00fcl nem volt elt\u00e9r\u00e9s a kett\u0151 k\u00f6z\u00f6tt.<\/em> <\/p>\n<p><\/p>\n<p><em>Ilyen gyakorlatokb\u00f3l sz\u00e1z van. \u00c9n azt javasoln\u00e1m, hogy kezdj a transbase fejleszt\u00e9ssel. Ez nem 100%-ig a folyamatos integr\u00e1ci\u00f3n alapul, de a gyakorlatok azonosak, egyik a m\u00e1sik n\u00e9lk\u00fcl nem \u00e9l meg j\u00f3l.<\/em> <\/p>\n<p><\/p>\n<p>A transbase fejleszt\u00e9st hoztad p\u00e9ldak\u00e9nt, ahol meg lehet n\u00e9zni a gyakorlatokat, vagy azt javaslod, hogy az emberek kezdj\u00e9k el haszn\u00e1lni a transbase fejleszt\u00e9st?<\/p>\n<p><\/p>\n<p><em>N\u00e9zni, mivel haszn\u00e1lni nem tudj\u00e1k. Ahhoz, hogy haszn\u00e1lni tudj\u00e1k, sok mindent el kell olvasni. \u00c9s amikor a k\u00e9rd\u00e9s felmer\u00fcl a valakin\u00e9l: \u201eMit tegyek a funkci\u00f3val, ami egy h\u00f3napig tart\u201d, az azt jelenti, hogy nem olvasta el a transbase fejleszt\u00e9ssel kapcsolatos anyagokat. \u00c9n sem aj\u00e1nlan\u00e1m ezt most. Azt javaslom, hogy kifejezetten arra \u00f6sszpontos\u00edtsanak, hogyan kell helyesen architekt\u00far\u00e1val felosztani a nagyobb feladatokat kisebb r\u00e9szekre. Ez a dekompoz\u00edci\u00f3 l\u00e9nyege.<\/em><\/p>\n<p><\/p>\n<p><em>A dekompoz\u00edci\u00f3 az \u00e9p\u00edt\u00e9sz egyik eszk\u00f6ze. El\u0151sz\u00f6r elemz\u00e9st v\u00e9gz\u00fcnk, azt\u00e1n dekompoz\u00edci\u00f3t, majd szint\u00e9zist, v\u00e9g\u00fcl integr\u00e1ci\u00f3t. \u00cdgy minden \u00f6ssze\u00e1ll. A folyamatos integr\u00e1ci\u00f3hoz el\u0151sz\u00f6r dekompoz\u00edci\u00f3n kell kereszt\u00fclmenn\u00fcnk. Az els\u0151 l\u00e9p\u00e9sben felmer\u00fclnek k\u00e9rd\u00e9sek, m\u00edg m\u00e1r a negyedik l\u00e9p\u00e9sr\u0151l besz\u00e9l\u00fcnk, vagyis min\u00e9l gyakrabban v\u00e9gezz\u00fck az integr\u00e1ci\u00f3t, ann\u00e1l jobb. M\u00e9g korai ezt tenni, el\u0151sz\u00f6r ink\u00e1bb a monolitod sz\u00e9tbont\u00e1s\u00e1val \u00e9rdemes foglalkozni.<\/em> <\/p>\n<p><\/p>\n<p><em>N\u00e9h\u00e1ny nyilat \u00e9s n\u00e9gyzetet kell rajzolni egy diagramra. Nem mondhatod, hogy most bemutatok egy \u00faj alkalmaz\u00e1s architekt\u00far\u00e1j\u00e1t, \u00e9s csak egy n\u00e9gyzetet mutatok, amelyben egy z\u00f6ld gomb van az alkalmaz\u00e1s sz\u00e1m\u00e1ra. Minden esetben t\u00f6bb n\u00e9gyzet \u00e9s ny\u00edl lesz. B\u00e1rmely diagramban, amit l\u00e1ttam, t\u00f6bb mint egy volt. A grafikus megjelen\u00edt\u00e9s szintj\u00e9n t\u00f6rt\u00e9nik a dekompoz\u00edci\u00f3 is. Teh\u00e1t a n\u00e9gyzetek f\u00fcggetlenek lehetnek. Ha nem, akkor komoly k\u00e9rd\u00e9seim lenn\u00e9nek az architekt\u00e1hoz.<\/em> <\/p>\n<p><\/p>\n<p>Van egy k\u00e9rd\u00e9s a chatb\u0151l: \u201eHa a fel\u00fclvizsg\u00e1lat k\u00f6telez\u0151 \u00e9s sok\u00e1ig tart, egy napig vagy ann\u00e1l tov\u00e1bb?\u201d<\/p>\n<p><\/p>\n<p>Gondjaid vannak a gyakorlattal. A fel\u00fclvizsg\u00e1latnak nem szabad egy napig vagy tov\u00e1bb tartania. Ez ugyanaz a sztori, mint az el\u0151z\u0151 k\u00e9rd\u00e9s, csak kicsit enyh\u00e9bb. Ha a fel\u00fclvizsg\u00e1lat egy napig tart, val\u00f3sz\u00edn\u0171leg egy nagyon nagy v\u00e1ltoztat\u00e1s fel\u00fclvizsg\u00e1lata t\u00f6rt\u00e9nik. Ez\u00e9rt kisebbre kellene venni. Az Oleg \u00e1ltal aj\u00e1nlott transbase fejleszt\u00e9sben van egy t\u00f6rt\u00e9net, amit folyamatos fel\u00fclvizsg\u00e1latnak h\u00edvunk. Ennek az a l\u00e9nyege, hogy sz\u00e1nd\u00e9kosan olyan kicsi pull requestet k\u00e9sz\u00edt\u00fcnk, mert folyamatosan \u00e9s kicsit-kicsit szeretn\u00e9nk egyes\u00fclni. \u00cdgy a pull request egy absztrakci\u00f3t vagy 10 sort v\u00e1ltoztat. Ennek k\u00f6sz\u00f6nhet\u0151en a fel\u00fclvizsg\u00e1lat p\u00e1r percet vesz ig\u00e9nybe. <\/p>\n<p><\/p>\n<p>Ha a fel\u00fclvizsg\u00e1lat egy napig vagy tov\u00e1bb tart, akkor valami nem stimmel. El\u0151sz\u00f6r is, lehet, hogy probl\u00e9m\u00e1id vannak az architekt\u00far\u00e1val. Vagy egy nagy k\u00f3d r\u00e9szletr\u0151l van sz\u00f3, mondjuk 1000 sor. Vagy annyira bonyolult az architekt\u00far\u00e1d, hogy az ember nem tudja meg\u00e9rteni. Ez kicsit mell\u00e9ksz\u00e1l, de ezt is meg kell oldani. Lehet, hogy egy\u00e1ltal\u00e1n nincs sz\u00fcks\u00e9g fel\u00fclvizsg\u00e1latra. Ezen is el kell gondolkodni. A fel\u00fclvizsg\u00e1lat az a dolog, ami lelass\u00edt. \u00d6sszess\u00e9g\u00e9ben vannak el\u0151nyei, de tiszt\u00e1zni kell, mi\u00e9rt csin\u00e1lod ezt. Ez gyors inform\u00e1ci\u00f3\u00e1tad\u00e1s, vagy a bels\u0151 standardok meg\u00e1llap\u00edt\u00e1sa a sz\u00e1modra, vagy mi? Mi\u00e9rt van sz\u00fcks\u00e9ged r\u00e1? Mert a fel\u00fclvizsg\u00e1latot nagyon gyorsan kell v\u00e9gezni, vagy teljesen el kell t\u00f6r\u00f6lni. Ez olyan, mint a transbase fejleszt\u00e9s \u2013 egy nagyon sz\u00e9p t\u00f6rt\u00e9net, de csak \u00e9rett csapatok sz\u00e1m\u00e1ra. <\/p>\n<p><\/p>\n<p>A 4 metrik\u00e1val kapcsolatban aj\u00e1nlan\u00e1m, hogy mindenk\u00e9ppen vegy\u00e9tek le \u0151ket, hogy meg\u00e9rts\u00e9tek, hova vezet ez. Megn\u00e9zni a sz\u00e1mokat, megn\u00e9zni a k\u00e9pet, mennyire rossz minden. <\/p>\n<p><\/p>\n<p><em>(Dmitrij) K\u00e9szen \u00e1llok arra, hogy err\u0151l a t\u00e9m\u00e1r\u00f3l besz\u00e9lgessek veled. A sz\u00e1mok \u00e9s metrik\u00e1k klasszak, a praktik\u00e1k is klasszak. De meg kell \u00e9rteni, hogy a v\u00e1llalkoz\u00e1snak sz\u00fcks\u00e9ge van-e erre. Vannak v\u00e1llalkoz\u00e1sok, amelyeknek nincs sz\u00fcks\u00e9g\u00fck ilyen gyors v\u00e1ltoz\u00e1sokra. Ismerek olyan c\u00e9geket, ahol 15 percenk\u00e9nt nem lehet v\u00e1ltoztatni. Nem az\u00e9rt, mert rosszak lenn\u00e9nek. Ez az \u00e9letciklus. \u00c9s ahhoz, hogy a branch funkci\u00f3val vagy a toggle funkci\u00f3val dolgozzunk, m\u00e9ly ismeretek sz\u00fcks\u00e9gesek.<\/em> <\/p>\n<p><\/p>\n<p>Ez neh\u00e9z. Ha szeretn\u00e9l t\u00f6bbet olvasni a toggle funkci\u00f3 t\u00f6rt\u00e9net\u00e9r\u0151l, j\u00f3l aj\u00e1nlom. <noindex><a rel=\"nofollow\" href=\"https:\/\/trunkbaseddevelopment.com\/\">https:\/\/trunkbaseddevelopment.com\/<\/a><\/noindex>. \u00c9s van egy csod\u00e1latos cikk Martin Fowler-t\u00f3l a toggle funkci\u00f3kr\u00f3l: arr\u00f3l, hogy milyen t\u00edpusok l\u00e9teznek, \u00e9letciklusok stb. A toggle funkci\u00f3 \u2013 ez bonyolult. <\/p>\n<p><\/p>\n<p><em>De m\u00e9g mindig nem v\u00e1laszolt\u00e1l a k\u00e9rd\u00e9sre: \"A Jenkins sz\u00fcks\u00e9ges vagy nem sz\u00fcks\u00e9ges?\"<\/em><\/p>\n<p><\/p>\n<p>A Jenkins val\u00f3j\u00e1ban semmilyen esetben nem sz\u00fcks\u00e9ges. Ha komolyan vessz\u00fck, az eszk\u00f6z\u00f6k: Jenkins, Gitlab k\u00e9nyelmet fognak ny\u00fajtani. L\u00e1tni fogod, hogy a build elk\u00e9sz\u00fclt-e vagy sem. Seg\u00edthetnek neked, de a praktik\u00e1t nem adj\u00e1k. Csak egy kis k\u00f6r lesz: Ok, nem Ok. \u00c9s az is, ha \u00edrsz teszteket, mert ha nincsenek tesztek, az majdnem \u00e9rtelmetlen. Teh\u00e1t sz\u00fcks\u00e9ges, mert k\u00e9nyelmesebb, de \u00f6sszess\u00e9g\u00e9ben \u00e9lhetsz n\u00e9lk\u00fcle is, nem sokat vesz\u00edtesz. <\/p>\n<p><\/p>\n<p><em>Teh\u00e1t, ha vannak praktik\u00e1id, akkor ez azt jelenti, hogy nincs sz\u00fcks\u00e9ged r\u00e1?<\/em><\/p>\n<p><\/p>\n<p>Teljesen igaz. Aj\u00e1nlom a Jez Humble-f\u00e9le tesztet. Ott van nekem egy vegyes \u00e9rz\u00e9sem az utols\u00f3 ponttal kapcsolatban. De alapvet\u0151en, ha h\u00e1rom dolog van: folyamatosan merge-elsz, teszteket futtatsz a master commitjaidon, gyorsan jav\u00edtod a buildet a masterben, akkor lehet, hogy nem is sz\u00fcks\u00e9ges m\u00e1s. <\/p>\n<p><\/p>\n<p><em>M\u00edg v\u00e1runk a r\u00e9sztvev\u0151k k\u00e9rd\u00e9seire, van egy k\u00e9rd\u00e9sem. Most a term\u00e9k k\u00f3dj\u00e1r\u00f3l besz\u00e9lt\u00fcnk. Haszn\u00e1ltad-e infrastrukt\u00fara k\u00f3dra is? Ez ugyanaz a k\u00f3d, ugyanazok az elvek \u00e9s ugyanaz az \u00e9letciklus, vagy ott m\u00e1s \u00e9letciklusok \u00e9s elvek vannak? \u00c1ltal\u00e1ban, amikor mindenki a Continuous Integration \u00e9s Development-r\u0151l besz\u00e9l, elfelejtik, hogy van infrastrukt\u00fara k\u00f3d is. Az ut\u00f3bbi id\u0151ben egyre t\u00f6bb van bel\u0151le. \u00c9s sz\u00fcks\u00e9ges-e az \u00f6sszes ezek a szab\u00e1lyokat oda behozni?<\/em><\/p>\n<p><\/p>\n<p>Nem arr\u00f3l van sz\u00f3, hogy sz\u00fcks\u00e9ges, hanem hogy nagyszer\u0171 lenne, mert pontosan \u00edgy megk\u00f6nny\u00edten\u00e9 az \u00e9letet. Ahogy elkezd\u00fcnk k\u00f3ddal dolgozni, nem bash szkriptekkel, hanem norm\u00e1lis k\u00f3ddal.<\/p>\n<p><\/p>\n<p><em>\u00c1llj, \u00e1llj, a bash szkript is k\u00f3d. Ne bolygassd a r\u00e9gi szerelmemet.<\/em> <\/p>\n<p><\/p>\n<p>Rendben, nem fogom taposni az eml\u00e9keidet. Szem\u00e9lyesen ellenszenvvel vagyok a bash ir\u00e1nt. Cs\u00fany\u00e1n \u00e9s f\u00e9lelmetesen t\u00f6rik \u00f6ssze \u00e1lland\u00f3an. R\u00e1ad\u00e1sul gyakran impr\u00e9dik\u00e1lisan, ez\u00e9rt nem kedvelem. De rendben, tegy\u00fck fel, van egy k\u00f3dod bashben. Lehet, hogy t\u00e9nyleg nem \u00e9rtek hozz\u00e1, \u00e9s vannak norm\u00e1lis tesztel\u0151 keretrendszerek is benne. Egyszer\u0171en nem vagyok benne. \u00c9s ugyanazokat az el\u0151ny\u00f6ket kapjuk.<\/p>\n<p><\/p>\n<p>Amint infrastruktur\u00e1t dolgozunk k\u00f3d form\u00e1j\u00e1ban, ugyanazokkal a probl\u00e9m\u00e1kkal tal\u00e1lkozunk, mint a fejleszt\u0151k. N\u00e9h\u00e1ny h\u00f3nappal ezel\u0151tt szembes\u00fcltem azzal, hogy egy koll\u00e9g\u00e1m 1000 soros pull requestet k\u00fcld\u00f6tt bashben. \u00c9s te n\u00e9gy \u00f3r\u00e1n \u00e1t elfoglalt vagy a fel\u00fclvizsg\u00e1lattal. Ugyanazok a probl\u00e9m\u00e1k mer\u00fclnek fel. Ez m\u00e9g mindig k\u00f3d. \u00c9s m\u00e9g mindig k\u00f6z\u00f6s munka. Benne ragadunk a pull requestekn\u00e9l \u00e9s a bash mergen \u00fctk\u00f6z\u00e9sek megold\u00e1s\u00e1n\u00e1l, p\u00e9ld\u00e1ul. <\/p>\n<p><\/p>\n<p>Mostan\u00e1ban nagyon akt\u00edvan figyelem ezt a dolgot a lehet\u0151 legszebb infrastruktur\u00e1lis programoz\u00e1sban. Jelenleg Pulumi-t hoztam be az infrastrukt\u00far\u00e1ba. Ez tiszta programoz\u00e1s. Itt m\u00e9g szebb, mert szinte ugyanazokat a programoz\u00e1si nyelv lehet\u0151s\u00e9geit haszn\u00e1lom, pl. ugyanazzal az if-el gy\u00f6ny\u00f6r\u0171 toggle-okat k\u00e9sz\u00edtettem, \u00e9s minden rendben van. Azaz a v\u00e1ltoz\u00e1som m\u00e1r a masterbe ker\u00fclt. Mindenki l\u00e1tja. M\u00e1s m\u00e9rn\u00f6k\u00f6k tudom\u00e1sul vett\u00e9k. M\u00e1r hat\u00e1ssal volt valamire. De ez nem minden infrastrukt\u00far\u00e1hoz kapcsol\u00f3dik. P\u00e9ld\u00e1ul az \u00e9n tesztk\u00f6rnyezeteimhez aktiv\u00e1l\u00f3dott. Ez\u00e9rt v\u00e1laszolva a k\u00e9rd\u00e9sedre, sz\u00fcks\u00e9ges. Ez nek\u00fcnk, mint k\u00f3dot haszn\u00e1l\u00f3 m\u00e9rn\u00f6k\u00f6knek, ugyan\u00fagy megk\u00f6nny\u00edti az \u00e9let\u00fcnket. <\/p>\n<p><\/p>\n<p><em>Van m\u00e9g valakinek k\u00e9rd\u00e9se?<\/em> <\/p>\n<p><\/p>\n<p>Van egy k\u00e9rd\u00e9sem. Szeretn\u00e9m folytatni a vit\u00e1t Oleggel. \u00c1ltal\u00e1ban azt gondolom, hogy igazad van, ha egy feladat egy h\u00f3nap alatt k\u00e9sz\u00fcl el, akkor probl\u00e9m\u00e1d van az architekt\u00far\u00e1val, r\u00e9szletes elemz\u00e9ssel, dekompoz\u00edci\u00f3val, tervez\u00e9ssel stb. De van egy olyan \u00e9rz\u00e9sem, hogy ha megpr\u00f3b\u00e1lsz a Folyamatos Integr\u00e1ci\u00f3 szerint \u00e9lni, akkor elkezdesz jav\u00edtani a tervez\u00e9si f\u00e1jdalmakkal, mert m\u00e1sfel\u00e9 nem tudsz menek\u00fclni. <\/p>\n<p><\/p>\n<p><em>(Oleg) Igen, \u00edgy van. A munkaig\u00e9ny szempontj\u00e1b\u00f3l ez a gyakorlat \u00f6sszehasonl\u00edthat\u00f3 b\u00e1rmely m\u00e1s komoly gyakorlattal, amely megv\u00e1ltoztatja a kult\u00far\u00e1t. A legnehezebb az akad\u00e1lyok lek\u00fczd\u00e9se: k\u00fcl\u00f6n\u00f6sen a rossz szok\u00e1sok. Ha a gyakorlat bevezet\u00e9s\u00e9hez komoly habitusv\u00e1ltoz\u00e1sokra van sz\u00fcks\u00e9g a k\u00f6r\u00fcl\u00f6tted l\u00e9v\u0151kt\u0151l: fejleszt\u0151kt\u0151l, vezet\u0151s\u00e9gt\u0151l, termel\u00e9si menedzserekt\u0151l, meglepet\u00e9sek v\u00e1rnak r\u00e1d.<\/em> <\/p>\n<p><\/p>\n<p><em>Milyen meglepet\u00e9sek ad\u00f3dhatnak? Tegy\u00fck fel, hogy \u00fagy d\u00f6nt\u00f6tt\u00e9l, gyakrabban fogsz integr\u00e1lni. \u00c9s az integr\u00e1ci\u00f3hoz kapcsol\u00f3dik m\u00e9g n\u00e9h\u00e1ny dolog, p\u00e9ld\u00e1ul artefaktumok. A c\u00e9gedben p\u00e9ld\u00e1ul van egy politika, hogy minden artefaktumot valami m\u00f3don nyilv\u00e1n kell tartani egy artefaktumrakt\u00e1roz\u00e1si rendszerben. Ennek pedig van egy id\u0151ig\u00e9nye. Az embernek r\u00e1 kell b\u00f3lintania, hogy \u0151, mint kiad\u00e1ssal foglalkoz\u00f3 menedzser, tesztelte azt az artefaktumot, hogy alkalmas legyen a production rendszerbe val\u00f3 kihelyez\u00e9shez. Ha ez 5-10-15 percet vesz ig\u00e9nybe, de hetente egyszer kihelyezel, akkor hetente f\u00e9l \u00f3r\u00e1t r\u00e1sz\u00e1nni \u2013 ez nem sz\u00e1m\u00edt nagy terhel\u00e9snek.<\/em> <\/p>\n<p><\/p>\n<p><em>Ha naponta 10 alkalommal v\u00e9gzel folyamatos integr\u00e1ci\u00f3t, akkor ezt a 10-et meg kell szorozni 30 perccel. \u00c9s ez meghaladja ennek a kiad\u00e1si menedzsernek a munkaid\u0151keret\u00e9t. Egyszer\u0171en elf\u00e1rad ebben. Vannak \u00e1lland\u00f3 k\u00f6lts\u00e9gek egyes gyakorlatokra. \u00c9s ennyi.<\/em> <\/p>\n<p><\/p>\n<p><em>Vagy t\u00f6r\u00f6ln\u00f6d kell ezt a szab\u00e1lyt, hogy ne foglalkozz ilyen h\u00fclyes\u00e9gekkel, azaz nem rendelkezel k\u00e9zzel valamif\u00e9le megfelel\u0151s\u00e9gr\u0151l. Teljes m\u00e9rt\u00e9kben egy automatiz\u00e1lt k\u00e9szs\u00e9gtesztre b\u00edzod magad.<\/em> <\/p>\n<p><\/p>\n<p><em>Ha sz\u00fcks\u00e9ged van valakit\u0151l egy igazol\u00e1sra, hogy a f\u0151n\u00f6k al\u00e1\u00edrja, \u00e9s nem mersz a production rendszerbe menni an\u00e9lk\u00fcl, hogy Vasja azt mondta volna, hogy enged\u00e9lyezi, stb. \u2013 mindenf\u00e9le z\u0171r megakad\u00e1lyozza a gyakorlatokat. Mert ha vannak kapcsol\u00f3d\u00f3 aktivit\u00e1sok, mint valamilyen ad\u00f3, akkor minden 100-szor nagyobb\u00e1 v\u00e1lik. Ez\u00e9rt a v\u00e1ltoz\u00e1s nem mindenkinek \u00f6r\u00f6mteli. Mert az emberek szok\u00e1sait neh\u00e9z megv\u00e1ltoztatni.<\/em> <\/p>\n<p><\/p>\n<p><em>Amikor az ember megszokott munk\u00e1t v\u00e9gez, azt gyakorlatilag nem gondolkodva teszi. A kognit\u00edv terhel\u00e9se nulla. Csak elv\u00e9gzi a feladatokat, m\u00e1r van a fej\u00e9ben egy ellen\u0151rz\u0151 lista, ezerszer csin\u00e1lta m\u00e1r. \u00c9s amint j\u00f6ssz \u00e9s mondod neki: \u201eT\u00f6r\u00f6lj\u00fck ezt a gyakorlatot, \u00e9s h\u00e9tf\u0151t\u0151l vezess\u00fcnk be egy \u00fajat\u201d, ez hatalmas kognit\u00edv terhel\u00e9st okoz sz\u00e1m\u00e1ra. R\u00e1ad\u00e1sul ez mindenkire egyszerre hat.<\/em> <\/p>\n<p><\/p>\n<p><em>Ez\u00e9rt a legegyszer\u0171bb, igaz, ezt a luxust nem mindenki engedheti meg mag\u00e1nak, de \u00e9n mindig \u00edgy cselekszem. Amikor elindul egy \u00faj projekt, akkor \u00e1ltal\u00e1ban az \u00f6sszes kipr\u00f3b\u00e1latlan gyakorlat azonnal ebbe a projektbe ker\u00fcl. Am\u00edg a projekt fiatal, nem kock\u00e1ztatunk t\u00fal sokat. A prod m\u00e9g nincs k\u00e9sz, \u00edgy nincs mit romba d\u00f6nteni. Ez\u00e9rt edz\u00e9sk\u00e9nt is lehet haszn\u00e1lni. Ez a megk\u00f6zel\u00edt\u00e9s m\u0171k\u00f6dik. De nem minden c\u00e9gnek van lehet\u0151s\u00e9ge gyakran ilyen projekteket ind\u00edtani. B\u00e1r ez is kicsit furcsa, mert most folyik a digit\u00e1lis transzform\u00e1ci\u00f3, mindenkinek k\u00eds\u00e9rleteznie kell, hogy l\u00e9p\u00e9st tartson a versenyt\u00e1rsakkal.<\/em> <\/p>\n<p><\/p>\n<p>Itt abba \u00fctk\u00f6z\u00f6l, hogy el\u0151sz\u00f6r meg kell \u00e9rtened, mit is kell tenni. A vil\u00e1g nem t\u00f6k\u00e9letes, a prod sem t\u00f6k\u00e9letes. <\/p>\n<p><\/p>\n<p><em>Igen, ezek a dolgok \u00f6sszef\u00fcggnek.<\/em><\/p>\n<p><\/p>\n<p>A v\u00e1llalkoz\u00e1soknak sem mindig van tudom\u00e1suk arr\u00f3l, hogy hova kellene haladniuk. <\/p>\n<p><\/p>\n<p><em>Van olyan helyzet, amikor semmilyen v\u00e1ltoz\u00e1s nem lehets\u00e9ges. Ez a helyzet akkor \u00e1ll el\u0151, amikor a csapatra nagyobb nyom\u00e1s nehezedik. A csapat m\u00e1r el\u00e9gg\u00e9 ki\u00e9gett. Nincs idej\u00fck k\u00eds\u00e9rletezni. Reggelt\u0151l estig \u00faj funkci\u00f3kat fejlesztenek. \u00c9s a vezet\u00e9s nem el\u00e9gedett a funkci\u00f3kkal, egyre t\u00f6bbet k\u00f6vetelnek. Ilyen helyzetben val\u00f3j\u00e1ban semmif\u00e9le v\u00e1ltoz\u00e1s nem lehets\u00e9ges. Csak annyit tudnak mondani a csapatnak, hogy holnap \u00fagy dolgozunk, mint tegnap, csak egy kicsit t\u00f6bb funkci\u00f3t kell k\u00e9sz\u00edteni. Semmilyen gyakorlatra \u00e1tt\u00e9rni ebben az \u00e9rtelemben nem lehets\u00e9ges. Ez egy klasszikus helyzet, amikor nincs id\u0151 a balta \u00e9lez\u00e9s\u00e9re, f\u00e1t kell v\u00e1gni, ez\u00e9rt tompa balt\u00e1val v\u00e1gnak. Itt nincsenek egyszer\u0171 tan\u00e1csok.<\/em> <\/p>\n<p><\/p>\n<p><em>(Dmitrij) Felolvasom a pontos\u00edt\u00e1st a chatr\u00f3l: \u201eDe nagy tesztlefedetts\u00e9gre van sz\u00fcks\u00e9g k\u00fcl\u00f6nb\u00f6z\u0151 szinteken. Mennyi id\u0151t sz\u00e1nnak a tesztel\u00e9sre? Valahogy t\u00fal dr\u00e1ga, sok id\u0151t elvesz.\u201d<\/em><\/p>\n<p><\/p>\n<p><em>(Oleg) Ez a klasszikus t\u00e9vhit. El\u00e9g tesztnek kell lennie ahhoz, hogy \u00f6nbizalommal rendelkezzen. A Continuous Integration nem olyan dolog, ahol el\u0151sz\u00f6r 100%-os teszt k\u00f6vetkezik, \u00e9s csak ut\u00e1na kezded el alkalmazni ezt a gyakorlatot. A Continuous Integration cs\u00f6kkenti a kognit\u00edv terhel\u00e9st az\u00e1ltal, hogy minden egyes v\u00e1ltoztat\u00e1s, amit a szemed l\u00e1t, olyan nyilv\u00e1nval\u00f3, hogy meg\u00e9rted \u2013 elt\u00f6rik-e valamit vagy sem, m\u00e9g tesztel\u00e9s n\u00e9lk\u00fcl is. Fejben gyorsan tesztelheted, mert kicsi a v\u00e1ltoz\u00e1s. M\u00e9g ha csak manu\u00e1lis tesztel\u0151k is vannak, nekik is k\u00f6nnyebb. Kiadtad, \u00e9s mondtad: \"N\u00e9zd, nem t\u00f6r\u00f6tt el semmi?\". Ellen\u0151rizt\u00e9k, \u00e9s azt mondt\u00e1k: \"Nem, semmi nem t\u00f6r\u00f6tt el\". Mert a tesztel\u0151 tudja, hova n\u00e9zzen. Van egy commit, amely egy k\u00f3dfoszl\u00e1nyhoz kapcsol\u00f3dik. \u00c9s ez konkr\u00e9t viselked\u00e9st produk\u00e1l.<\/em><\/p>\n<p><\/p>\n<p>Itt persze kicsit sz\u00e9p\u00edtett\u00e9l. <\/p>\n<p><\/p>\n<p><em>(Dmitry) Itt nem \u00e9rtek egyet. Van egy gyakorlat \u2013 a tesztel\u00e9s \u00e1ltali fejleszt\u00e9s, ami \u00e9ppen ett\u0151l meg fog menteni.<\/em> <\/p>\n<p><\/p>\n<p><em>(Oleg) Igen, id\u00e1ig m\u00e9g nem jutottam el. Az els\u0151 ill\u00fazi\u00f3 az, hogy 100%-os tesztet kell \u00edrni, vagy egy\u00e1ltal\u00e1n nem kell foglalkozni a Continuous Integration-nel. Ez nem igaz. Ez k\u00e9t p\u00e1rhuzamos gyakorlat. \u00c9s k\u00f6zvetlen\u00fcl nem f\u00fcggenek egym\u00e1st\u00f3l. A tesztlefedetts\u00e9gednek optim\u00e1lisnak kell lennie. Az optim\u00e1lis azt jelenti, hogy magabiztos vagy abban, hogy a mestered min\u0151s\u00e9ge, amely a commit ut\u00e1n maradt, lehet\u0151v\u00e9 teszi, hogy magabiztosan nyomd meg a \"Deploy\" gombot p\u00e9ntek este, r\u00e9szeg \u00e1llapotban. Hogyan \u00e9red ezt el? \u00c1tn\u00e9z\u00e9sekkel, lefedetts\u00e9ggel, j\u00f3 monitoroz\u00e1ssal.<\/em> <\/p>\n<p><\/p>\n<p><em>A j\u00f3 monitoroz\u00e1s nem k\u00fcl\u00f6nb\u00f6zik a tesztekt\u0151l. Ha a teszteket egyszer futtatod a pre prod-on, akkor azok egyszer ellen\u0151rzik az \u00f6sszes felhaszn\u00e1l\u00f3i szcen\u00e1ri\u00f3t, \u00e9s ennyi. De ha v\u00e9gtelen ciklusban futtatod \u0151ket, akkor ez a kib\u0151v\u00edtett monitoroz\u00e1si rendszered, ami v\u00e9gtelen\u00fcl mindent tesztel \u2013 \u00f6sszeomlott-e vagy sem. Ebben az esetben a k\u00fcl\u00f6nbs\u00e9g csak az egyszeri vagy t\u00f6bbsz\u00f6ri futtat\u00e1s. Egy nagyon j\u00f3 tesztk\u00e9szlet\u2026, amelyet v\u00e9gtelen\u00fcl futtatsz, ez a monitoroz\u00e1s. \u00c9s a helyes monitoroz\u00e1snak pontosan ilyennek kell lennie.<\/em> <\/p>\n<p><\/p>\n<p><em>\u00c9s ez\u00e9rt, hogyan \u00e9red el ezt az \u00e1llapotot, amikor p\u00e9ntek este ki tudsz telep\u00edteni, \u00e9s hazamehetsz, az egy m\u00e1sik k\u00e9rd\u00e9s. Lehet, hogy egyszer\u0171en mer\u00e9sz vagy.<\/em> <\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fcnk vissza kicsit a Continuous Integration-re. Kiss\u00e9 elt\u00e9rt\u00fcnk egy olyan \u00f6sszetett gyakorlatra. <\/p>\n<p><\/p>\n<p><em>A m\u00e1sodik ill\u00fazi\u00f3 pedig az, hogy az MVP-t gyorsan kell elk\u00e9sz\u00edteni, ez\u00e9rt ott a tesztek egy\u00e1ltal\u00e1n nem sz\u00fcks\u00e9gesek. Ez nem eg\u00e9szen \u00edgy van. Az a helyzet, hogy amikor MVP-t \u00edrsz, a user story-t vagy \u00fagy fejleszted, hogy hallottad, van egy user story \u00e9s azonnal neki\u00e1llsz k\u00f3dolni, vagy TDD alapj\u00e1n dolgozol. \u00c9s a TDD szerint, ahogy a gyakorlat mutatja, nem is tart tov\u00e1bb, azaz a tesztek mell\u00e9kterm\u00e9kek. A TDD gyakorlata nem arr\u00f3l sz\u00f3l, hogy tesztelj\u00fcnk. Annak ellen\u00e9re, hogy Test Driven Development-nek h\u00edvj\u00e1k, itt val\u00f3j\u00e1ban nem a tesztekr\u0151l van sz\u00f3. Ez ink\u00e1bb egy architektur\u00e1lis megk\u00f6zel\u00edt\u00e9s. Ez az a megk\u00f6zel\u00edt\u00e9s, hogyan \u00edrjuk azt, amire sz\u00fcks\u00e9g van, \u00e9s ne \u00edrjunk olyat, amire nincs sz\u00fcks\u00e9g. Ez a gyakorlat a figyelem \u00f6sszpontos\u00edt\u00e1s\u00e1ra vonatkozik a gondolatod k\u00f6vetkez\u0151 iter\u00e1ci\u00f3j\u00e1ra az alkalmaz\u00e1s architekt\u00far\u00e1j\u00e1nak l\u00e9trehoz\u00e1sa sor\u00e1n.<\/em> <\/p>\n<p><\/p>\n<p><em>Ez\u00e9rt ezeket az ill\u00fazi\u00f3kat nem olyan egyszer\u0171 megsz\u00fcntetni. Az MVP \u00e9s a tesztek nem z\u00e1rj\u00e1k ki egym\u00e1st. Ink\u00e1bb ellenkez\u0151leg, ha az MVP-t TDD gyakorlat szerint k\u00e9sz\u00edted, akkor jobban \u00e9s gyorsabban k\u00e9sz\u00fcl el, mint ha egy\u00e1ltal\u00e1n nem alkalmazn\u00e1d a gyakorlatot, hanem csak \u00fagy, ahogy esik.<\/em><\/p>\n<p><\/p>\n<p>Ez egy nagyon nem nyilv\u00e1nval\u00f3 \u00e9s \u00f6sszetett gondolat. Amikor hallod, hogy most m\u00e9g teszteket is \u00edrok, \u00e9s \u00edgy gyorsabban elv\u00e9gzek valamit, ez teljesen \u00e9sszer\u0171tlen\u00fcl hangzik. <\/p>\n<p><\/p>\n<p><em>(Dmitrij) Itt sokan, amikor MVP-t emlegetnek, a n\u00e9p lustas\u00e1ga miatt nem akarnak norm\u00e1lisan \u00edrni. \u00c9s ezek m\u00e9gis k\u00fcl\u00f6nb\u00f6z\u0151 dolgok. Az MVP-t ne v\u00e1ltoztassuk valami rossz dologg\u00e1, ami nem m\u0171k\u00f6dik.<\/em> <\/p>\n<p><\/p>\n<p>Igen, igazad van.<\/p>\n<p><\/p>\n<p><em>Azt\u00e1n hirtelen az MVP a produkci\u00f3s k\u00f6rnyezetbe.<\/em><\/p>\n<p><\/p>\n<p>\u00d6r\u00f6kre. <\/p>\n<p><\/p>\n<p>A TDD nagyon szokatlanul hangzik, amikor hallod, hogy tesztet \u00edrsz, \u00e9s l\u00e1tsz\u00f3lag t\u00f6bb munk\u00e1t v\u00e9gzel. Ez nagyon furcs\u00e1n hangzik, de val\u00f3j\u00e1ban \u00edgy gyorsabb \u00e9s szebb is. Amikor \u00edrsz egy tesztet, m\u00e1r a fejedben sokat gondolsz arra, milyen k\u00f3dot \u00edrsz, \u00e9s hogyan fogj\u00e1k azt h\u00edvni, valamint milyen viselked\u00e9st v\u00e1runk t\u0151le. Nem csak azt mondod, hogy \u00edrtam egy funkci\u00f3t, \u00e9s az valamit csin\u00e1l. El\u0151sz\u00f6r \u00e1tgondolod, hogy ezek a felt\u00e9telek vannak, \u00edgy fognak h\u00edvni. Ezt te tesztekkel feded le, \u00e9s ebb\u0151l meg\u00e9rted, hogyan fognak kin\u00e9zni a k\u00f3dod bels\u0151 interf\u00e9szei. Ez nagyon er\u0151sen hat az architekt\u00far\u00e1ra. A k\u00f3dod automatikusan modul\u00e1risabb\u00e1 v\u00e1lik, mert el\u0151sz\u00f6r pr\u00f3b\u00e1lod meg\u00e9rteni, hogyan fogod azt tesztelni, \u00e9s csak ut\u00e1na \u00edrod meg. <\/p>\n<p><\/p>\n<p>N\u00e1lam a TDD \u00fagy alakult, hogy egy id\u0151ben egy Ruby mentort fogadtam, mikor m\u00e9g Ruby programoz\u00f3 voltam. Azt mondja: \u201eCsin\u00e1lj TDD-t\u201d. \u00c9n meg gondoltam: \u201eJaj, most m\u00e9g valamit pluszban kellene \u00edrnom\u201d. Meg\u00e1llapodtunk, hogy k\u00e9t h\u00e9t alatt minden munka k\u00f3dot Pythonban TDD alatt \u00edrok. K\u00e9t h\u00e9t m\u00falva r\u00e1j\u00f6ttem, hogy nem akarok visszat\u00e9rni. K\u00e9t h\u00e9t pr\u00f3b\u00e1lkoz\u00e1s ut\u00e1n, hogy ezt mindenhol alkalmazzam, \u00e9szrevettem, hogy mennyivel k\u00f6nnyebb m\u00e1r csak gondolkodni. De ez nem nyilv\u00e1nval\u00f3, ez\u00e9rt mindenkinek azt javaslom, hogy ha \u00fagy \u00e9rzi, a TDD neh\u00e9z, hosszadalmas \u00e9s felesleges, pr\u00f3b\u00e1lja meg k\u00e9t h\u00e9tig k\u00f6vetni. Nekem ez elegend\u0151 volt.<\/p>\n<p><\/p>\n<p><em>(Dmitrij) Ezt a gondolatot az infrastrukt\u00fara \u00fczemeltet\u00e9s\u00e9nek szempontj\u00e1b\u00f3l is kifejthetj\u00fck. Miel\u0151tt valami \u00fajat ind\u00edtunk, monitorozunk, majd ind\u00edtunk. Ebben az esetben a monitoroz\u00e1s norm\u00e1lis tesztel\u00e9s mellett zajlik. \u00c9s a monitoroz\u00e1s \u00e1ltal t\u00f6rt\u00e9nik a fejleszt\u00e9s. De szinte mindenki azt mondja, hogy ez hosszadalmas, lusta vagyok, csin\u00e1ltam egy ideiglenes v\u00e1zlatot. Ha norm\u00e1lisan monitoroztunk, meg\u00e9rtj\u00fck a CI rendszer \u00e1llapot\u00e1t. A CI rendszerben sok a monitoroz\u00e1s. Meg\u00e9rtj\u00fck a rendszer \u00e1llapot\u00e1t, tudjuk, mi folyik benne. A fejleszt\u00e9s sor\u00e1n \u00e9ppen azt csin\u00e1ljuk, hogy a rendszer eljusson a sz\u00fcks\u00e9ges \u00e1llapotba.<\/em> <\/p>\n<p><\/p>\n<p><em>Ezek a gyakorlatok r\u00e9g\u00f3ta ismertek. K\u00f6r\u00fclbel\u00fcl n\u00e9gy \u00e9ve besz\u00e9lt\u00fcnk err\u0151l. De n\u00e9gy \u00e9v alatt szinte semmi sem v\u00e1ltozott.<\/em> <\/p>\n<p><\/p>\n<p><em>De ezen a megjegyz\u00e9sen javaslom, hogy z\u00e1rjuk le a hivatalos vit\u00e1t.<\/em><\/p>\n<p><\/p>\n<p>Vide\u00f3 (be\u00e1gyazva mint m\u00e9diaelem, de valami\u00e9rt nem m\u0171k\u00f6dik):<\/p>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/zZ3qXVN3Oic\">https:\/\/youtu.be\/zZ3qXVN3Oic<\/a><\/noindex><br \/>\n<br \/>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/518406\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0431\u0441\u0443\u0434\u0438\u043c \u043f\u043e\u0447\u0435\u043c\u0443 CI-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 CI \u2013 \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e \u0440\u0430\u0437\u043d\u043e\u0435. \u041a\u0430\u043a\u0443\u044e \u0431\u043e\u043b\u044c CI \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0438\u0434\u0435\u044f, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0447\u0442\u043e \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Jenkins. \u041c\u044b\u0441\u043b\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u043a\u043b\u0430\u0434 \u043f\u0440\u043e Continuous Integration \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0435\u0449\u0435 \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434, \u043a\u043e\u0433\u0434\u0430 \u044f \u0445\u043e\u0434\u0438\u043b \u043f\u043e \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0438\u0441\u043a\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443. \u041f\u043e\u043e\u0431\u0449\u0430\u043b\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":93886,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-93885","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\/hu\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\udd47Continuous Integration \u043a\u0430\u043a \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u0430 \u043d\u0435 Jenkins. \u0410\u043d\u0434\u0440\u0435\u0439 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov\" \/>\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-09-10T17:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-10T17:42:23+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\udd47Continuous Integration mint gyakorlat, nem Jenkins. Andrej Alexandrov | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\udd47Continuous Integration \u043a\u0430\u043a \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u0430 \u043d\u0435 Jenkins. \u0410\u043d\u0434\u0440\u0435\u0439 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432 | ProHoster","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov","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-09-10T17:42:23+00:00","article:modified_time":"2020-09-10T17:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"93885","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 11:37:31","updated":"2022-09-27 15:57:30","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/93885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=93885"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/93885\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/93886"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=93885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=93885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=93885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}