{"id":78676,"date":"2020-04-21T07:42:22","date_gmt":"2020-04-21T05:42:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya"},"modified":"2020-04-21T07:42:22","modified_gmt":"2020-04-21T05:42:22","slug":"devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","title":{"rendered":"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>\u010c\u00e1st 1: Web \/ Android<\/h1>\n<p>\n <u>Pozn\u00e1mka<\/u>: <i>tento \u010dl\u00e1nek je p\u0159eklad origin\u00e1ln\u00edho \u010dl\u00e1nku do ru\u0161tiny\u00a0<\/i><noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@altunin.alexey.a\/devops-tools-are-not-only-for-devops-building-test-automation-infrastructure-from-scratch-18e351dde938?source=friends_link&amp;sk=54dcbf6ab96c5592d093b50e441f942e\"><i>\u201eDevOps n\u00e1stroje nejsou ur\u010deny pouze pro DevOps. Budov\u00e1n\u00ed infrastruktury pro automatizaci testov\u00e1n\u00ed od nuly.\u201c<\/i><\/a><\/noindex><i> V\u0161echny ilustrace, odkazy, citace a term\u00edny jsou v\u0161ak zachov\u00e1ny v p\u016fvodn\u00edm jazyce, aby se p\u0159ede\u0161lo zkreslen\u00ed v\u00fdznamu p\u0159i p\u0159ekladu do ru\u0161tiny. P\u0159eji v\u00e1m p\u0159\u00edjemn\u00e9 studium!<\/i><\/p>\n<p><img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/3d2ffb8331713a18755213cafac02144.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n V sou\u010dasnosti je specializace DevOps jednou z nej\u017e\u00e1dan\u011bj\u0161\u00edch v IT pr\u016fmyslu. Pokud nav\u0161t\u00edv\u00edte popul\u00e1rn\u00ed pracovn\u00ed port\u00e1ly a nastav\u00edte filtr podle mezd, uvid\u00edte, \u017ee pracovn\u00ed nab\u00eddky souvisej\u00edc\u00ed s DevOps se nach\u00e1zej\u00ed na za\u010d\u00e1tku seznamu. Je v\u0161ak d\u016fle\u017eit\u00e9 pochopit, \u017ee se to v\u011bt\u0161inou t\u00fdk\u00e1 pozice 'Senior', co\u017e znamen\u00e1, \u017ee kandid\u00e1t m\u00e1 vysokou \u00farove\u0148 dovednost\u00ed a znalost\u00ed technologi\u00ed a n\u00e1stroj\u016f. S t\u00edm se poj\u00ed tak\u00e9 vysok\u00e1 m\u00edra odpov\u011bdnosti za bezprobl\u00e9mov\u00fd chod produkce. Zapomn\u011bli jsme v\u0161ak, co DevOps vlastn\u011b je. P\u016fvodn\u011b to nebyl konkr\u00e9tn\u00ed \u010dlov\u011bk nebo odd\u011blen\u00ed. Pokud budeme hledat definice tohoto term\u00ednu, najdeme mnoho kr\u00e1sn\u00fdch a spr\u00e1vn\u00fdch podstatn\u00fdch jmen, jako jsou metodologie, praxe, kulturn\u00ed filozofie, skupina koncept\u016f a tak d\u00e1le.<\/p>\n<p>Moje specializace - in\u017een\u00fdr pro automatizaci testov\u00e1n\u00ed (QA automation engineer), ale domn\u00edv\u00e1m se, \u017ee by nem\u011bla b\u00fdt spojena pouze s psan\u00edm automatizovan\u00fdch test\u016f nebo v\u00fdvojem architektury testovac\u00edho frameworku. V roce 2020 jsou znalosti infrastruktury automatizace tak\u00e9 nezbytn\u00e9. To umo\u017e\u0148uje uspo\u0159\u00e1dat proces automatizace samostatn\u011b, po\u010d\u00ednaje spou\u0161t\u011bn\u00edm test\u016f a kon\u010de poskytov\u00e1n\u00edm v\u00fdsledk\u016f v\u0161em zainteresovan\u00fdm stran\u00e1m v souladu s c\u00edli. V\u00fdsledkem jsou dovednosti DevOps, kter\u00e9 jsou nezbytn\u00fdm faktorem pro vykon\u00e1v\u00e1n\u00ed t\u00e9to pr\u00e1ce. A to je v\u0161echno hezk\u00e9, ale bohu\u017eel existuje probl\u00e9m (<i>spoilery: tento \u010dl\u00e1nek se sna\u017e\u00ed tento probl\u00e9m zjednodu\u0161it<\/i>). Spo\u010d\u00edv\u00e1 v tom, \u017ee DevOps je slo\u017eit\u00e9. A to je z\u0159ejm\u00e9, nebo\u0165 firmy nebudou platit hodn\u011b za n\u011bco, co se d\u00e1 snadno ud\u011blat\u2026 Ve sv\u011bt\u011b DevOps existuje mnoho n\u00e1stroj\u016f, term\u00edn\u016f a praktik, kter\u00e9 je t\u0159eba zvl\u00e1dnout. Zejm\u00e9na na za\u010d\u00e1tku kari\u00e9ry je to obt\u00ed\u017en\u00e9 a z\u00e1vis\u00ed to na nasb\u00edran\u00fdch technick\u00fdch zku\u0161enostech.<\/p>\n<p><img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/20712bd4acf881d5346b87f5a2b359d2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nZdroj: <noindex><a rel=\"nofollow\" href=\"http:\/\/maximelanciauxbi.blogspot.com\/2017\/04\/devops-tools.html\"> http:\/\/maximelanciauxbi.blogspot.com\/2017\/04\/devops-tools.html<\/a><\/noindex><\/p>\n<p>Tady bychom asi m\u011bli zakon\u010dit s \u00favodn\u00ed \u010d\u00e1st\u00ed a soust\u0159edit se na c\u00edle tohoto \u010dl\u00e1nku.\u00a0<\/p>\n<h3>O \u010dem je tento \u010dl\u00e1nek<\/h3>\n<p>\nV tomto \u010dl\u00e1nku se chci pod\u011blit o sv\u00e9 zku\u0161enosti s budov\u00e1n\u00edm infrastruktury pro automatizaci testov\u00e1n\u00ed. Na internetu lze naj\u00edt mnoho zdroj\u016f informac\u00ed o r\u016fzn\u00fdch n\u00e1stroj\u00edch a jejich pou\u017eit\u00ed, ale r\u00e1d bych je posoudil v\u00fdhradn\u011b z pohledu automatizace. P\u0159edpokl\u00e1d\u00e1m, \u017ee mnoha in\u017een\u00fdr\u016fm automatizace je zn\u00e1m\u00e1 situace, kdy testy, kter\u00e9 jste vytvo\u0159ili, nikdo krom\u011b v\u00e1s nespou\u0161t\u00ed a nezaj\u00edm\u00e1 se o jejich \u00fadr\u017ebu. V d\u016fsledku toho se testy st\u00e1vaj\u00ed zastaral\u00fdmi a je nutn\u00e9 v\u011bnovat \u010das jejich aktualizaci. Op\u011bt, na za\u010d\u00e1tku kari\u00e9ry m\u016f\u017ee b\u00fdt takov\u00fd \u00fakol docela slo\u017eit\u00fd: spr\u00e1vn\u011b se rozhodnout, kter\u00e9 n\u00e1stroje by m\u011bly pomoci vy\u0159e\u0161it tento probl\u00e9m, jak je vybrat, nastavit a udr\u017eovat. N\u011bkte\u0159\u00ed testova\u010di se obracej\u00ed na DevOps (lidi) a, bu\u010fme up\u0159\u00edmn\u00ed, takov\u00fd p\u0159\u00edstup funguje. V mnoha p\u0159\u00edpadech to m\u016f\u017ee b\u00fdt jedin\u00e9 \u0159e\u0161en\u00ed, proto\u017ee n\u00e1m chyb\u00ed p\u0159ehled o v\u0161ech z\u00e1vislostech. Jak v\u00edme, DevOps jsou velmi zam\u011bstnan\u00ed lid\u00e9, proto\u017ee se mus\u00ed starat o infrastrukturu cel\u00e9 firmy, nasazen\u00ed, monitorov\u00e1n\u00ed, mikroservisy a dal\u0161\u00ed podobn\u00e9 \u00fakoly podle organizace\/t\u00fdmu. Jak to b\u00fdv\u00e1, automatizace nen\u00ed na prvn\u00edm m\u00edst\u011b. V takov\u00e9m p\u0159\u00edpad\u011b bychom se m\u011bli sna\u017eit ud\u011blat v\u0161e, co je v na\u0161ich sil\u00e1ch od za\u010d\u00e1tku do konce. To sn\u00ed\u017e\u00ed z\u00e1vislosti, urychl\u00ed pracovn\u00ed proces, zlep\u0161\u00ed na\u0161e dovednosti a umo\u017en\u00ed n\u00e1m vid\u011bt \u0161ir\u0161\u00ed obraz toho, co se d\u011bje.<\/p>\n<p>V \u010dl\u00e1nku jsou uvedeny nej\u017e\u00e1dan\u011bj\u0161\u00ed a nejobl\u00edben\u011bj\u0161\u00ed n\u00e1stroje a uk\u00e1z\u00e1no, jak je pou\u017e\u00edt k postupn\u00e9mu budov\u00e1n\u00ed infrastruktury automatizace. Ka\u017ed\u00e1 skupina je p\u0159edstavena n\u00e1stroji, kter\u00e9 byly ov\u011b\u0159eny na osobn\u00ed zku\u0161enosti. Ale to neznamen\u00e1, \u017ee mus\u00edte pou\u017e\u00edvat tot\u00e9\u017e. Samotn\u00e9 n\u00e1stroje nejsou d\u016fle\u017eit\u00e9, objevuj\u00ed se a zastar\u00e1vaj\u00ed. Na\u0161\u00edm in\u017een\u00fdrsk\u00fdm \u00fakolem je pochopen\u00ed z\u00e1kladn\u00edch princip\u016f: pro\u010d pot\u0159ebujeme tuto skupinu n\u00e1stroj\u016f a jak\u00e9 pracovn\u00ed \u00fakoly m\u016f\u017eeme s jejich pomoc\u00ed vy\u0159e\u0161it. Proto na konci ka\u017ed\u00e9 sekce zanech\u00e1v\u00e1m odkazy na podobn\u00e9 n\u00e1stroje, kter\u00e9 se mo\u017en\u00e1 pou\u017e\u00edvaj\u00ed ve va\u0161\u00ed organizaci.<\/p>\n<h3>Co v tomto \u010dl\u00e1nku nen\u00ed<\/h3>\n<p>\nJe\u0161t\u011b jednou opakuji, \u017ee \u010dl\u00e1nek nen\u00ed o konkr\u00e9tn\u00edch n\u00e1stroj\u00edch, proto zde nebudou \u017e\u00e1dn\u00e9 \u00faryvky k\u00f3du z dokumentace a popisy konkr\u00e9tn\u00edch p\u0159\u00edkaz\u016f. Na konci ka\u017ed\u00e9 sekce v\u0161ak ponech\u00e1v\u00e1m odkazy pro podrobn\u00e9 studium.<\/p>\n<p>To bylo ud\u011bl\u00e1no z d\u016fvodu, \u017ee:\u00a0<\/p>\n<ul>\n<li>tento materi\u00e1l je velmi snadno dostupn\u00fd v r\u016fzn\u00fdch zdroj\u00edch (dokumentace, knihy, videokurzy);<\/li>\n<li>pokud se do toho pono\u0159\u00edme, budeme muset napsat 10, 20, 30 \u010d\u00e1st\u00ed tohoto \u010dl\u00e1nku (zat\u00edmco pl\u00e1nujeme 2-3);<\/li>\n<li>jednodu\u0161e nechci pl\u00fdtvat va\u0161\u00edm \u010dasem, proto\u017ee mo\u017en\u00e1 chcete pou\u017e\u00edt jin\u00e9 n\u00e1stroje k dosa\u017een\u00ed stejn\u00fdch c\u00edl\u016f.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Praxe<\/h3>\n<p>\nR\u00e1d bych, aby byl tento materi\u00e1l u\u017eite\u010dn\u00fd pro ka\u017ed\u00e9ho \u010dten\u00e1\u0159e, a ne jen p\u0159e\u010dten\u00fd a zapomenut\u00fd. P\u0159i ka\u017ed\u00e9m studiu je praxe velmi d\u016fle\u017eit\u00fdm prvkem. Proto jsem p\u0159ipravil<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> repository na GitHubu se krok za krokem pr\u016fvodcem, jak v\u0161e ud\u011blat od za\u010d\u00e1tku<\/a><\/noindex>. Tak\u00e9 v\u00e1s \u010dek\u00e1 dom\u00e1c\u00ed \u00fakol, abyste si byli jisti, \u017ee jste bezmy\u0161lenkovit\u011b nekop\u00edrovali \u0159\u00e1dky vykon\u00e1van\u00fdch p\u0159\u00edkaz\u016f <\/p>\n<h3>Pl\u00e1n<\/h3>\n<p><\/p>\n<p><strong>Krok<\/strong><br \/>\n<strong>Technologie<\/strong><br \/>\n<strong>N\u00e1stroje<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nLok\u00e1ln\u00ed spu\u0161t\u011bn\u00ed (p\u0159\u00edprava webov\u00fdch \/ android demo test\u016f a jejich spu\u0161t\u011bn\u00ed m\u00edstn\u011b)\u00a0<br \/>\nNode.js, Selenium, Appium<\/p>\n<p><strong>2<\/strong><br \/>\nSyst\u00e9my spr\u00e1vy verz\u00ed\u00a0<br \/>\nGit<\/p>\n<p><strong>3<\/strong><br \/>\nKontejnerizace<br \/>\nDocker, Selenium grid, Selenoid (Web, Android)<\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<p><strong>5<\/strong><br \/>\nCloudov\u00e9 platformy<br \/>\nGoogle Cloud Platform<\/p>\n<p><strong>6<\/strong><br \/>\nOrchestrace<br \/>\nKubernetes<\/p>\n<p><strong>7<\/strong><br \/>\nInfrastruktura jako k\u00f3d (IaC)<br \/>\nTerraform, Ansible<\/p>\n<p><\/p>\n<h3>Struktura ka\u017ed\u00e9 sekce<\/h3>\n<p>\nAbychom udr\u017eeli vypr\u00e1v\u011bn\u00ed vizu\u00e1ln\u011b p\u0159ehledn\u00e9, ka\u017ed\u00e1 sekce je pops\u00e1na podle n\u00e1sleduj\u00edc\u00edho pl\u00e1nu:<\/p>\n<ul>\n<li>kr\u00e1tk\u00fd popis technologie,<\/li>\n<li>hodnota pro automatizaci infrastruktury,<\/li>\n<li>ilustrace aktu\u00e1ln\u00edho stavu infrastruktury,<\/li>\n<li>odkazy k studiu,<\/li>\n<li>podobn\u00e9 n\u00e1stroje.<\/li>\n<\/ul>\n<p><\/p>\n<h2>1. Lok\u00e1ln\u00ed spu\u0161t\u011bn\u00ed test\u016f<\/h2>\n<p><\/p>\n<h3>Kr\u00e1tk\u00fd popis technologie<\/h3>\n<p>\nTo je pouze p\u0159\u00edpravn\u00fd krok pro spu\u0161t\u011bn\u00ed demonstra\u010dn\u00edch test\u016f m\u00edstn\u011b a pro ov\u011b\u0159en\u00ed, \u017ee \u00fasp\u011b\u0161n\u011b prob\u00edhaj\u00ed. V praktick\u00e9 \u010d\u00e1sti se pou\u017e\u00edv\u00e1 Node.js, ale programovac\u00ed jazyk a platforma nejsou tak\u00e9 d\u016fle\u017eit\u00e9 a m\u016f\u017eete pou\u017e\u00edt ty, kter\u00e9 se pou\u017e\u00edvaj\u00ed ve va\u0161\u00ed spole\u010dnosti.\u00a0<\/p>\n<p>Jako automatiza\u010dn\u00ed n\u00e1stroje v\u0161ak doporu\u010duji pou\u017e\u00edvat Selenium WebDriver pro webov\u00e9 platformy a Appium pro platformu Android, proto\u017ee v dal\u0161\u00edch kroc\u00edch budeme pou\u017e\u00edvat Docker obrazy, kter\u00e9 jsou speci\u00e1ln\u011b navr\u017eeny pro pr\u00e1ci s t\u011bmito n\u00e1stroji. Krom\u011b toho, jak ukazuj\u00ed po\u017eadavky v pracovn\u00edch inzer\u00e1tech, jsou tyto n\u00e1stroje na trhu nej\u017e\u00e1dan\u011bj\u0161\u00ed.<\/p>\n<p>Jak jste si mohli v\u0161imnout, zam\u011b\u0159ujeme se pouze na webov\u00e9 a Android testy. Bohu\u017eel IOS je zcela jin\u00fd p\u0159\u00edb\u011bh (d\u011bkujeme Apple). Pl\u00e1nuji uk\u00e1zat \u0159e\u0161en\u00ed a praktiky souvisej\u00edc\u00ed s IOS v dal\u0161\u00edch \u010d\u00e1stech.<\/p>\n<h3>Hodnota pro automatiza\u010dn\u00ed infrastrukturu<\/h3>\n<p>\nZ pohledu infrastruktury nem\u00e1 lok\u00e1ln\u00ed spu\u0161t\u011bn\u00ed \u017e\u00e1dnou hodnotu. Pouze ov\u011b\u0159ujete, \u017ee testy funguj\u00ed na lok\u00e1ln\u00edm stroji v lok\u00e1ln\u00edch prohl\u00ed\u017ee\u010d\u00edch a simul\u00e1torech. Ka\u017edop\u00e1dn\u011b je to v\u0161ak pot\u0159ebn\u00fd v\u00fdchoz\u00ed bod.<\/p>\n<h3>Ilustrace aktu\u00e1ln\u00edho stavu infrastruktury<\/h3>\n<p>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/504f28744e29938f66be41c32d9a7dc6.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Odkazy pro studium<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/selenium.dev\/\">Selenium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/appium.io\/docs\/en\/about-appium\/getting-started\/\">Appium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developer.android.com\/studio\/run\/emulator\">Emul\u00e1tor Android<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/tree\/master\/javascript\/node\/selenium-webdriver\/example\">P\u0159\u00edklady Selenium JS na GitHubu<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appium\/appium\/tree\/master\/sample-code\/javascript-wd\">P\u0159\u00edklady Appium JS na GitHubu<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobn\u00e9 n\u00e1stroje<\/h3>\n<p><\/p>\n<ul>\n<li>jak\u00fdkoli programovac\u00ed jazyk, kter\u00fd m\u00e1te r\u00e1di, v kombinaci se Selenium\/Appium \u2013 testy;<\/li>\n<li>jak\u00e9koli testy;<\/li>\n<li>jak\u00fdkoli testovac\u00ed b\u011b\u017eec.<\/li>\n<\/ul>\n<p><\/p>\n<h2>2. Syst\u00e9my verzov\u00e1n\u00ed (Git)<\/h2>\n<p><\/p>\n<h3>Kr\u00e1tk\u00fd popis technologie<\/h3>\n<p>\n Pro nikoho nebude velk\u00fdm p\u0159ekvapen\u00edm, kdy\u017e \u0159eknu, \u017ee syst\u00e9m verzov\u00e1n\u00ed je nesm\u00edrn\u011b d\u016fle\u017eitou sou\u010d\u00e1st\u00ed v\u00fdvoje jak v t\u00fdmu, tak individu\u00e1ln\u011b. Na z\u00e1klad\u011b r\u016fzn\u00fdch zdroj\u016f m\u016f\u017eeme s jistotou \u0159\u00edci, \u017ee Git je nejpopul\u00e1rn\u011bj\u0161\u00ed reprezentant. Syst\u00e9m verzov\u00e1n\u00ed poskytuje mnoho v\u00fdhod, jako je sd\u00edlen\u00ed k\u00f3du, ukl\u00e1d\u00e1n\u00ed verz\u00ed, obnoven\u00ed do p\u0159edchoz\u00edch v\u011btv\u00ed, sledov\u00e1n\u00ed historie projektu, z\u00e1lohov\u00e1n\u00ed. Nebudeme diskutovat o ka\u017ed\u00e9m bod\u011b podrobn\u011b, proto\u017ee jsem si jist\u00fd, \u017ee s t\u00edmto jste dob\u0159e obezn\u00e1meni a pou\u017e\u00edv\u00e1te to v ka\u017edodenn\u00ed pr\u00e1ci. Ale pokud ne, doporu\u010duji pozastavit \u010dten\u00ed tohoto \u010dl\u00e1nku a co nejd\u0159\u00edve tento nedostatek dohnat.<\/p>\n<h3>Hodnota pro automatiza\u010dn\u00ed infrastrukturu<\/h3>\n<p>\n A zde se m\u016f\u017eete zeptat: \u201ePro\u010d n\u00e1m vypr\u00e1v\u00ed o Gitu? To v\u0161ichni znaj\u00ed a pou\u017e\u00edvaj\u00ed jak pro k\u00f3dov\u00e1n\u00ed, tak pro automatizovan\u00e9 testy.\u201c Budete naprosto v pr\u00e1vu, ale v tomto \u010dl\u00e1nku hovo\u0159\u00edme o infrastruktu\u0159e a tato sekce hraje roli \u00favodu k sekci 7: \u201eInfrastruktura jako k\u00f3d (IaC)\u201c. Pro n\u00e1s to znamen\u00e1, \u017ee cel\u00e1 infrastruktura, v\u010detn\u011b testovac\u00ed, je pops\u00e1na jako k\u00f3d, a proto na ni m\u016f\u017eeme tak\u00e9 aplikovat syst\u00e9my verzov\u00e1n\u00ed a z\u00edskat podobn\u00e9 v\u00fdhody jako pro v\u00fdvojov\u00fd a automatiza\u010dn\u00ed k\u00f3d.<\/p>\n<p>Pod\u00edv\u00e1me se na IaC podrobn\u011bji v kroku 7, ale u\u017e nyn\u00ed m\u016f\u017eete za\u010d\u00edt pou\u017e\u00edvat Git lok\u00e1ln\u011b t\u00edm, \u017ee vytvo\u0159\u00edte m\u00edstn\u00ed repozit\u00e1\u0159. Celkov\u00fd obraz se roz\u0161\u00ed\u0159\u00ed, kdy\u017e p\u0159id\u00e1me k infrastruktu\u0159e vzd\u00e1len\u00fd repozit\u00e1\u0159.<\/p>\n<h3>Ilustrace aktu\u00e1ln\u00edho stavu infrastruktury<\/h3>\n<p>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/f17c1d2b2f18aa814c44f7c443e49416.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Odkazy pro studium<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.atlassian.com\/git\/tutorials\/what-is-version-control\">Co je spr\u00e1va verz\u00ed<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/\">Git<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/git-scm.com\/book\/en\/v2\/Getting-Started-About-Version-Control\">Za\u010d\u00edn\u00e1me \u2014 O spr\u00e1v\u011b verz\u00ed<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobn\u00e9 n\u00e1stroje<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/subversion.apache.org\/\">SVN<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.mercurial-scm.org\/guide\">Mercurial<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/azure.microsoft.com\/en-us\/services\/devops\/server\/\">Microsoft TFS (nyn\u00ed sou\u010d\u00e1st Azure DevOps Services)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>3. Kontejnery (Docker)<\/h2>\n<p><\/p>\n<h3>Kr\u00e1tk\u00fd popis technologie<\/h3>\n<p>\n Abychom uk\u00e1zali, jak kontejnery zm\u011bnily pravidla hry, vra\u0165me se o n\u011bkolik desetilet\u00ed zp\u011bt. V t\u00e9 dob\u011b lid\u00e9 nakupovali a pou\u017e\u00edvali serverov\u00e9 stroje pro spu\u0161t\u011bn\u00ed aplikac\u00ed. V mnoha p\u0159\u00edpadech v\u0161ak nebyly p\u0159edem zn\u00e1my pot\u0159ebn\u00e9 zdroje pro spu\u0161t\u011bn\u00ed. To vedlo k tomu, \u017ee spole\u010dnosti utr\u00e1cely pen\u00edze za n\u00e1kup drah\u00fdch v\u00fdkonn\u00fdch server\u016f, ale \u010d\u00e1st t\u011bchto zdroj\u016f nebyla pln\u011b vyu\u017eita.<\/p>\n<p>Dal\u0161\u00edm stupn\u011bm evoluce byly virtu\u00e1ln\u00ed stroje (VM), kter\u00e9 vy\u0159e\u0161ily probl\u00e9m utr\u00e1cen\u00ed pen\u011bz za nevyu\u017e\u00edvan\u00e9 zdroje. Tato technologie umo\u017enila spou\u0161t\u011bt aplikace nez\u00e1visle na sob\u011b uvnit\u0159 jednoho serveru a p\u0159id\u011blovala zcela izolovan\u00fd prostor. Bohu\u017eel v\u0161ak ka\u017ed\u00e1 technologie m\u00e1 sv\u00e9 nev\u00fdhody. Spu\u0161t\u011bn\u00ed VM vy\u017eaduje plnohodnotn\u00fd opera\u010dn\u00ed syst\u00e9m, kter\u00fd spot\u0159ebov\u00e1v\u00e1 CPU, RAM, \u00falo\u017ei\u0161t\u011b a v z\u00e1vislosti na OS je nutn\u00e9 zv\u00e1\u017eit n\u00e1klady na licenci. Tyto faktory ovliv\u0148uj\u00ed rychlost spu\u0161t\u011bn\u00ed a komplikuj\u00ed p\u0159enositelnost.<\/p>\n<p>A tak jsme se dostali ke kontejnerizaci. Znovu tato technologie vy\u0159e\u0161ila p\u0159edchoz\u00ed probl\u00e9m, proto\u017ee kontejnery nevy\u017eaduj\u00ed plnohodnotn\u00fd OS, co\u017e uvol\u0148uje zna\u010dn\u00e9 mno\u017estv\u00ed zdroj\u016f a poskytuje rychl\u00e9 a flexibiln\u00ed \u0159e\u0161en\u00ed pro p\u0159enositelnost.<\/p>\n<p>Samoz\u0159ejm\u011b, technologie kontejnerizace nen\u00ed nic nov\u00e9ho a poprv\u00e9 byla p\u0159edstavena na konci 70. let. V t\u00e9 dob\u011b bylo provedeno mnoho v\u00fdzkum\u016f, prac\u00ed a pokus\u016f. Ale pr\u00e1v\u011b Docker tuto technologii p\u0159izp\u016fsobil a u\u010dinil ji snadno dostupnou pro masy. V dne\u0161n\u00ed dob\u011b, kdy\u017e mluv\u00edme o kontejneru, v\u011bt\u0161inou m\u00e1me na mysli Docker. Kdy\u017e hovo\u0159\u00edme o Docker kontejnerech, m\u00e1me na mysli Linux kontejnery. M\u016f\u017eeme pou\u017e\u00edt Windows a macOS syst\u00e9my pro spu\u0161t\u011bn\u00ed kontejner\u016f, ale je d\u016fle\u017eit\u00e9 pochopit, \u017ee v takov\u00e9m p\u0159\u00edpad\u011b vznik\u00e1 dal\u0161\u00ed vrstva. Nap\u0159\u00edklad, Docker na Macu ti\u0161e spou\u0161t\u00ed kontejnery uvnit\u0159 lehk\u00e9ho Linux VM. K tomuto t\u00e9matu se je\u0161t\u011b vr\u00e1t\u00edme, kdy\u017e budeme diskutovat o spu\u0161t\u011bn\u00ed emul\u00e1tor\u016f Androidu uvnit\u0159 kontejner\u016f, proto\u017ee zde vznik\u00e1 velmi d\u016fle\u017eit\u00fd nuance, kterou je t\u0159eba podrobn\u011bji prozkoumat.<\/p>\n<h3>Hodnota pro automatiza\u010dn\u00ed infrastrukturu<\/h3>\n<p>\n Zjistili jsme, \u017ee kontejnerizace a Docker jsou skv\u011bl\u00e9. Pod\u00edvejme se na to v kontextu automatizace, nebo\u0165 ka\u017ed\u00fd n\u00e1stroj nebo technologie by m\u011bly vy\u0159e\u0161it n\u011bjak\u00fd probl\u00e9m. Poj\u010fme stanovit z\u0159ejm\u00e9 probl\u00e9my automatizace testov\u00e1n\u00ed v kontextu UI test\u016f:<\/p>\n<ul>\n<li>obrovsk\u00e9 mno\u017estv\u00ed z\u00e1vislost\u00ed p\u0159i instalaci Selenium a zejm\u00e9na Appium;<\/li>\n<li>probl\u00e9my s kompatibilitou mezi verzemi prohl\u00ed\u017ee\u010d\u016f, simul\u00e1tor\u016f a ovlada\u010d\u016f;<\/li>\n<li>absence izolovan\u00e9ho prostoru pro prohl\u00ed\u017ee\u010de\/simul\u00e1tory, co\u017e je zvl\u00e1\u0161t\u011b kritick\u00e9 pro paraleln\u00ed spu\u0161t\u011bn\u00ed;<\/li>\n<li>t\u011b\u017ek\u00e9 na spr\u00e1vu a \u00fadr\u017ebu, pokud je t\u0159eba sou\u010dasn\u011b spustit 10, 50, 100 nebo dokonce 1000 prohl\u00ed\u017ee\u010d\u016f.<\/li>\n<\/ul>\n<p>\nAle proto\u017ee Selenium je nejpopul\u00e1rn\u011bj\u0161\u00edm n\u00e1strojem automatizace a Docker je nejpopul\u00e1rn\u011bj\u0161\u00edm n\u00e1strojem kontejnerizace, nem\u011blo by nikoho p\u0159ekvapit, \u017ee se n\u011bkdo pokusil je spojit, aby z\u00edskal mocn\u00fd n\u00e1stroj pro \u0159e\u0161en\u00ed v\u00fd\u0161e zm\u00edn\u011bn\u00fdch probl\u00e9m\u016f. Poj\u010fme se na takov\u00e1 \u0159e\u0161en\u00ed pod\u00edvat podrobn\u011bji.\u00a0<\/p>\n<p><u>Selenium grid v Dockeru<\/u><\/p>\n<p>Tento n\u00e1stroj je nejpopul\u00e1rn\u011bj\u0161\u00ed na sv\u011bt\u011b Selenium pro spu\u0161t\u011bn\u00ed n\u011bkolika prohl\u00ed\u017ee\u010d\u016f na n\u011bkolika stroj\u00edch a jejich spr\u00e1vu z centr\u00e1ln\u00edho uzlu. K jeho spu\u0161t\u011bn\u00ed je pot\u0159eba registrovat alespo\u0148 2 \u010d\u00e1sti: Hub a Node(y). Hub je centr\u00e1ln\u00ed uzel, kter\u00fd p\u0159ij\u00edm\u00e1 v\u0161echny po\u017eadavky od test\u016f a rozd\u011bluje je mezi odpov\u00eddaj\u00edc\u00ed Nodes. Pro ka\u017ed\u00fd Node m\u016f\u017eeme nastavit konkr\u00e9tn\u00ed konfiguraci, nap\u0159\u00edklad zad\u00e1n\u00edm po\u017eadovan\u00e9ho prohl\u00ed\u017ee\u010de a jeho verze. Nicm\u00e9n\u011b, st\u00e1le se mus\u00edme postarat o kompatibiln\u00ed ovlada\u010de pro prohl\u00ed\u017ee\u010de a nainstalovat je na p\u0159\u00edslu\u0161n\u00e9 Nodes. Z tohoto d\u016fvodu se Selenium grid b\u011b\u017en\u011b nepou\u017e\u00edv\u00e1 v \u010dist\u00e9 podob\u011b, s v\u00fdjimkou p\u0159\u00edpad\u016f, kdy pot\u0159ebujeme pracovat s prohl\u00ed\u017ee\u010di, kter\u00e9 nelze nainstalovat na Linux OS. Pro v\u0161echny ostatn\u00ed p\u0159\u00edpady bude mnohem flexibiln\u011bj\u0161\u00edm a spr\u00e1vn\u00fdm \u0159e\u0161en\u00edm vyu\u017eit\u00ed Docker obraz\u016f pro spu\u0161t\u011bn\u00ed Selenium grid Hub a Nodes. Tento p\u0159\u00edstup velmi usnad\u0148uje spr\u00e1vu uzl\u016f, proto\u017ee m\u016f\u017eeme vybrat po\u017eadovan\u00fd obraz s ji\u017e nainstalovan\u00fdmi kompatibiln\u00edmi verzemi prohl\u00ed\u017ee\u010d\u016f a ovlada\u010d\u016f.<\/p>\n<p>I p\u0159es negativn\u00ed zp\u011btnou vazbu o stabilit\u011b pr\u00e1ce, zejm\u00e9na p\u0159i spu\u0161t\u011bn\u00ed velk\u00e9ho po\u010dtu Nodes paraleln\u011b, z\u016fst\u00e1v\u00e1 Selenium grid st\u00e1le nejpopul\u00e1rn\u011bj\u0161\u00edm n\u00e1strojem pro paraleln\u00ed spu\u0161t\u011bn\u00ed Selenium test\u016f. Je d\u016fle\u017eit\u00e9 poznamenat, \u017ee v open-source neust\u00e1le vznikaj\u00ed r\u016fzn\u00e9 opravy a modifikace tohoto n\u00e1stroje, kter\u00e9 se sna\u017e\u00ed eliminovat r\u016fzn\u00e1 \u00fazk\u00e1 m\u00edsta.<\/p>\n<p><u>Selenoid pro Web<\/u><\/p>\n<p>Tento n\u00e1stroj je revoluc\u00ed ve sv\u011bt\u011b Selenium, proto\u017ee funguje okam\u017eit\u011b a zna\u010dn\u011b usnadnil \u017eivot mnoha automatiza\u010dn\u00edm in\u017een\u00fdr\u016fm. P\u0159edev\u0161\u00edm se nejedn\u00e1 o dal\u0161\u00ed modifikaci Selenium grid. M\u00edsto toho v\u00fdvoj\u00e1\u0159i vytvo\u0159ili zcela novou verzi Selenium Hub v jazyce Golang, co\u017e spolu s lehk\u00fdmi Docker obrazy pro r\u016fzn\u00e9 prohl\u00ed\u017ee\u010de posunulo automatizaci testov\u00e1n\u00ed kup\u0159edu. Nav\u00edc v p\u0159\u00edpad\u011b Selenium Grid mus\u00edme p\u0159edem ur\u010dit v\u0161echny po\u017eadovan\u00e9 prohl\u00ed\u017ee\u010de a jejich verze, co\u017e nen\u00ed probl\u00e9m, kdy\u017e pracujeme pouze s jedn\u00edm prohl\u00ed\u017ee\u010dem. Ale kdy\u017e jde o v\u00edce podporovan\u00fdch prohl\u00ed\u017ee\u010d\u016f, Selenoid je \u0159e\u0161en\u00ed \u010d\u00edslo jedna d\u00edky funkci 'prohl\u00ed\u017ee\u010d na po\u017e\u00e1d\u00e1n\u00ed'. V\u0161echno, co pot\u0159ebujeme, je p\u0159edem st\u00e1hnout pot\u0159ebn\u00e9 obrazy s prohl\u00ed\u017ee\u010di a aktualizovat konfigura\u010dn\u00ed soubor, se kter\u00fdm Selenoid interaguje. Jakmile Selenoid obdr\u017e\u00ed po\u017eadavek od test\u016f, automaticky spust\u00ed pot\u0159ebn\u00fd kontejner s po\u017eadovan\u00fdm prohl\u00ed\u017ee\u010dem. Kdy\u017e test skon\u010d\u00ed, Selenoid zastav\u00ed kontejner, \u010d\u00edm\u017e uvoln\u00ed zdroje pro dal\u0161\u00ed po\u017eadavky. Tento p\u0159\u00edstup zcela odstra\u0148uje zn\u00e1m\u00fd probl\u00e9m 'degradace uzl\u016f', se kter\u00fdm se \u010dasto setk\u00e1v\u00e1me v Selenium grid.<\/p>\n<p>Ale, bohu\u017eel, Selenoid st\u00e1le nen\u00ed st\u0159\u00edbrn\u00e1 kulka. Z\u00edskali jsme funkci 'prohl\u00ed\u017ee\u010d na po\u017e\u00e1d\u00e1n\u00ed', ale funkce 'zdroje na po\u017e\u00e1d\u00e1n\u00ed' st\u00e1le nen\u00ed k dispozici. Pro pou\u017eit\u00ed Selenoidu ho mus\u00edme nasadit na fyzick\u00e9m hardwaru nebo na VM, co\u017e znamen\u00e1, \u017ee mus\u00edme p\u0159edem v\u011bd\u011bt, kolik zdroj\u016f je t\u0159eba p\u0159id\u011blit. Mysl\u00edm, \u017ee to nen\u00ed probl\u00e9m pro mal\u00e9 projekty, kter\u00e9 spou\u0161t\u00ed 10, 20 nebo dokonce 30 prohl\u00ed\u017ee\u010d\u016f sou\u010dasn\u011b. Ale co kdy\u017e pot\u0159ebujeme 100, 500, 1000 a v\u00edce? Nen\u00ed v\u016fbec smyslupln\u00e9 neust\u00e1le udr\u017eovat a platit za takov\u00e9 mno\u017estv\u00ed zdroj\u016f. V sekc\u00edch 5 a 6 tohoto \u010dl\u00e1nku probereme \u0159e\u0161en\u00ed, kter\u00e1 umo\u017e\u0148uj\u00ed \u0161k\u00e1lov\u00e1n\u00ed, \u010d\u00edm\u017e zna\u010dn\u011b sni\u017euj\u00ed n\u00e1klady spole\u010dnosti.<\/p>\n<p><u>Selenoid pro Android<\/u><\/p>\n<p>Po \u00fasp\u011bchu Selenoid jako n\u00e1stroje pro webovou automatizaci lid\u00e9 tou\u017eili po n\u011b\u010dem podobn\u00e9m pro Android. A to se splnilo \u2013 Selenoid byl vyd\u00e1n s podporou Androidu. Z pohledu u\u017eivatele je princip fungov\u00e1n\u00ed podobn\u00fd webov\u00e9 automatizaci. Jedin\u00fd rozd\u00edl spo\u010d\u00edv\u00e1 v tom, \u017ee m\u00edsto kontejner\u016f s prohl\u00ed\u017ee\u010di Selenoid spou\u0161t\u00ed kontejnery s Android emul\u00e1tory. Podle m\u00e9ho n\u00e1zoru je to v sou\u010dasnosti nejsiln\u011bj\u0161\u00ed bezplatn\u00fd n\u00e1stroj pro spu\u0161t\u011bn\u00ed Android test\u016f paraleln\u011b.<\/p>\n<p>O negativn\u00edch str\u00e1nk\u00e1ch tohoto n\u00e1stroje bych opravdu nerad mluvil, proto\u017ee se mi skute\u010dn\u011b velmi l\u00edb\u00ed. P\u0159esto se tu vyskytuj\u00ed stejn\u00e9 nedostatky, kter\u00e9 se t\u00fdkaj\u00ed i webov\u00e9 automatizace, souvisej\u00edc\u00ed se \u0161k\u00e1lovatelnost\u00ed. Krom\u011b toho je t\u0159eba se zm\u00ednit o dal\u0161\u00edm omezen\u00ed, kter\u00e9 m\u016f\u017ee b\u00fdt p\u0159ekvapen\u00edm, pokud tento n\u00e1stroj nastavujete poprv\u00e9. Pro spu\u0161t\u011bn\u00ed Android obraz\u016f pot\u0159ebujeme fyzick\u00fd stroj nebo VM s podporou vno\u0159en\u00e9 virtualizace. V praktick\u00e9m pr\u016fvodci uk\u00e1\u017eu, jak to aktivovat na Linux VM. Pokud jste v\u0161ak u\u017eivatel macOS a chcete Selenoid nasadit lok\u00e1ln\u011b, spu\u0161t\u011bn\u00ed Android test\u016f nebude mo\u017en\u00e9. M\u016f\u017eete v\u0161ak v\u017edy spustit Linux VM lok\u00e1ln\u011b s nastavenou \u201avno\u0159enou virtualizac\u00ed\u2018 a nasadit Selenoid uvnit\u0159.<\/p>\n<h3>Ilustrace aktu\u00e1ln\u00edho stavu infrastruktury<\/h3>\n<p>\n V kontextu tohoto \u010dl\u00e1nku p\u0159id\u00e1me 2 n\u00e1stroje k ilustraci infrastruktury. T\u00edm je Selenium grid pro webov\u00e9 testy a Selenoid pro Android testy. V pr\u016fvodci na GitHubu tak\u00e9 uk\u00e1\u017eu, jak pou\u017e\u00edt Selenoid pro spu\u0161t\u011bn\u00ed webov\u00fdch test\u016f.\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/1202ae79eba9cffc965f3a5b2648c755.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Odkazy pro studium<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/resources\/what-container\">Docker: co je kontejner<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.docker.com\/get-started\">Docker: za\u010d\u00edt<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/containerjournal.com\/topics\/container-ecosystems\/5-container-alternatives-to-docker\/\">5 alternativ kontejn\u00e9r\u016fm Docker<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/wiki\/Grid2\">Selenium Grid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/docker-selenium\">Selenium docker<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aerokube.com\/selenoid\/latest\/\">Selenoid<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aerokube\/selenoid\">Selenoid Github<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/developer.android.com\/studio\/run\/emulator-acceleration#vm-linux\">Nastaven\u00ed KVM pro Android emul\u00e1tory<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Docker-Deep-Dive-Nigel-Poulton-ebook\/dp\/B01LXWQUFF\/ref=pd_sim_351_1\/147-1129855-1615632?_encoding=UTF8&amp;pd_rd_i=B01LXWQUFF&amp;pd_rd_r=f8dcd666-e707-4f85-99c6-24ecec56ea74&amp;pd_rd_w=rMnHL&amp;pd_rd_wg=u17vC&amp;pf_rd_p=bab57536-7c8f-4781-a8ed-3e270b9cd303&amp;pf_rd_r=KN6EXNGBWJ6B9QNJE4M2&amp;psc=1&amp;refRID=KN6EXNGBWJ6B9QNJE4M2\">Kniha Docker Deep Dive<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobn\u00e9 n\u00e1stroje<\/h3>\n<p><\/p>\n<ul>\n<li>Existuj\u00ed i jin\u00e9 n\u00e1stroje pro kontejnerizaci, ale Docker je nejpopul\u00e1rn\u011bj\u0161\u00ed. Pokud chcete vyzkou\u0161et n\u011bco jin\u00e9ho, m\u011bjte na pam\u011bti, \u017ee n\u00e1stroje, kter\u00e9 jsme probrali pro paraleln\u00ed spu\u0161t\u011bn\u00ed Selenium test\u016f, nebudou fungovat ihned.\u00a0\u00a0<\/li>\n<li>Jak ji\u017e bylo zm\u00edn\u011bno, existuje mnoho modifikac\u00ed Selenium grid, nap\u0159\u00edklad,<noindex><a rel=\"nofollow\" href=\"https:\/\/opensource.zalando.com\/zalenium\/\"> Zalenium<\/a><\/noindex>. <\/li>\n<\/ul>\n<p><\/p>\n<h2>4. CI \/ CD<\/h2>\n<p><\/p>\n<h3>Kr\u00e1tk\u00fd popis technologie<\/h3>\n<p>\n Praktika neust\u00e1l\u00e9 integrace je v oblasti v\u00fdvoje pom\u011brn\u011b popul\u00e1rn\u00ed a stoj\u00ed na stejn\u00e9 \u00farovni jako syst\u00e9my pro spr\u00e1vu verz\u00ed. P\u0159esto m\u00e1m pocit, \u017ee existuje zmatek v terminologii. V tomto odstavci bych cht\u011bl popsat 3 modifikace t\u00e9to technologie z m\u00e9ho pohledu. Na internetu m\u016f\u017eete naj\u00edt mnoho \u010dl\u00e1nk\u016f s r\u016fzn\u00fdmi interpretacemi, a to je naprosto norm\u00e1ln\u00ed, pokud se v\u00e1\u0161 n\u00e1zor li\u0161\u00ed. Nejhlavn\u011bj\u0161\u00ed je, abyste byli na stejn\u00e9 vln\u011b se sv\u00fdmi kolegy.<\/p>\n<p>Existuj\u00ed tedy 3 term\u00edny: CI \u2014 Continuous Integration (neust\u00e1l\u00e1 integrace), CD \u2014 Continuous Delivery (neust\u00e1l\u00e1 dod\u00e1vka) a znovu CD \u2014 Continuous Deployment (neust\u00e1l\u00e9 nasazen\u00ed). (<i>D\u00e1le budu pou\u017e\u00edvat tyto term\u00edny v anglick\u00e9m jazyce<\/i>). Ka\u017ed\u00e1 modifikace p\u0159id\u00e1v\u00e1 n\u011bkolik dal\u0161\u00edch krok\u016f do va\u0161eho v\u00fdvojov\u00e9ho procesu. Ale slovo <u>continuous<\/u> (nep\u0159etr\u017eit\u00fd) je nejd\u016fle\u017eit\u011bj\u0161\u00ed. V tomto kontextu t\u00edm mysl\u00edme n\u011bco, co prob\u00edh\u00e1 od za\u010d\u00e1tku do konce, bez p\u0159eru\u0161en\u00ed nebo manu\u00e1ln\u00edho z\u00e1sahu. Poj\u010fme se pod\u00edvat na CI &#038; CD a CD v tomto kontextu.<\/p>\n<ul>\n<li><strong>Continuous Integration \u2013<\/strong> je po\u010d\u00e1te\u010dn\u00ed krok evoluce. Po odesl\u00e1n\u00ed nov\u00e9ho k\u00f3du na server o\u010dek\u00e1v\u00e1me rychlou zp\u011btnou vazbu, \u017ee na\u0161e zm\u011bny jsou v po\u0159\u00e1dku. Obvykle CI zahrnuje spu\u0161t\u011bn\u00ed n\u00e1stroj\u016f pro statickou anal\u00fdzu k\u00f3du a modulov\u00e9\/vnit\u0159n\u00ed API testy. To n\u00e1m umo\u017e\u0148uje z\u00edskat informace o na\u0161em k\u00f3du ji\u017e za n\u011bkolik sekund\/minut.<\/li>\n<li><strong>Continuous Delivery<\/strong> je pokro\u010dilej\u0161\u00ed krok, na kter\u00e9m spou\u0161t\u00edme integra\u010dn\u00ed\/UI testy. Na t\u00e9to \u00farovni v\u0161ak nez\u00edsk\u00e1v\u00e1me v\u00fdsledky tak rychle jako v p\u0159\u00edpad\u011b CI. Zaprv\u00e9, tyto typy test\u016f vy\u017eaduj\u00ed v\u00edce \u010dasu na dokon\u010den\u00ed. Zadruh\u00e9, p\u0159ed spu\u0161t\u011bn\u00edm mus\u00edme rozvinout na\u0161e zm\u011bny na testovac\u00ed\/staging prost\u0159ed\u00ed. Nav\u00edc, pokud mluv\u00edme o mobiln\u00edm v\u00fdvoji, p\u0159ib\u00fdv\u00e1 dal\u0161\u00ed f\u00e1ze na vytv\u00e1\u0159en\u00ed sestaven\u00ed na\u0161\u00ed aplikace.<\/li>\n<li><strong>Continuous Deployment<\/strong> p\u0159edpokl\u00e1d\u00e1, \u017ee automaticky nasazujeme (release) na\u0161e zm\u011bny na produkci, pokud byly \u00fasp\u011b\u0161n\u011b spln\u011bny v\u0161echny akcepta\u010dn\u00ed testy v p\u0159edchoz\u00edch f\u00e1z\u00edch. Krom\u011b toho lze po f\u00e1zi uvoln\u011bn\u00ed nastavit r\u016fzn\u00e9 kroky, jako je spu\u0161t\u011bn\u00ed smoke test\u016f na produkci a shroma\u017e\u010fov\u00e1n\u00ed zaj\u00edmav\u00fdch metrik. Continuous Deployment je mo\u017en\u00e9 pouze p\u0159i dobr\u00e9m pokryt\u00ed automatizovan\u00fdmi testy. Pokud jsou pot\u0159eba n\u011bjak\u00e9 ru\u010dn\u00ed z\u00e1sahy, v\u010detn\u011b testov\u00e1n\u00ed, pak to ji\u017e nen\u00ed <u>Continuous<\/u> (nep\u0159etr\u017eit\u00e9). Tak m\u016f\u017eeme \u0159\u00edct, \u017ee n\u00e1\u0161 pipeline spl\u0148uje pouze praxi Continuous Delivery.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Hodnota pro automatiza\u010dn\u00ed infrastrukturu<\/h3>\n<p>\n V t\u00e9to \u010d\u00e1sti bych m\u011bl objasnit, \u017ee kdy\u017e mluv\u00edme o end-to-end UI testech, znamen\u00e1 to, \u017ee mus\u00edme nasadit na\u0161e zm\u011bny a souvisej\u00edc\u00ed slu\u017eby na testovac\u00ed prost\u0159ed\u00ed. Continuous Integration nen\u00ed pro tento \u00fakol vhodn\u00fd a mus\u00edme se postarat o implementaci alespo\u0148 prax\u00ed Continuous Delivery. Continuous Deployment tak\u00e9 d\u00e1v\u00e1 smysl v kontextu UI test\u016f, pokud m\u00e1me v \u00famyslu je spou\u0161t\u011bt na produkci.<\/p>\n<p>A ne\u017e se pod\u00edv\u00e1me na ilustraci zm\u011bny architektury, chci \u0159\u00edct n\u011bkolik slov o GitLab CI. Na rozd\u00edl od jin\u00fdch CI\/CD n\u00e1stroj\u016f, GitLab poskytuje vzd\u00e1len\u00e9 \u00falo\u017ei\u0161t\u011b a mnoho dal\u0161\u00edch dopl\u0148kov\u00fdch funkc\u00ed. Tak\u017ee GitLab je v\u00edc ne\u017e jen CI. Obsahuje \u0159\u00edzen\u00ed zdrojov\u00e9ho k\u00f3du, Agile management, CI\/CD pipelines, n\u00e1stroje pro logov\u00e1n\u00ed a shroma\u017e\u010fov\u00e1n\u00ed metrik. Architektura GitLab se skl\u00e1d\u00e1 z GitLab CI\/CD a GitLab Runner. P\u0159in\u00e1\u0161\u00edm kr\u00e1tk\u00fd popis z ofici\u00e1ln\u00edho webu:<\/p>\n<blockquote><p>Gitlab CI\/CD je webov\u00e1 aplikace s API, kter\u00e1 ukl\u00e1d\u00e1 sv\u016fj stav v datab\u00e1zi, spravuje projekty\/buildy a poskytuje u\u017eivatelsk\u00e9 rozhran\u00ed. GitLab Runner je aplikace, kter\u00e1 zpracov\u00e1v\u00e1 buildy. M\u016f\u017ee b\u00fdt nasazen samostatn\u011b a pracuje s GitLab CI\/CD prost\u0159ednictv\u00edm API. Pro b\u011bh test\u016f pot\u0159ebujete jak instanci Gitlabu, tak Runner.<\/p><\/blockquote>\n<p><\/p>\n<h3>Ilustrace aktu\u00e1ln\u00edho stavu infrastruktury<\/h3>\n<p>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/a05ece39b6c6a9aaec4177d4b5242722.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Odkazy pro studium<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/martinfowler.com\/articles\/continuousIntegration.html\">Martin Fowler: Continuous Integration<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.gitlab.com\/ee\/ci\/\">GitLab CI\/CD<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Continuous-Integration-Improving-Software-Reducing\/dp\/0321336380\">Kniha o Continuous Integration<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Continuous-Delivery-Deployment-Automation-Addison-Wesley-ebook-dp-B003YMNVC0\/dp\/B003YMNVC0\/ref=mt_kindle?_encoding=UTF8&amp;me=&amp;qid=\">Kniha o Continuous Delivery<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobn\u00e9 n\u00e1stroje<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/jenkins.io\/\">Jenkins<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/teamcity\/\">TeamCity<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/travis-ci.com\/\">Travis<\/a><\/noindex>\u00a0<\/li>\n<li>A mnoho dal\u0161\u00edch<\/li>\n<\/ul>\n<p><\/p>\n<h2>5. Cloudov\u00e9 platformy<\/h2>\n<p><\/p>\n<h3>Kr\u00e1tk\u00fd popis technologie<\/h3>\n<p>\n V t\u00e9to \u010d\u00e1sti se budeme bavit o popul\u00e1rn\u00edm trendu, kter\u00fd se naz\u00fdv\u00e1 've\u0159ejn\u00e9 cloudov\u00e1n\u00ed'. I kdy\u017e technologie virtualizace a kontejnerizace nab\u00edzej\u00ed obrovsk\u00e9 v\u00fdhody, st\u00e1le pot\u0159ebujeme v\u00fdpo\u010detn\u00ed zdroje. Firmy nakupuj\u00ed drah\u00e9 servery nebo si pronaj\u00edmaj\u00ed datov\u00e1 centra, ale v takov\u00e9m p\u0159\u00edpad\u011b je pot\u0159eba ud\u011blat v\u00fdpo\u010dty (n\u011bkdy nerealistick\u00e9) o tom, kolik zdroj\u016f budeme pot\u0159ebovat, zda je budeme pou\u017e\u00edvat 24\/7 a k jak\u00fdm \u00fa\u010del\u016fm. Nap\u0159\u00edklad pro produk\u010dn\u00ed prost\u0159ed\u00ed pot\u0159ebujeme server, kter\u00fd bude fungovat nonstop, ale pot\u0159ebujeme stejn\u00e9 zdroje pro testov\u00e1n\u00ed mimo pracovn\u00ed dobu? To tak\u00e9 z\u00e1vis\u00ed na typu prov\u00e1d\u011bn\u00e9ho testov\u00e1n\u00ed. P\u0159\u00edkladem mohou b\u00fdt z\u00e1t\u011b\u017eov\u00e9\/stresov\u00e9 testy, kter\u00e9 pl\u00e1nujeme prov\u00e1d\u011bt mimo pracovn\u00ed hodiny, abychom z\u00edskali v\u00fdsledky na n\u00e1sleduj\u00edc\u00ed den. Ale rozhodn\u011b nen\u00ed nutn\u00e1 nep\u0159etr\u017eit\u00e1 dostupnost server\u016f pro end-to-end automatizovan\u00e9 testy a obzvl\u00e1\u0161t\u011b pro prost\u0159ed\u00ed manu\u00e1ln\u00edho testov\u00e1n\u00ed. Pro takov\u00e9 situace by bylo skv\u011bl\u00e9 m\u00edt k dispozici tolik zdroj\u016f, kolik pot\u0159ebujeme na vy\u017e\u00e1d\u00e1n\u00ed, pou\u017e\u00edvat je a p\u0159estat platit, kdy\u017e u\u017e nejsou pot\u0159eba. Nav\u00edc by bylo skv\u011bl\u00e9 z\u00edskat je okam\u017eit\u011b, pouh\u00fdm kliknut\u00edm my\u0161\u00ed nebo spu\u0161t\u011bn\u00edm n\u011bkolika skript\u016f. K tomu slou\u017e\u00ed ve\u0159ejn\u00e9 cloudy. Poj\u010fme se pod\u00edvat na definici:<\/p>\n<blockquote><p>\u201eVe\u0159ejn\u00fd cloud je definov\u00e1n jako v\u00fdpo\u010detn\u00ed slu\u017eby nab\u00edzen\u00e9 t\u0159et\u00edmi stranami p\u0159es ve\u0159ejn\u00fd internet, co\u017e je \u010din\u00ed dostupn\u00fdmi pro ka\u017ed\u00e9ho, kdo je chce pou\u017e\u00edt nebo zakoupit. Mohou b\u00fdt zdarma nebo prod\u00e1v\u00e1ny na po\u017e\u00e1d\u00e1n\u00ed, co\u017e z\u00e1kazn\u00edk\u016fm umo\u017e\u0148uje platit pouze za vyu\u017eit\u00e9 cykly CPU, \u00falo\u017en\u00fd prostor nebo \u0161\u00ed\u0159ku p\u00e1sma.\u201c<\/p><\/blockquote>\n<p>\n Existuje n\u00e1zor, \u017ee ve\u0159ejn\u00e9 cloudy jsou drah\u00e9. Ale jejich kl\u00ed\u010dov\u00e1 my\u0161lenka spo\u010d\u00edv\u00e1 ve sni\u017eov\u00e1n\u00ed n\u00e1klad\u016f spole\u010dnosti. Jak bylo ji\u017e zm\u00edn\u011bno, ve\u0159ejn\u00e9 cloudy umo\u017e\u0148uj\u00ed z\u00edskat zdroje na vy\u017e\u00e1d\u00e1n\u00ed a platit pouze za dobu jejich vyu\u017eit\u00ed. Tak\u00e9 n\u011bkdy zapom\u00edn\u00e1me, \u017ee zam\u011bstnanci dost\u00e1vaj\u00ed mzdu a specialist\u00e9 jsou tak\u00e9 drah\u00fdm zdrojem. Je t\u0159eba zohlednit, \u017ee ve\u0159ejn\u00e9 cloudy v\u00fdrazn\u011b usnad\u0148uj\u00ed \u00fadr\u017ebu infrastruktury, co\u017e umo\u017e\u0148uje in\u017een\u00fdr\u016fm soust\u0159edit se na d\u016fle\u017eit\u011bj\u0161\u00ed \u00fakoly.\u00a0<\/p>\n<h3>Hodnota pro automatiza\u010dn\u00ed infrastrukturu<\/h3>\n<p>\n Jak\u00e9 konkr\u00e9tn\u00ed zdroje pot\u0159ebujeme pro end-to-end UI testy? V z\u00e1sad\u011b to jsou virtu\u00e1ln\u00ed stroje nebo clustery (o Kubernetes se budeme bavit v dal\u0161\u00ed sekci), kter\u00e9 slou\u017e\u00ed k spu\u0161t\u011bn\u00ed prohl\u00ed\u017ee\u010d\u016f a emulator\u016f. \u010c\u00edm v\u00edce prohl\u00ed\u017ee\u010d\u016f a emulator\u016f chceme spustit najednou, t\u00edm v\u00edce CPU a pam\u011bti pot\u0159ebujeme, a t\u00edm v\u00edce pen\u011bz za to mus\u00edme zaplatit. Ve\u0159ejn\u00e9 cloudy tedy v kontextu automatizace testov\u00e1n\u00ed umo\u017e\u0148uj\u00ed spou\u0161t\u011bt velk\u00e9 mno\u017estv\u00ed (100, 200, 1000 \u2026) prohl\u00ed\u017ee\u010d\u016f\/emulator\u016f na vy\u017e\u00e1d\u00e1n\u00ed, dost\u00e1vat v\u00fdsledky testov\u00e1n\u00ed co nejrychleji a p\u0159estat platit za tak nesm\u00edrn\u011b n\u00e1kladn\u00e9 zdroje.\u00a0<\/p>\n<p>Nejpopul\u00e1rn\u011bj\u0161\u00edmi cloudov\u00fdmi poskytovateli jsou Amazon Web Services (AWS), Microsoft Azure a Google Cloud Platform (GCP). V praktick\u00e9m pr\u016fvodci jsou uvedeny p\u0159\u00edklady pou\u017eit\u00ed GCP, ale celkov\u011b nen\u00ed d\u016fle\u017eit\u00e9, co p\u0159esn\u011b pou\u017eijete pro \u00fakoly automatizace. V\u0161ichni poskytuj\u00ed zhruba stejn\u00e9 funkce. Obecn\u011b se zam\u011b\u0159uje pr\u016fvodce na celou infrastrukturu firmy a obchodn\u00ed po\u017eadavky, co\u017e je mimo r\u00e1mec tohoto \u010dl\u00e1nku. Pro in\u017een\u00fdry automatizace bude zaj\u00edmav\u011bj\u0161\u00ed porovnat pou\u017e\u00edv\u00e1n\u00ed cloudov\u00fdch poskytovatel\u016f s pou\u017eit\u00edm cloudov\u00fdch platforem konkr\u00e9tn\u011b pro \u00fa\u010dely testov\u00e1n\u00ed, jako jsou Sauce Labs, BrowserStack, BitBar a tak d\u00e1le. Tak u\u017e to ud\u011blejme! Podle m\u00e9ho n\u00e1zoru je Sauce Labs nejzn\u00e1m\u011bj\u0161\u00ed farmou pro cloudov\u00e9 testov\u00e1n\u00ed, proto jsem ji vzal pro srovn\u00e1n\u00ed.\u00a0<\/p>\n<p><u>GCP vs Sauce Labs pro \u00fa\u010dely automatizace:<\/u><\/p>\n<p>P\u0159edstavme si, \u017ee pot\u0159ebujeme spustit najednou 8 webov\u00fdch test\u016f a 8 Android test\u016f. K tomu pou\u017eijeme GCP a spust\u00edme 2 virtu\u00e1ln\u00ed stroje se Selenoidem. Na prvn\u00edm vytvo\u0159\u00edme 8 kontejner\u016f s prohl\u00ed\u017ee\u010di. Na druh\u00e9m 8 kontejner\u016f s emul\u00e1tory. Pod\u00edvejme se na ceny:\u00a0\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/e4688fd2e6e5593d2e1c22fc57f59484.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Pro spu\u0161t\u011bn\u00ed jednoho kontejneru s Chrome, budeme pot\u0159ebovat <strong>n1-standard-1 <\/strong>stroj. V p\u0159\u00edpad\u011b Androidu to bude <strong>n1-standard-4 <\/strong>pro jednoho emul\u00e1tora. Ve skute\u010dnosti je flexibiln\u011bj\u0161\u00ed a levn\u011bj\u0161\u00ed zp\u016fsob, jak ur\u010dit konkr\u00e9tn\u00ed u\u017eivatelsk\u00e9 hodnoty pro CPU\/pam\u011b\u0165, ale v tuto chv\u00edli pro srovn\u00e1n\u00ed se Sauce Labs to nen\u00ed z\u00e1sadn\u00ed.<\/p>\n<p>A tady jsou tarify za pou\u017e\u00edv\u00e1n\u00ed Sauce Labs:<\/p>\n<p><img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/1367d2b59bbef9603b4b4be166e8d721.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nP\u0159edpokl\u00e1d\u00e1m, \u017ee jste si u\u017e v\u0161imli rozd\u00edlu, ale p\u0159esto uv\u00e1d\u00edm tabulku s v\u00fdpo\u010dty pro n\u00e1\u0161 \u00fakol:<\/p>\n<p><strong>Pot\u0159ebn\u00e9 zdroje<\/strong><br \/>\n<strong>M\u011bs\u00ed\u010dn\u011b<\/strong><br \/>\n<strong>Pracovn\u00ed hodiny<\/strong><strong>(8 r\u00e1no \u2014 8 ve\u010der)<\/strong><br \/>\n<strong>Pracovn\u00ed hodiny<\/strong><strong>+ Preemptible<\/strong><\/p>\n<p><strong>GCP pro web<\/strong><br \/>\nn1-standard-1 x 8 = n1-standard-8<br \/>\n$194.18<br \/>\n23 dny * 12h * 0.38 = 104.88$\u00a0<br \/>\n23 dny * 12h * 0.08 = 22.08$<\/p>\n<p><strong>Sauce Labs pro web<\/strong><br \/>\nVirtu\u00e1ln\u00ed Cloud8 paraleln\u00ed testy<br \/>\n$1.559<br \/>\n&#8212;<br \/>\n&#8212;<\/p>\n<p><strong>GCP pro Android<\/strong><br \/>\nn1-standard-4 x 8: n1-standard-16<br \/>\n$776.72<br \/>\n23 dny * 12h * 1.52 = 419.52$\u00a0<br \/>\n23 dny * 12h * 0.32 = 88.32$<\/p>\n<p><strong>Sauce Labs pro Android<\/strong><br \/>\nRe\u00e1ln\u00e9 za\u0159\u00edzen\u00ed Cloud 8 paraleln\u00ed testy<br \/>\n$1.999<br \/>\n&#8212;<br \/>\n&#8212;<\/p>\n<p>\nJak je vid\u011bt, rozd\u00edl v cen\u011b je obrovsk\u00fd, zejm\u00e9na pokud se testy spou\u0161t\u011bj\u00ed pouze v b\u011b\u017en\u00e9 dvan\u00e1ctihodinov\u00e9 pracovn\u00ed dob\u011b. Ale n\u00e1klady lze sn\u00ed\u017eit je\u0161t\u011b v\u00edce, pokud se pou\u017eij\u00ed preemptible stroje. Co to vlastn\u011b je?<\/p>\n<blockquote><p>Preemptible VM je instance, kterou m\u016f\u017eete vytvo\u0159it a spou\u0161t\u011bt za mnohem ni\u017e\u0161\u00ed cenu ne\u017e norm\u00e1ln\u00ed instance. Nicm\u00e9n\u011b, Compute Engine m\u016f\u017ee tyto instance ukon\u010dit (preempt), pokud pot\u0159ebuje p\u0159\u00edstup k t\u011bmto zdroj\u016fm pro jin\u00e9 \u00fakoly. Preemptible instance p\u0159edstavuj\u00ed nadbyte\u010dnou kapacitu Compute Engine, tak\u017ee jejich dostupnost se m\u011bn\u00ed v z\u00e1vislosti na vyu\u017eit\u00ed.<\/p>\n<p>Pokud jsou va\u0161e aplikace odoln\u00e9 proti chyb\u00e1m a mohou sn\u00e9st mo\u017en\u00e9 p\u0159eru\u0161en\u00ed instanc\u00ed, mohou preemptible instance v\u00fdrazn\u011b sn\u00ed\u017eit va\u0161e n\u00e1klady na Compute Engine. Nap\u0159\u00edklad d\u00e1vkov\u00e9 zpracov\u00e1n\u00ed m\u016f\u017ee prob\u00edhat na preemptible instanc\u00edch. Pokud n\u011bkter\u00e9 z t\u011bchto instanc\u00ed b\u011bhem zpracov\u00e1n\u00ed skon\u010d\u00ed, \u00faloha se zpomal\u00ed, ale \u00fapln\u011b se nezastav\u00ed. Preemptible instance dokon\u010duj\u00ed va\u0161e \u00fakoly d\u00e1vkov\u00e9ho zpracov\u00e1n\u00ed bez toho, aby kladly dal\u0161\u00ed z\u00e1t\u011b\u017e na va\u0161e st\u00e1vaj\u00edc\u00ed instance a bez toho, abyste museli platit plnou cenu za dal\u0161\u00ed norm\u00e1ln\u00ed instance.<\/p><\/blockquote>\n<p>\n A to je\u0161t\u011b nen\u00ed v\u0161echno! Ve skute\u010dnosti jsem si jist\u00fd, \u017ee nikdo nespou\u0161t\u00ed testy po dobu 12 hodin bez p\u0159est\u00e1vky. A pokud je to tak, m\u016f\u017eete automaticky spou\u0161t\u011bt a zastavovat virtu\u00e1ln\u00ed stroje, kdy\u017e nejsou pot\u0159eba. Skute\u010dn\u00fd \u010das pou\u017e\u00edv\u00e1n\u00ed m\u016f\u017ee klesnout na 6 hodin denn\u011b. Pot\u00e9 se platba v kontextu na\u0161eho \u00fakolu sn\u00ed\u017e\u00ed a\u017e na 11$ m\u011bs\u00ed\u010dn\u011b za 8 prohl\u00ed\u017ee\u010d\u016f. Nen\u00ed to skv\u011bl\u00e9? Ale s preemptible stroji mus\u00edme b\u00fdt opatrn\u00ed a p\u0159ipraveni na p\u0159eru\u0161en\u00ed a nestabiln\u00ed chov\u00e1n\u00ed, i kdy\u017e tyto situace mohou b\u00fdt p\u0159edv\u00edd\u00e1ny a zpracov\u00e1ny programov\u011b. Opat\u0159\u00ed to!<\/p>\n<p>Ale rozhodn\u011b ne\u0159\u00edk\u00e1m \u201anikdy nepou\u017e\u00edvejte cloudov\u00e9 testovac\u00ed farmy\u2018. Maj\u00ed \u0159adu v\u00fdhod. P\u0159edev\u0161\u00edm to nen\u00ed jen virtu\u00e1ln\u00ed stroj, ale kompletn\u00ed \u0159e\u0161en\u00ed pro automatizaci testov\u00e1n\u00ed s celou sadou funkc\u00ed z krabice: vzd\u00e1len\u00fd p\u0159\u00edstup, protokoly, screenshoty, nahr\u00e1v\u00e1n\u00ed videa, r\u016fzn\u00e9 prohl\u00ed\u017ee\u010de a fyzick\u00e1 mobiln\u00ed za\u0159\u00edzen\u00ed. V mnoha situac\u00edch m\u016f\u017ee b\u00fdt to nezbytnou skv\u011blou alternativou. Zejm\u00e9na testovac\u00ed platformy jsou u\u017eite\u010dn\u00e9 pro automatizaci IOS, kdy ve\u0159ejn\u00e9 cloudy mohou nab\u00eddnout pouze Linuxov\u00e9\/Windowsov\u00e9 syst\u00e9my. Ale o IOS budeme hovo\u0159it v dal\u0161\u00edch \u010dl\u00e1nc\u00edch. Doporu\u010duji se v\u017edy \u0159\u00eddit situac\u00ed a vych\u00e1zet z \u00fakol\u016f: v n\u011bkter\u00fdch je levn\u011bj\u0161\u00ed a efektivn\u011bj\u0161\u00ed pou\u017e\u00edvat ve\u0159ejn\u00e9 cloudy, v jin\u00fdch testovac\u00ed platformy ur\u010dit\u011b stoj\u00ed za utracen\u00e9 pen\u00edze.<\/p>\n<h3>Ilustrace aktu\u00e1ln\u00edho stavu infrastruktury<\/h3>\n<p>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/f68770c9e27677b9d762af574726c90e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Odkazy pro studium<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/gcp\/\">GCP<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/docs\/instances\/preemptible\">GCP: Preemptivn\u00ed<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/compute\/vm-instance-pricing\">GCP: Ceny VM<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/saucelabs.com\/pricing\">SauceLabs<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.inovex.de\/blog\/comparing-cloud-providers\/\">Porovn\u00e1n\u00ed cloudov\u00fdch poskytovatel\u016f<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobn\u00e9 n\u00e1stroje:<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aws.amazon.com\/\">AWS<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/azure.microsoft.com\/en-us\/\">Azure<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h2>6. Orchestrace<\/h2>\n<p><\/p>\n<h3>Kr\u00e1tk\u00fd popis technologie<\/h3>\n<p>\n M\u00e1m dobrou zpr\u00e1vu \u2013 jsme t\u00e9m\u011b\u0159 na konci \u010dl\u00e1nku! Na\u0161e automatiza\u010dn\u00ed infrastruktura v sou\u010dasnosti obsahuje webov\u00e9 a Android testy, kter\u00e9 spou\u0161t\u00edme paraleln\u011b pomoc\u00ed GitLab CI, s n\u00e1stroji podporuj\u00edc\u00edmi Docker: Selenium grid a Selenoid. Nav\u00edc vyu\u017e\u00edv\u00e1me virtu\u00e1ln\u00ed stroje vytvo\u0159en\u00e9 prost\u0159ednictv\u00edm GCP pro nasazen\u00ed kontejner\u016f s prohl\u00ed\u017ee\u010di a emul\u00e1tory. Abychom sn\u00ed\u017eili n\u00e1klady, spou\u0161t\u00edme tyto virtu\u00e1ln\u00ed stroje pouze na vy\u017e\u00e1d\u00e1n\u00ed a zastavujeme je, kdy\u017e se testov\u00e1n\u00ed neprov\u00e1d\u00ed. Existuje n\u011bco dal\u0161\u00edho, co m\u016f\u017ee zlep\u0161it na\u0161i infrastrukturu? Odpov\u011b\u010f je \u2013 ano! Seznamte se s Kubernetes (K8s)!<\/p>\n<p>Nejprve prozkoumejme, jak jsou slova orchestrace, cluster a Kubernetes navz\u00e1jem propojena. Na vysok\u00e9 \u00farovni je orchestrace syst\u00e9m, kter\u00fd nasazuje a spravuje aplikace. Pro automatizaci testov\u00e1n\u00ed jsou takov\u00fdmi kontejnerizovan\u00fdmi aplikacemi Selenium grid a Selenoid. Docker a K8s se vz\u00e1jemn\u011b dopl\u0148uj\u00ed. Prvn\u00ed slou\u017e\u00ed k nasazen\u00ed aplikac\u00ed, druh\u00fd k orchestrace. K8s je z\u00e1rove\u0148 cluster. \u00dakolem clusteru je pou\u017e\u00edvat VM jako uzly, co\u017e umo\u017e\u0148uje instalovat r\u016fzn\u00e9 funkce, programy a slu\u017eby v r\u00e1mci jednoho serveru (clusteru). Pokud n\u011bkter\u00fd uzel sel\u017ee, ostatn\u00ed uzly p\u0159evezmou, co\u017e zaji\u0161\u0165uje nep\u0159etr\u017eit\u00fd provoz na\u0161\u00ed aplikace. Krom\u011b toho m\u00e1 K8s d\u016fle\u017eitou funk\u010dnost souvisej\u00edc\u00ed se \u0161k\u00e1lov\u00e1n\u00edm, d\u00edky \u010demu\u017e automaticky z\u00edsk\u00e1v\u00e1me optim\u00e1ln\u00ed mno\u017estv\u00ed zdroj\u016f na z\u00e1klad\u011b zat\u00ed\u017een\u00ed a nastaven\u00fdch limit\u016f.<\/p>\n<p>Opravdu, ru\u010dn\u00ed nasazen\u00ed Kubernetes od nuly nen\u00ed v\u016fbec trivi\u00e1ln\u00ed \u00fakol. Odk\u00e1\u017eu na zn\u00e1m\u00e9ho praktick\u00e9ho pr\u016fvodce \"Kubernetes The Hard Way\", a pokud m\u00e1te z\u00e1jem, m\u016f\u017eete si to vyzkou\u0161et. Na\u0161t\u011bst\u00ed v\u0161ak existuj\u00ed alternativn\u00ed metody a n\u00e1stroje. Nejdostupn\u011bj\u0161\u00ed z nich je pou\u017eit\u00ed Google Kubernetes Engine (GKE) v GCP, co\u017e v\u00e1m umo\u017en\u00ed z\u00edskat p\u0159ipraven\u00fd klastr po n\u011bkolika kliknut\u00edch. Pro za\u010d\u00e1tek doporu\u010duji pou\u017e\u00edt pr\u00e1v\u011b tento p\u0159\u00edstup, proto\u017ee v\u00e1m umo\u017en\u00ed soust\u0159edit se na to, jak pou\u017e\u00edvat K8s pro sv\u00e9 \u00fakoly, m\u00edsto zkoum\u00e1n\u00ed toho, jak by m\u011bly b\u00fdt vz\u00e1jemn\u011b integrov\u00e1ny vnit\u0159n\u00ed komponenty.\u00a0<\/p>\n<h3>Hodnota pro automatiza\u010dn\u00ed infrastrukturu<\/h3>\n<p>\nPod\u00edvejme se na n\u011bkolik v\u00fdznamn\u00fdch funkc\u00ed, kter\u00e9 K8s poskytuje:<\/p>\n<ul>\n<li>nasazen\u00ed aplikace: vyu\u017eit\u00ed multi-nodov\u00e9ho klastru, m\u00edsto VM;<\/li>\n<li>dynamick\u00e9 \u0161k\u00e1lov\u00e1n\u00ed: sni\u017euje n\u00e1klady na zdroje, kter\u00e9 jsou pou\u017e\u00edv\u00e1ny pouze na vy\u017e\u00e1d\u00e1n\u00ed;<\/li>\n<li>samoobnovov\u00e1n\u00ed (Self-healing): automatick\u00e9 obnoven\u00ed pods (co\u017e vede k obnoven\u00ed i kontejner\u016f);<\/li>\n<li>nasazen\u00ed aktualizac\u00ed a n\u00e1vrat\u016f zm\u011bn bez v\u00fdpadku: aktualizace n\u00e1stroj\u016f, prohl\u00ed\u017ee\u010d\u016f a emul\u00e1tor\u016f nep\u0159eru\u0161uje pr\u00e1ci aktu\u00e1ln\u00edch u\u017eivatel\u016f.<\/li>\n<\/ul>\n<p>\n Ale K8s st\u00e1le nen\u00ed st\u0159\u00edbrn\u00e1 kulka. Pro pochopen\u00ed v\u0161ech v\u00fdhod a omezen\u00ed v kontextu n\u00e1mi zva\u017eovan\u00fdch n\u00e1stroj\u016f (Selenium grid, Selenoid) stru\u010dn\u011b prodiskutujeme strukturu K8s. Klast obsahuje dva typy uzl\u016f: Master Nodes a Workers Nodes. Master Nodes jsou zodpov\u011bdn\u00e9 za \u0159\u00edzen\u00ed, nasazen\u00ed a rozhodov\u00e1n\u00ed o pl\u00e1nov\u00e1n\u00ed. Workers Nodes jsou m\u00edsta, kde b\u011b\u017e\u00ed aplikace. Uzly tak\u00e9 obsahuj\u00ed prost\u0159ed\u00ed pro spu\u0161t\u011bn\u00ed kontejner\u016f. V na\u0161em p\u0159\u00edpad\u011b je to Docker, kter\u00fd zaji\u0161\u0165uje operace spojen\u00e9 s kontejnery. Existuj\u00ed v\u0161ak i alternativn\u00ed \u0159e\u0161en\u00ed, nap\u0159\u00edklad<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containerd\/containerd\"> containerd<\/a><\/noindex>. Je d\u016fle\u017eit\u00e9 pochopit, \u017ee \u0161k\u00e1lov\u00e1n\u00ed nebo samoobnovov\u00e1n\u00ed se p\u0159\u00edmo net\u00fdk\u00e1 kontejner\u016f. To se realizuje p\u0159id\u00e1n\u00edm\/odebr\u00e1n\u00edm po\u010dtu pods, kter\u00e9 obsahuj\u00ed kontejnery (obvykle jeden kontejner na pod, ale v z\u00e1vislosti na \u00fakolu jich m\u016f\u017ee b\u00fdt v\u00edce). Vysoko\u00farov\u0148ov\u00e1 hierarchie p\u0159edstavuje workers nodes, uvnit\u0159 kter\u00fdch se nach\u00e1zej\u00ed pods, uvnit\u0159 kter\u00fdch b\u011b\u017e\u00ed kontejnery.<\/p>\n<p>Funkce \u0161k\u00e1lov\u00e1n\u00ed je kl\u00ed\u010dov\u00e1 a m\u016f\u017ee b\u00fdt aplikov\u00e1na jak na uzly uvnit\u0159 cluster node-pool, tak na pody uvnit\u0159 uzlu. Existuj\u00ed 2 typy \u0161k\u00e1lov\u00e1n\u00ed, kter\u00e9 se vztahuj\u00ed jak k uzl\u016fm, tak k pod\u016fm. Prvn\u00ed typ je horizont\u00e1ln\u00ed - \u0161k\u00e1lov\u00e1n\u00ed se prov\u00e1d\u00ed zv\u00fd\u0161en\u00edm po\u010dtu uzl\u016f\/pod\u016f. Tento typ je preferovan\u011bj\u0161\u00ed. Druh\u00fd typ, odpov\u00eddaj\u00edc\u00edm zp\u016fsobem, je vertik\u00e1ln\u00ed. \u0160k\u00e1lov\u00e1n\u00ed se prov\u00e1d\u00ed zv\u00fd\u0161en\u00edm velikosti uzl\u016f\/pod\u016f, nikoli jejich po\u010dtu.<\/p>\n<p>Nyn\u00ed se pod\u00edv\u00e1me na na\u0161e n\u00e1stroje v kontextu v\u00fd\u0161e zm\u00edn\u011bn\u00fdch term\u00edn\u016f.<\/p>\n<p><u>Selenium grid<\/u><\/p>\n<p>Jak bylo zm\u00edn\u011bno d\u0159\u00edve, Selenium grid je velmi popul\u00e1rn\u00ed n\u00e1stroj, a nen\u00ed p\u0159ekvapen\u00edm, \u017ee byl kontejnerizov\u00e1n. Nen\u00ed proto p\u0159ekvapuj\u00edc\u00ed, \u017ee Selenium grid m\u016f\u017ee b\u00fdt nasazen v K8s. P\u0159\u00edklad, jak toho dos\u00e1hnout, lze nal\u00e9zt v ofici\u00e1ln\u00edm K8s repozit\u00e1\u0159i. Jak obvykle, odkazy p\u0159ikl\u00e1d\u00e1m na konci sekce. Krom\u011b toho je v praktick\u00e9m pr\u016fvodci uk\u00e1z\u00e1no, jak toho dos\u00e1hnout pomoc\u00ed Terraformu. Tak\u00e9 existuje n\u00e1vod, jak \u0161k\u00e1lovat po\u010det pod\u016f, kter\u00e9 obsahuj\u00ed kontejnery s prohl\u00ed\u017ee\u010di. Funkce automatick\u00e9ho \u0161k\u00e1lov\u00e1n\u00ed v kontextu K8s je v\u0161ak st\u00e1le ne zcela jasn\u00fd \u00fakol. Kdy\u017e jsem za\u010dal studovat, nena\u0161el jsem \u017e\u00e1dn\u00fd praktick\u00fd pr\u016fvodce nebo doporu\u010den\u00ed. Po n\u011bkolika v\u00fdzkumech a experimentech s podporou DevOps t\u00fdmu jsme zvolili p\u0159\u00edstup nasazov\u00e1n\u00ed kontejner\u016f s po\u017eadovan\u00fdmi prohl\u00ed\u017ee\u010di uvnit\u0159 jednoho podu, kter\u00fd se nach\u00e1z\u00ed uvnit\u0159 jednoho worker uzlu. Tento zp\u016fsob n\u00e1m umo\u017e\u0148uje aplikovat strategii horizont\u00e1ln\u00edho \u0161k\u00e1lov\u00e1n\u00ed uzl\u016f zv\u00fd\u0161en\u00edm jejich po\u010dtu. Douf\u00e1m, \u017ee se situace v budoucnu zm\u011bn\u00ed a uvid\u00edme \u010d\u00edm d\u00e1l v\u00edce popis\u016f nejlep\u0161\u00edch p\u0159\u00edstup\u016f a hotov\u00fdch \u0159e\u0161en\u00ed, zejm\u00e9na po vyd\u00e1n\u00ed Selenium grid 4 se zm\u011bn\u011bnou vnit\u0159n\u00ed architekturou.<\/p>\n<p><u>Selenoid<\/u>:<\/p>\n<p>V sou\u010dasn\u00e9 dob\u011b je nasazen\u00ed Selenoidu v K8s nejv\u011bt\u0161\u00ed zklam\u00e1n\u00ed. Nejsou kompatibiln\u00ed. Teoreticky m\u016f\u017eeme nasadit Selenoid kontejner uvnit\u0159 podu, ale kdy\u017e Selenoid za\u010dne spou\u0161t\u011bt kontejnery s prohl\u00ed\u017ee\u010di, budou se st\u00e1le nach\u00e1zet uvnit\u0159 tohoto sam\u00e9ho podu. To znemo\u017e\u0148uje \u0161k\u00e1lov\u00e1n\u00ed a jako v\u00fdsledek nebude pr\u00e1ce Selenoidu uvnit\u0159 clusteru m\u00edt \u017e\u00e1dn\u00fd rozd\u00edl oproti pr\u00e1ci uvnit\u0159 virtu\u00e1ln\u00edho stroje. Konec p\u0159\u00edb\u011bhu.<\/p>\n<p><u>Moon<\/u>:<\/p>\n<p>S v\u011bdom\u00edm t\u00e9to \u00fazk\u00e9 br\u00e1ny p\u0159i pr\u00e1ci se Selenoidem vyvinuli v\u00fdvoj\u00e1\u0159i v\u00fdkonn\u011bj\u0161\u00ed n\u00e1stroj nazvan\u00fd Moon. Tento n\u00e1stroj byl p\u016fvodn\u011b navr\u017een pro pr\u00e1ci s Kubernetes a v d\u016fsledku toho je mo\u017en\u00e9 a nutn\u00e9 vyu\u017e\u00edvat funkci automatick\u00e9ho \u0161k\u00e1lov\u00e1n\u00ed. Nav\u00edc bych \u0159ekl, \u017ee v sou\u010dasnosti je to <u>jedinou<\/u> n\u00e1stroj v oblasti Selenium, kter\u00fd m\u00e1 nativn\u00ed podporu pro K8s cluster ji\u017e v z\u00e1kladu (<i>u\u017e ne, viz dal\u0161\u00ed n\u00e1stroj <\/i>). Kl\u00ed\u010dovou vlastnost\u00ed Moon, kter\u00e1 tuto podporu zaji\u0161\u0165uje, je:\u00a0<\/p>\n<blockquote><p>\u00dapln\u011b bezstavov\u00fd. Selenoid ukl\u00e1d\u00e1 v pam\u011bti informace o pr\u00e1v\u011b b\u011b\u017e\u00edc\u00edch relac\u00edch prohl\u00ed\u017ee\u010de. Pokud se z n\u011bjak\u00e9ho d\u016fvodu jeho proces zhrout\u00ed \u2014 v\u0161echny b\u011b\u017e\u00edc\u00ed relace jsou ztraceny. Moon naopak nem\u00e1 \u017e\u00e1dn\u00fd intern\u00ed stav a m\u016f\u017ee b\u00fdt replikov\u00e1n nap\u0159\u00ed\u010d datov\u00fdmi centry. Relace prohl\u00ed\u017ee\u010de z\u016fst\u00e1vaj\u00ed aktivn\u00ed, i kdy\u017e jeden nebo v\u00edce replik sel\u017ee.<\/p><\/blockquote>\n<p>Tak\u017ee Moon je skv\u011bl\u00e9 \u0159e\u0161en\u00ed, ale s jedn\u00edm probl\u00e9mem: nen\u00ed zdarma. Cena z\u00e1vis\u00ed na po\u010dtu relac\u00ed. Zdarma lze spustit pouze 0-4 relace, co\u017e nen\u00ed p\u0159\u00edli\u0161 u\u017eite\u010dn\u00e9. Od p\u00e1t\u00e9 relace se v\u0161ak plat\u00ed 5 $ za ka\u017edou. Situace se m\u016f\u017ee li\u0161it od spole\u010dnosti ke spole\u010dnosti, ale v na\u0161em p\u0159\u00edpad\u011b je pou\u017eit\u00ed Moon bezv\u00fdznamn\u00e9. Jak jsem ji\u017e popsal v\u00fd\u0161e, m\u016f\u017eeme spou\u0161t\u011bt VM se Selenium Grid na po\u017e\u00e1d\u00e1n\u00ed nebo zv\u00fd\u0161it po\u010det Nodes v clusteru. P\u0159ibli\u017en\u011b na jeden pipeline spou\u0161t\u00edme 500 prohl\u00ed\u017ee\u010d\u016f a po dokon\u010den\u00ed test\u016f p\u0159eru\u0161ujeme v\u0161echny zdroje. Kdybychom pou\u017e\u00edvali Moon, museli bychom zaplatit dal\u0161\u00edch 500 x 5 = 2500 $ m\u011bs\u00ed\u010dn\u011b, a nez\u00e1le\u017e\u00ed na tom, jak \u010dasto testy spou\u0161t\u00edme. A op\u011bt, ne\u0159\u00edk\u00e1m \u201enepou\u017e\u00edvejte Moon\u201c. Pro va\u0161e \u00fakoly to m\u016f\u017ee b\u00fdt nezbytn\u00e9 \u0159e\u0161en\u00ed, nap\u0159\u00edklad pokud m\u00e1te ve va\u0161\u00ed organizaci mnoho projekt\u016f\/t\u00fdm\u016f a pot\u0159ebujete obrovsk\u00fd spole\u010dn\u00fd cluster pro v\u0161echny. Jak u\u017e bylo \u0159e\u010deno, na konci zanech\u00e1m odkaz a doporu\u010d\u00edm prov\u00e9st ve\u0161ker\u00e9 nezbytn\u00e9 v\u00fdpo\u010dty v kontextu va\u0161eho \u00fakolu.<\/p>\n<p><u>Callisto<\/u>: (<i><strong>Pozor! Toto nen\u00ed v p\u016fvodn\u00edm \u010dl\u00e1nku a nach\u00e1z\u00ed se pouze v rusk\u00e9m p\u0159ekladu<\/strong><\/i>)<\/p>\n<p>Jak jsem \u0159ekl, Selenium je velmi popul\u00e1rn\u00ed n\u00e1stroj a oblast IT se rychle vyv\u00edj\u00ed. Kdy\u017e jsem pracoval na p\u0159ekladu, na s\u00edti se objevil nov\u00fd slibn\u00fd n\u00e1stroj Callisto (pozdrav Cypress a ostatn\u00edm zabij\u00e1k\u016fm Selenium). Pracuje nativn\u011b s K8s a umo\u017e\u0148uje spou\u0161t\u011bt Selenoid kontejnery v podech, rozlo\u017een\u011b po uzlech. V\u0161echno funguje ihned po vybalen\u00ed, v\u010detn\u011b automatick\u00e9ho \u0161k\u00e1lov\u00e1n\u00ed. Fantastick\u00e9, ale je pot\u0159eba to otestovat. U\u017e se mi poda\u0159ilo tento n\u00e1stroj nasadit a prov\u00e9st n\u011bkolik experiment\u016f. Ale je p\u0159\u00edli\u0161 brzy na z\u00e1v\u011bry, po z\u00edsk\u00e1n\u00ed v\u00fdsledk\u016f na dlouh\u00e9 vzd\u00e1lenosti, mo\u017en\u00e1 ud\u011bl\u00e1m recenzi v n\u00e1sleduj\u00edc\u00edch \u010dl\u00e1nc\u00edch. Zat\u00edm nech\u00e1v\u00e1m pouze odkazy pro samostatn\u00e9 v\u00fdzkumy.\u00a0\u00a0<\/p>\n<h3>Ilustrace aktu\u00e1ln\u00edho stavu infrastruktury<\/p>\n<h3><img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/c9c2ffd21df2a261947df809dcec7108.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Odkazy pro studium<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/setup\/\">Kubernetes: nastaven\u00ed<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\">Kubernetes: ta t\u011b\u017ek\u00e1 cesta<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/examples\/tree\/master\/staging\/selenium\">Kubernetes: Selenium<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/kubernetes-engine\">GCP: Kubernetes engine<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/aerokube.com\/moon\/latest\/\">Moon<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/Kubernetes-Book-Version-November-2018-ebook\/dp\/B072TS9ZQZ\/ref=pd_sim_351_1\/147-1129855-1615632?_encoding=UTF8&amp;pd_rd_i=B072TS9ZQZ&amp;pd_rd_r=489f0d27-dd2c-4e33-b23c-a420affcba5d&amp;pd_rd_w=HLjs5&amp;pd_rd_wg=eGbU7&amp;pf_rd_p=bab57536-7c8f-4781-a8ed-3e270b9cd303&amp;pf_rd_r=G71DN3V8127KHPXQ6JFN&amp;psc=1&amp;refRID=G71DN3V8127KHPXQ6JFN\">Kniha o Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=MmdGyqNqs9w\">Distribuovan\u00e1 automatizace pomoc\u00ed Kubernetes<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/SeleniumHQ\/selenium\/wiki\/Selenium-Grid-4\">Selenium Grid 4<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wrike\/callisto\">Callisto GitHub<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/software-testing.ru\/events\/review\/3317-wrike-techclub\">Wrike TechClub (Callisto)<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobn\u00e9 n\u00e1stroje<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.docker.com\/get-started\/swarm-deploy\/\">Docker swarm<\/a><\/noindex>\u00a0<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/mesosphere.github.io\/marathon\/\">Marathon<\/a><\/noindex>\u00a0<\/li>\n<\/ul>\n<p><\/p>\n<h2>7. Infrastruktura jako k\u00f3d (IaC)<\/h2>\n<p><\/p>\n<h3>Kr\u00e1tk\u00fd popis technologie<\/h3>\n<p>\n A zde jsme se dostali k posledn\u00ed \u010d\u00e1sti. Obvykle tato technologie a s n\u00ed spojen\u00e9 \u00fakoly nepat\u0159\u00ed do zodpov\u011bdnosti in\u017een\u00fdr\u016f pro automatizaci. A na to jsou sv\u00e9 d\u016fvody. Zaprv\u00e9, v mnoha organizac\u00edch jsou infrastrukturn\u00ed ot\u00e1zky pod kontrolou odd\u011blen\u00ed DevOps a v\u00fdvojov\u00fd t\u00fdm se p\u0159\u00edli\u0161 nezaj\u00edm\u00e1 o to, na \u010dem pipeline b\u011b\u017e\u00ed a jak je t\u0159eba udr\u017eovat v\u0161echno, co s t\u00edm souvis\u00ed. Zadruh\u00e9, bu\u010fme up\u0159\u00edmn\u00ed, praxe \u201eInfrastruktura jako k\u00f3d (IaC)\u201c se st\u00e1le v mnoha spole\u010dnostech neuplat\u0148uje. Ale ur\u010dit\u011b to se stalo popul\u00e1rn\u00edm trendem a je d\u016fle\u017eit\u00e9 sna\u017eit se z\u00fa\u010dastnit souvisej\u00edc\u00edch proces\u016f, p\u0159\u00edstup\u016f a n\u00e1stroj\u016f. Nebo alespo\u0148 b\u00fdt v obraze.<\/p>\n<p>Za\u010dn\u011bme motivac\u00ed pro pou\u017eit\u00ed tohoto p\u0159\u00edstupu. Ji\u017e jsme prodiskutovali, \u017ee k spu\u0161t\u011bn\u00ed test\u016f v GitlabCI pot\u0159ebujeme alespo\u0148 prost\u0159edky pro spu\u0161t\u011bn\u00ed Gitlab Runneru. A pro spu\u0161t\u011bn\u00ed kontejner\u016f s prohl\u00ed\u017ee\u010di\/emul\u00e1tory mus\u00edme rezervovat VM nebo klastr. Krom\u011b prost\u0159edk\u016f pro testov\u00e1n\u00ed pot\u0159ebujeme tak\u00e9 zna\u010dn\u00fd po\u010det zdroj\u016f pro \u00fadr\u017ebu v\u00fdvojov\u00fdch, stagingov\u00fdch a produk\u010dn\u00edch prost\u0159ed\u00ed, co\u017e zahrnuje datab\u00e1ze, automatizovan\u00e9 pl\u00e1ny, s\u00ed\u0165ovou konfiguraci, vyva\u017eov\u00e1n\u00ed zat\u00ed\u017een\u00ed, u\u017eivatelsk\u00e1 pr\u00e1va a tak d\u00e1le. Kl\u00ed\u010dov\u00fdm probl\u00e9mem jsou po\u017eadovan\u00e9 \u00fasil\u00ed k udr\u017een\u00ed toho v\u0161eho. Existuje n\u011bkolik zp\u016fsob\u016f, jak m\u016f\u017eeme prov\u00e1d\u011bt zm\u011bny a vyd\u00e1vat aktualizace. Nap\u0159\u00edklad v kontextu GCP m\u016f\u017eeme pou\u017e\u00edt UI konzoli v prohl\u00ed\u017ee\u010di a prov\u00e1d\u011bt v\u0161echny akce klik\u00e1n\u00edm na tla\u010d\u00edtka. Alternativou m\u016f\u017ee b\u00fdt pou\u017eit\u00ed API vol\u00e1n\u00ed k interakci s cloudov\u00fdmi entitami nebo pou\u017eit\u00ed n\u00e1stroje gcloud pro proveden\u00ed pot\u0159ebn\u00fdch manipulac\u00ed. Av\u0161ak p\u0159i skute\u010dn\u011b velk\u00e9m po\u010dtu r\u016fzn\u00fdch entit a infrastrukturn\u00edch prvk\u016f se st\u00e1v\u00e1 obt\u00ed\u017en\u00e9 nebo dokonce nemo\u017en\u00e9 prov\u00e1d\u011bt v\u0161echny operace ru\u010dn\u011b. Nav\u00edc v\u0161echny tyto ru\u010dn\u00ed akce jsou nekontrolovateln\u00e9. Nem\u016f\u017eeme je poslat na p\u0159ezkum p\u0159ed proveden\u00edm, pou\u017e\u00edvat syst\u00e9m spr\u00e1vy verz\u00ed a rychle vr\u00e1tit zm\u011bny, kter\u00e9 vedly k incidentu. Pro \u0159e\u0161en\u00ed t\u011bchto probl\u00e9m\u016f in\u017een\u00fd\u0159i vytv\u00e1\u0159\u00ed a st\u00e1le vytv\u00e1\u0159ej\u00ed automatick\u00e9 bash\/shell skripty, co\u017e nen\u00ed o mnoho lep\u0161\u00ed ne\u017e p\u0159edchoz\u00ed metody, proto\u017ee je nen\u00ed snadn\u00e9 rychle p\u0159e\u010d\u00edst, pochopit, udr\u017eovat a modifikovat v procedur\u00e1ln\u00edm stylu.<\/p>\n<p>V tomto \u010dl\u00e1nku a praktick\u00e9m pr\u016fvodci pou\u017e\u00edv\u00e1m 2 n\u00e1stroje spojen\u00e9 s praktikou IaC. Jsou to Terraform a Ansible. N\u011bkte\u0159\u00ed se domn\u00edvaj\u00ed, \u017ee nem\u00e1 smysl pou\u017e\u00edvat je sou\u010dasn\u011b, proto\u017ee jejich funk\u010dnost je podobn\u00e1 a jsou vz\u00e1jemn\u011b zastupiteln\u00e9. Ale probl\u00e9m je v tom, \u017ee p\u016fvodn\u011b maj\u00ed zcela odli\u0161n\u00e9 \u00fakoly. A fakt, \u017ee tyto n\u00e1stroje by si m\u011bly navz\u00e1jem dopl\u0148ovat, byl potvrzen na spole\u010dn\u00e9 prezentaci v\u00fdvoj\u00e1\u0159i z firem HashiCorp a RedHat. Konceptu\u00e1ln\u00ed rozd\u00edl spo\u010d\u00edv\u00e1 v tom, \u017ee Terraform je provisioningov\u00fd n\u00e1stroj pro spr\u00e1vu samotn\u00fdch server\u016f. Zat\u00edmco Ansible je n\u00e1stroj pro spr\u00e1vu konfigurac\u00ed, jeho\u017e \u00fakolem je instalace, nastaven\u00ed a spr\u00e1va softwaru na t\u011bchto serverech.<\/p>\n<p>Dal\u0161\u00ed kl\u00ed\u010dovou odli\u0161uj\u00edc\u00ed vlastnost\u00ed t\u011bchto n\u00e1stroj\u016f je styl psan\u00ed k\u00f3du. Na rozd\u00edl od bash a Ansible pou\u017e\u00edv\u00e1 Terraform deklarativn\u00ed styl, zalo\u017een\u00fd na popisu po\u017eadovan\u00e9ho kone\u010dn\u00e9ho stavu, kter\u00e9ho je t\u0159eba dos\u00e1hnout v d\u016fsledku proveden\u00ed. Nap\u0159\u00edklad, pokud hodl\u00e1me vytvo\u0159it 10 VMs a aplikovat zm\u011bny prost\u0159ednictv\u00edm Terraform, dostaneme 10 VMs. Pokud aplikujeme skript znovu, nic se nestane, proto\u017ee ji\u017e m\u00e1me 10 VMs, a Terraform si toho je v\u011bdom, proto\u017ee uchov\u00e1v\u00e1 aktu\u00e1ln\u00ed stav infrastruktury v state souboru. Na druhou stranu Ansible pou\u017e\u00edv\u00e1 procedur\u00e1ln\u00ed p\u0159\u00edstup a pokud jej po\u017e\u00e1d\u00e1me, aby vytvo\u0159il 10 VMs, p\u0159i prvn\u00edm spu\u0161t\u011bn\u00ed z\u00edsk\u00e1me 10 VMs, stejn\u011b jako s Terraform. Ale po op\u011btovn\u00e9m spu\u0161t\u011bn\u00ed ji\u017e budeme m\u00edt 20 VMs. V tom je podstatn\u00fd rozd\u00edl. V procedur\u00e1ln\u00edm stylu neuchov\u00e1v\u00e1me aktu\u00e1ln\u00ed stav a prost\u011b popisujeme sekvenci krok\u016f, kter\u00e9 maj\u00ed b\u00fdt provedeny. Samoz\u0159ejm\u011b m\u016f\u017eeme zpracovat r\u016fzn\u00e9 situace, p\u0159idat n\u011bkolik kontrol na existenci zdroj\u016f a aktu\u00e1ln\u00ed stav, ale nem\u00e1 smysl tr\u00e1vit n\u00e1\u0161 \u010das a vynakl\u00e1dat \u00fasil\u00ed na kontrolu t\u00e9to logiky. Nav\u00edc to zvy\u0161uje riziko chyb.\u00a0<\/p>\n<p>Shrneme-li v\u0161e v\u00fd\u0161e uveden\u00e9, m\u016f\u017eeme doj\u00edt k z\u00e1v\u011bru, \u017ee pro provisioning server\u016f je vhodn\u011bj\u0161\u00edm n\u00e1strojem Terraform a deklarativn\u00ed notace. Na spr\u00e1vu konfigurac\u00ed je lep\u0161\u00ed delegovat na Ansible. A\u017e to pochop\u00edme, pod\u00edvejme se na p\u0159\u00edklady pou\u017eit\u00ed v kontextu automatizace.<\/p>\n<h3>Hodnota pro automatiza\u010dn\u00ed infrastrukturu<\/h3>\n<p>\n Je d\u016fle\u017eit\u00e9 ch\u00e1pat, \u017ee infrastruktura automatizace testov\u00e1n\u00ed by m\u011bla b\u00fdt vn\u00edm\u00e1na jako sou\u010d\u00e1st cel\u00e9 infrastruktury spole\u010dnosti. To znamen\u00e1, \u017ee v\u0161echny praktiky IaC by m\u011bly b\u00fdt aplikov\u00e1ny glob\u00e1ln\u011b na zdroje cel\u00e9 organizace. Kdo je za to zodpov\u011bdn\u00fd, z\u00e1vis\u00ed na va\u0161ich procesech. DevOps t\u00fdm m\u00e1 v t\u011bchto ot\u00e1zk\u00e1ch v\u011bt\u0161\u00ed zku\u0161enosti, vid\u00ed celkov\u00fd obraz. Nicm\u00e9n\u011b QA in\u017een\u00fd\u0159i jsou v\u00edce zapojeni do procesu budov\u00e1n\u00ed automatizace a struktury pipeline, co\u017e jim umo\u017e\u0148uje l\u00e9pe vid\u011bt ve\u0161ker\u00e9 pot\u0159ebn\u00e9 zm\u011bny a p\u0159\u00edle\u017eitosti pro zlep\u0161en\u00ed. Nejlep\u0161\u00edm \u0159e\u0161en\u00edm je pracovat spole\u010dn\u011b, sd\u00edlet znalosti a n\u00e1pady k dosa\u017een\u00ed o\u010dek\u00e1van\u00e9ho v\u00fdsledku.\u00a0<\/p>\n<p>Uvedu n\u011bkolik p\u0159\u00edklad\u016f pou\u017eit\u00ed Terraform a Ansible v kontextu automatizace testov\u00e1n\u00ed a n\u00e1stroj\u016f, kter\u00e9 jsme p\u0159edt\u00edm diskutovali:<\/p>\n<p>1. Popisovat pomoc\u00ed Terraform pot\u0159ebn\u00e9 vlastnosti a parametry virtu\u00e1ln\u00edch stroj\u016f a cluster\u016f.<\/p>\n<p>2. Nainstalovat pomoc\u00ed Ansible pot\u0159ebn\u00e9 n\u00e1stroje pro testov\u00e1n\u00ed: docker, Selenoid, Selenium Grid a st\u00e1hnout pot\u0159ebn\u00e9 verze prohl\u00ed\u017ee\u010d\u016f\/emul\u00e1tor\u016f.<\/p>\n<p>3. Popisovat pomoc\u00ed Terraform vlastnosti virtu\u00e1ln\u00edho stroje, na kter\u00e9m bude spu\u0161t\u011bn GitLab Runner.<\/p>\n<p>4. Nainstalovat pomoc\u00ed Ansible GitLab Runner a pot\u0159ebn\u00e9 souvisej\u00edc\u00ed n\u00e1stroje, nastavit parametry a konfigurace.<\/p>\n<h3>Ilustrace aktu\u00e1ln\u00edho stavu infrastruktury<\/h3>\n<p>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/5d793a800a4ef62e181e6cb3a3f0544e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h3>Odkazy pro studium:<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.terraform.io\/\">Terraform<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.ansible.com\/\">Ansible<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.hashicorp.com\/resources\/ansible-terraform-better-together\">Ansible a Terraform l\u00e9pe spolu<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/a-comprehensive-guide-to-terraform-b3d32832baca\">Komplexn\u00ed pr\u016fvodce Terraformem<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/blog.gruntwork.io\/why-we-use-terraform-and-not-chef-puppet-ansible-saltstack-or-cloudformation-7989dad2865c\">Pro\u010d pou\u017e\u00edv\u00e1me Terraform a ne Chef, Puppet, Ansible, SaltStack nebo CloudFormation<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.google.com\/solutions\/infrastructure-as-code\">GCP: IaC<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Podobn\u00e9 n\u00e1stroje<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.chef.io\/\">Chef<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/puppet.com\/\">Puppet<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/saltstack.com\/\">SaltStack<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.vagrantup.com\/\">Vagrant<\/a><\/noindex><\/li>\n<\/ul>\n<h2>Shr\u0148me to!<\/h2>\n<p><\/p>\n<p><strong>Krok<\/strong><br \/>\n<strong>Technologie<\/strong><br \/>\n<strong>N\u00e1stroje<\/strong><br \/>\n<strong>Hodnota pro automatiza\u010dn\u00ed infrastrukturu<\/strong><\/p>\n<p><strong>1<\/strong><br \/>\nM\u00edstn\u00ed provoz<br \/>\nNode.js, Selenium, Appium<\/p>\n<ul>\n<li>Nejpopul\u00e1rn\u011bj\u0161\u00ed n\u00e1stroje pro web a mobil<\/li>\n<li>Podpora mnoha jazyk\u016f a platforem (v\u010detn\u011b Node.js)<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>2<\/strong><br \/>\nSyst\u00e9my spr\u00e1vy verz\u00ed\u00a0<br \/>\nGit<\/p>\n<ul>\n<li>Podobn\u00e9 v\u00fdhody s v\u00fdvojov\u00fdm k\u00f3dem<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>3<\/strong><br \/>\nKontejnerizace<br \/>\nDocker, Selenium grid, Selenoid (Web, Android)<\/p>\n<ul>\n<li>Paraleln\u00ed spou\u0161t\u011bn\u00ed test\u016f<\/li>\n<li>Izolovan\u00e1 prost\u0159ed\u00ed<\/li>\n<li>Jednoduch\u00e9, flexibiln\u00ed aktualizace verz\u00ed<\/li>\n<li>Dynamick\u00e9 zastaven\u00ed nepou\u017e\u00edvan\u00fdch zdroj\u016f<\/li>\n<li>Snadn\u00e9 nastaven\u00ed<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>4<\/strong><br \/>\nCI \/ CD<br \/>\nGitlab CI<\/p>\n<ul>\n<li>Testy jsou sou\u010d\u00e1st\u00ed kontejneru<\/li>\n<li>Rychl\u00e1 zp\u011btn\u00e1 vazba<\/li>\n<li>Viditelnost pro celou spole\u010dnost\/t\u00fdm<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>5<\/strong><br \/>\nCloudov\u00e9 platformy<br \/>\nGoogle Cloud Platform<\/p>\n<ul>\n<li>Zdroje na vy\u017e\u00e1d\u00e1n\u00ed (plat\u00edme jen kdy\u017e pot\u0159ebujeme)<\/li>\n<li>Snadno spravovateln\u00e9 a aktualizovateln\u00e9<\/li>\n<li>Viditelnost a kontrola v\u0161ech zdroj\u016f<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>6<\/strong><br \/>\nOrchestrace<br \/>\nKubernetes<br \/>\nV kontextu kontejner\u016f s prohl\u00ed\u017ee\u010di\/emul\u00e1tory uvnit\u0159 pods:<\/p>\n<ul>\n<li>\u0160k\u00e1lov\u00e1n\u00ed\/automatick\u00e9 \u0161k\u00e1lov\u00e1n\u00ed<\/li>\n<li>Samovyl\u00e9\u010den\u00ed<\/li>\n<li>Aktualizace a n\u00e1vraty bez p\u0159eru\u0161en\u00ed<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>7<\/strong><br \/>\nInfrastruktura jako k\u00f3d (IaC)<br \/>\nTerraform, Ansible<\/p>\n<ul>\n<li>Podobn\u00e9 v\u00fdhody s v\u00fdvojovou infrastrukturou<\/li>\n<li>V\u0161echny v\u00fdhody verzov\u00e1n\u00ed k\u00f3du<\/li>\n<li>Snadn\u00e9 prov\u00e1d\u011bn\u00ed zm\u011bn a \u00fadr\u017eba<\/li>\n<li>\u00dapln\u011b automatizov\u00e1no<\/li>\n<\/ul>\n<p><\/p>\n<h2>Mind map diagramy: evoluce infrastruktury<\/h2>\n<p>\nkrok 1: Lok\u00e1ln\u00ed<br \/>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/507908ba097a603adc3b301ab2f94a8d.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>krok 2: VCS<br \/>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/71c5170293d98375d8ab86d05eb47a33.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>krok 3: Kontejnery\u00a0<br \/>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/da33442a592851e07c3f5800c3ee9ead.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>krok 4: CI\/CD\u00a0<br \/>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/900f18b45124412a1ad00d3901efb40e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>krok 5: Cloudov\u00e9 platformy<br \/>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/840e5063141ac8787612e2fc46b5d690.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>krok 6: Orchestraci<br \/>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/4651b552efdc893695cbf359c6992e9e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>krok 7: IaC<br \/>\n<img decoding=\"async\" alt=\"N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od z\u00e1klad\u016f\" src=\"\/wp-content\/uploads\/2020\/04\/e784130f570260fc6c3aa263916e3db5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h2>Co d\u00e1l?<\/h2>\n<p>\nA tak, to je konec \u010dl\u00e1nku. Na z\u00e1v\u011br bych r\u00e1d s v\u00e1mi dohodl n\u011bkter\u00e9 dohody.<\/p>\n<p><u>Z va\u0161\u00ed strany<\/u><br \/>\n Jak jsem ji\u017e uvedl na za\u010d\u00e1tku, cht\u011bl bych, aby \u010dl\u00e1nek m\u011bl praktick\u00fd p\u0159\u00ednos a pomohl v\u00e1m aplikovat z\u00edskan\u00e9 znalosti v re\u00e1ln\u00e9 pr\u00e1ci. Znovu p\u0159id\u00e1v\u00e1m<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/AlexeyAltunin\/devops-tools-for-qa-automation-infrastructure\"> odkaz na praktickou p\u0159\u00edru\u010dku<\/a><\/noindex>.<\/p>\n<p>Ale ani po tom se nezastavujte, procvi\u010dujte, studujte relevantn\u00ed odkazy a knihy, zjist\u011bte, jak to funguje ve va\u0161\u00ed firm\u011b, hledejte m\u00edsta, kter\u00e1 lze zlep\u0161it a zapojte se do toho. Hodn\u011b \u0161t\u011bst\u00ed!<\/p>\n<p><u>Z moj\u00ed strany<\/u><\/p>\n<p>Z n\u00e1zvu je patrn\u00e9, \u017ee to byla pouze prvn\u00ed \u010d\u00e1st. I kdy\u017e byla docela dlouh\u00e1, zde st\u00e1le nejsou probr\u00e1na d\u016fle\u017eit\u00e1 t\u00e9mata. Ve druh\u00e9 \u010d\u00e1sti pl\u00e1nuji prozkoumat automatizaci infrastruktury v kontextu iOS. Vzhledem k omezen\u00edm Apple t\u00fdkaj\u00edc\u00edm se spou\u0161t\u011bn\u00ed simul\u00e1tor\u016f iOS pouze na syst\u00e9mech macOS je n\u00e1\u0161 soubor \u0159e\u0161en\u00ed omezen\u00fd. Nap\u0159\u00edklad jsme zbaveni mo\u017enosti pou\u017e\u00edvat Docker k spu\u0161t\u011bn\u00ed simul\u00e1toru nebo ve\u0159ejn\u00fdch cloud\u016f ke spu\u0161t\u011bn\u00ed virtu\u00e1ln\u00edch stroj\u016f. Ale to neznamen\u00e1, \u017ee neexistuj\u00ed jin\u00e9 alternativy. Pokus\u00edm se v\u00e1s informovat o nejmodern\u011bj\u0161\u00edch \u0159e\u0161en\u00ed a n\u00e1stroj\u00edch!<\/p>\n<p>Tak\u00e9 jsem nezm\u00ednil docela velk\u00e1 t\u00e9mata t\u00fdkaj\u00edc\u00ed se monitorov\u00e1n\u00ed. V \u010d\u00e1sti 3 se chci zam\u011b\u0159it na nejpopul\u00e1rn\u011bj\u0161\u00ed n\u00e1stroje pro monitorov\u00e1n\u00ed infrastruktury a tak\u00e9 jak\u00e1 data a metriky je t\u0159eba br\u00e1t v \u00favahu.<\/p>\n<p>A nakonec. V budoucnu pl\u00e1nuji vydat video kurz o vytv\u00e1\u0159en\u00ed testovac\u00ed infrastruktury a popul\u00e1rn\u00edch n\u00e1stroj\u00edch. V sou\u010dasnosti je na internetu pom\u011brn\u011b mnoho kurz\u016f a p\u0159edn\u00e1\u0161ek o DevOps, ale v\u0161echny materi\u00e1ly jsou prezentov\u00e1ny v kontextu v\u00fdvoje, nikoli automatizace testov\u00e1n\u00ed. V t\u00e9to z\u00e1le\u017eitosti velmi pot\u0159ebuji zp\u011btnou vazbu, zda by takov\u00fd kurz byl zaj\u00edmav\u00fd a cenn\u00fd pro komunitu tester\u016f a automatiz\u00e1tor\u016f. D\u011bkuji p\u0159edem!<\/h3>\n<\/h3>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/497918\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\u00a0\u00abDevOps tools are not only for DevOps. Building test automation infrastructure from scratch\u00bb. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0441\u0441\u044b\u043b\u043a\u0438, \u0446\u0438\u0442\u0430\u0442\u044b \u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043c\u044b\u0441\u043b\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a. \u0416\u0435\u043b\u0430\u044e \u0432\u0430\u043c \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f! \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":78677,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-78676","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\" \/>\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\/cs\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\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\udd47DevOps \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f DevOps. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043d\u0443\u043b\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya\" \/>\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-04-21T05:42:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-21T05:42:22+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\udd47N\u00e1stroje DevOps nejen pro DevOps. Proces budov\u00e1n\u00ed infrastruktury automatizace testov\u00e1n\u00ed od nuly | ProHoster","description":"\u010c\u00e1st 1: Web \/ Android Pozn\u00e1mka: Tento \u010dl\u00e1nek je p\u0159eklad p\u016fvodn\u00edho \u010dl\u00e1nku do ru\u0161tiny","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","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\udd47DevOps \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f DevOps. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u043d\u0443\u043b\u044f | ProHoster","og:description":"\u0427\u0430\u0441\u0442\u044c 1: Web \/ Android \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u0438\u0439 \u044f\u0437\u044b\u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438","og:url":"https:\/\/prohoster.info\/cs\/blog\/administrirovanie\/devops-instrumenty-ne-tolko-dlya-devops-proczess-postroeniya-infrastruktury-avtomatizaczii-testirovaniya-s-nulya","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-04-21T05:42:22+00:00","article:modified_time":"2020-04-21T05:42:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"78676","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 16:53:59","updated":"2022-10-05 06:14:03","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/78676","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=78676"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/78676\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media\/78677"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=78676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=78676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=78676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}