{"id":93885,"date":"2020-09-10T19:42:23","date_gmt":"2020-09-10T17:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov"},"modified":"2020-09-10T19:42:23","modified_gmt":"2020-09-10T17:42:23","slug":"continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov","title":{"rendered":"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/ed8a32ae63b8dccfc8b4893ab27f1527.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le t\u00eb flasim pse mjetet CI dhe CI jan\u00eb krejt\u00ebsisht t\u00eb ndryshme.<\/p>\n<p><\/p>\n<p>Cilin problem duhet t\u00eb zgjidh\u00eb CI, nga erdhi ideja, \u00e7far\u00eb konfirmimesh t\u00eb fundit ka q\u00eb funksionon, si ta kuptoni q\u00eb keni praktik\u00eb dhe jo thjesht nj\u00eb Jenkins t\u00eb instaluar.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Ideja p\u00ebr t\u00eb b\u00ebr\u00eb nj\u00eb prezantim mbi Integrimin e vazhduesh\u00ebm lindi nj\u00eb vit m\u00eb par\u00eb, kur isha duke b\u00ebr\u00eb intervista p\u00ebr t\u00eb gjetur pun\u00eb. Kam biseduar me 10-15 kompani, nga t\u00eb cilat vet\u00ebm nj\u00eb mundi t\u00eb p\u00ebrgjigjej qart\u00eb se \u00e7far\u00eb \u00ebsht\u00eb CI dhe t\u00eb shpjegonte si e kuptuan ata q\u00eb nuk e kishin. T\u00eb tjer\u00ebt thoshin gj\u00ebra t\u00eb paqarta rreth Jenkinsit \ud83d\ude42 Po, ne e kemi Jenkinsin, ai b\u00ebn nd\u00ebrtimet, CI! P\u00ebr prezantimin do p\u00ebrpiqem t\u00eb shpjegoj se \u00e7far\u00eb \u00ebsht\u00eb Integrimi i vazhduesh\u00ebm n\u00eb t\u00eb v\u00ebrtet\u00eb dhe pse Jenkins dhe mjetet e ngjashme kan\u00eb nj\u00eb lidhje shum\u00eb t\u00eb dob\u00ebt me k\u00ebt\u00eb.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/a57813a652c0d788e5a927dc8a7130ba.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pra, \u00e7far\u00eb i vjen zakonisht n\u00eb mendje kur thoni CI? Shumic\u00ebs s\u00eb njer\u00ebzve do t'i vije n\u00eb mendje Jenkins, Gitlab CI, Travis etj.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/c9799c11ba7bb7bbdb2048c2f314b22a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Edhe n\u00ebse e k\u00ebrkojm\u00eb at\u00eb n\u00eb Google, do t\u00eb na dalin k\u00ebto mjete.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/028ef088b28b73e7905b1666d9d53d1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse pyesni njohurit\u00eb, menj\u00ebher\u00eb pas renditjes s\u00eb mjeteve, ata do t'ju tregojn\u00eb se CI \u00ebsht\u00eb kur ndodh nj\u00eb nd\u00ebrtim dhe testi n\u00eb Pull Request p\u00ebr nj\u00eb commit.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/f37ba8f985c10900f669540e063c5e43.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Integrimi i vazhduesh\u00ebm nuk \u00ebsht\u00eb p\u00ebr mjetet, nuk \u00ebsht\u00eb p\u00ebr nd\u00ebrtimet me teste n\u00eb deg\u00eb! Integrimi i vazhduesh\u00ebm \u00ebsht\u00eb nj\u00eb praktik\u00eb e integrimit shum\u00eb t\u00eb shpesht\u00eb t\u00eb kodit t\u00eb ri dhe p\u00ebr ta p\u00ebrdorur k\u00ebt\u00eb as nuk \u00ebsht\u00eb e nevojshme t\u00eb krijoni Jenkins, GitLab etj.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/c3a12b4a875050550b42714607e787c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Para se t\u00eb kuptojm\u00eb si duket nj\u00eb CI i plot\u00eb, le t\u00eb zhytim fillimisht n\u00eb kontekstin e njer\u00ebzve q\u00eb e shpik\u00ebn k\u00ebt\u00eb dhe ta ndjejm\u00eb dhimbjen q\u00eb po p\u00ebrpiqeshin ta zgjidhnin.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/2ab9c0f4dba2887fed5744c8b021b424.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ata synonin nj\u00eb dhimbje t\u00eb bashk\u00ebpunimit n\u00eb ekip!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/11a5f3b1075f8b8d0f169fe07adf6c91.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le t\u00eb shohim shembuj, me cilat v\u00ebshtir\u00ebsi p\u00ebrballen zhvilluesit gjat\u00eb zhvillimit n\u00eb ekip. Ja, kemi nj\u00eb projekt, deg\u00ebn master n\u00eb git dhe dy zhvillues.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/8138a52376e87239ff5f7b0af5cd8fee.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe ata filluan t\u00eb punonin si\u00e7 kan\u00eb b\u00ebr\u00eb t\u00eb gjith\u00eb at\u00ebher\u00eb. Mor\u00ebn nj\u00eb detyr\u00eb n\u00eb JIRA, krijuan nj\u00eb feature branch, dhe shkruan kod.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/54720c40d9bbd9631b411a2a26c4083f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nj\u00ebri p\u00ebrfundoi karakteristik\u00ebn m\u00eb shpejt dhe e bashkoi me masterin.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/4593dc3cf33a44bf3a4d8166be9bc5da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tjetri iu desh m\u00eb shum\u00eb koh\u00eb, ai u bashkua m\u00eb von\u00eb dhe mori nj\u00eb konflikt. Tani, n\u00eb vend q\u00eb t\u00eb shkruaj\u00eb karakteristikat e nevojshme p\u00ebr biznesin, zhvilluesi po shpenzon koh\u00ebn dhe energjin\u00eb e tij p\u00ebr t\u00eb zgjidhur konfliktet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/c947601fb1dd3b3dd64bac455dc6691a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sa m\u00eb e komplikuar t\u00eb bashkosh karakteristik\u00ebn t\u00ebnd me masterin e p\u00ebrbashk\u00ebt, aq m\u00eb shum\u00eb koh\u00eb shpenzojm\u00eb p\u00ebr k\u00ebt\u00eb. Dhe kjo \u00ebsht\u00eb ende nj\u00eb shembull mjaft i thjesht\u00eb. Ky \u00ebsht\u00eb nj\u00eb shembull, ku zhvilluesit jan\u00eb vet\u00ebm 2. Imagjino se si do t\u00eb ishte po t\u00eb ishin 10, 15 apo 100 njer\u00ebz n\u00eb kompani q\u00eb shkruajn\u00eb n\u00eb nj\u00eb depozit\u00eb. Do t\u00eb \u00e7mendesh p\u00ebr t\u00eb zgjidhur t\u00eb gjith\u00eb k\u00ebto konflikte. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/16c6b8b51ae462f1e0acb966a93c0ae5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ka nj\u00eb rast pak m\u00eb ndryshe. Ne kemi masterin dhe disa zhvillues q\u00eb po b\u00ebjn\u00eb di\u00e7ka.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/21b78ad8d0cb7cb5bded6ef9d49707c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ata krijuan nga nj\u00eb deg\u00eb.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/b85d8aa0080f08c1ad8ad83f3a9ab084.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nj\u00ebri u bashkua, gjith\u00e7ka shkoi mir\u00eb, dor\u00ebzoi detyr\u00ebn.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/e96d4fd52c39089e3377ed85adeeb591.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nd\u00ebrkoh\u00eb, zhvilluesi i dyt\u00eb dor\u00ebzoi detyr\u00ebn e tij. Supozoni se ai ia dha p\u00ebr shqyrtim. N\u00eb shum\u00eb kompani ekziston praktika e shqyrtimit. N\u00eb nj\u00eb an\u00eb, kjo \u00ebsht\u00eb nj\u00eb praktik\u00eb e mir\u00eb dhe e dobishme; n\u00eb an\u00ebn tjet\u00ebr, na ngadal\u00ebson n\u00eb shum\u00eb m\u00ebnyra. S\u2019do t\u00eb shkojm\u00eb thell\u00eb n\u00eb k\u00ebt\u00eb, por ja nj\u00eb shembull i shk\u00eblqyer se \u00e7far\u00eb mund t\u00eb sjell\u00eb nj\u00eb histori e pasuksesshme me shqyrtimin. Ju i d\u00ebrguat nj\u00eb k\u00ebrkes\u00eb p\u00ebr bashkim p\u00ebr shqyrtim. Zhvilluesit nuk kan\u00eb gj\u00eb tjet\u00ebr p\u00ebr t\u00eb b\u00ebr\u00eb. \u00c7far\u00eb fillon t\u00eb b\u00ebj\u00eb? Fillon t\u00eb marr\u00eb detyra tjera. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/7b8e121be99432606056acf11e20f518.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb at\u00eb koh\u00eb, zhvilluesi i dyt\u00eb gjithashtu b\u00ebri ndonj\u00ebher\u00eb di\u00e7ka. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/ceaa5ba5b3b5014fad527362f5794e94.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I pari p\u00ebrfundoi detyr\u00ebn e tret\u00eb. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/9c27663e63bb9489ecffc5a1f73abb87.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dhe pas nj\u00eb kohe t\u00eb gjat\u00eb, shqyrtimi i tij u provua dhe ai p\u00ebrpiqet t\u00eb bashkohet. \u00c7far\u00eb ndodh? Ai kap nj\u00eb num\u00ebr t\u00eb madh konfliktesh. P\u00ebse? Sepse nd\u00ebrkoh\u00eb q\u00eb k\u00ebrkesa e tij p\u00ebr bashkim ishte p\u00ebr shqyrtim, shum\u00eb gj\u00ebra ishin nd\u00ebrruar n\u00eb kod. <\/p>\n<p><\/p>\n<p>P\u00ebrve\u00e7 historis\u00eb s\u00eb konflikteve, ka nj\u00eb histori p\u00ebr komunikimet. Nd\u00ebrsa dega juaj \u00ebsht\u00eb n\u00eb shqyrtim, nd\u00ebrsa ajo pret di\u00e7ka, nd\u00ebrsa ju po punoni gjat\u00eb p\u00ebr nj\u00eb karakteristik\u00eb, ju ndaloni s\u00eb ndjekuri se \u00e7far\u00eb tjet\u00ebr ndryshon n\u00eb baz\u00ebn e kodit t\u00eb sh\u00ebrbimit tuaj. Ndoshta, ajo q\u00eb tani po p\u00ebrpiqeni t\u00eb zgjidhni, \u00ebsht\u00eb zgjidhur nga dje dhe mund t\u00eb merrni dhe t\u00eb rip\u00ebrdorni ndonj\u00eb metod\u00eb. Por nuk do ta shihni k\u00ebt\u00eb, sepse gjithmon\u00eb po punoni me nj\u00eb deg\u00eb t\u00eb vjetruar. Dhe kjo deg\u00eb e vjetruar gjithmon\u00eb \u00e7on n\u00eb situat\u00ebn ku do t'ju duhet t\u00eb zgjidhni nj\u00eb konflikt bashkimi. <\/p>\n<p><\/p>\n<p>Pra, rezulton se n\u00ebse ne punojm\u00eb si nj\u00eb ekip, pra, jo nj\u00eb njeri po b\u00ebhet n\u00eb depo, por rreth 5-10 njer\u00ebz, aq m\u00eb gjat\u00eb q\u00eb ne nuk e shtojm\u00eb kodin ton\u00eb n\u00eb master, aq m\u00eb shum\u00eb vuajm\u00eb nga fakti se n\u00eb fund duhet t\u00eb bashkojm\u00eb di\u00e7ka. Dhe sa m\u00eb shum\u00eb konflikte kemi dhe sa m\u00eb t\u00eb vjet\u00ebr e kemi versionin me t\u00eb cilin punojm\u00eb, aq m\u00eb shum\u00eb probleme do t\u00eb kemi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/55c070f65a4d3838fb8c02bb9684c76b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>T\u00eb b\u00ebsh di\u00e7ka s\u00eb bashku \u00ebsht\u00eb e dhimbshme! Ne gjithmon\u00eb pengojm\u00eb nj\u00ebri-tjetrin. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/b914c50aad6f3c9f97edcad7e71ba627.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ky kjo problem u v\u00ebrejt 20 e m\u00eb shum\u00eb vjet m\u00eb par\u00eb. Referenca e par\u00eb p\u00ebr praktik\u00ebn e Continuous Integration e kam gjetur n\u00eb programim ekstremin.<\/p>\n<p><\/p>\n<p>Programimi ekstrem \u00ebsht\u00eb framework-u i par\u00eb agile. Faqja doli n\u00eb vitin 96. Dhe ishte ideja p\u00ebr t\u00eb p\u00ebrdorur disa praktika programimi, planifikimi e k\u00ebshtu me radh\u00eb, q\u00eb zhvillimi t\u00eb ishte sa m\u00eb fleksib\u00ebl, q\u00eb t\u00eb mund t\u00eb reagojm\u00eb m\u00eb shpejt ndaj disa ndryshimeve, k\u00ebrkesave nga klient\u00ebt tan\u00eb. Dhe ata 24 vjet m\u00eb par\u00eb filluan t\u00eb p\u00ebrballeshin me k\u00ebt\u00eb, q\u00eb n\u00ebse b\u00ebn di\u00e7ka shum\u00eb gjat\u00eb e n\u00eb an\u00eb, at\u00ebher\u00eb po humbasin m\u00eb shum\u00eb koh\u00eb p\u00ebr shkak t\u00eb konflikteve. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/93a80838bdb3b297557dbf2ac7587965.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tani do ta shqyrtojm\u00eb shprehjen \"Continuous Integration\" sipas fjal\u00ebve t\u00eb ve\u00e7anta. N\u00ebse e p\u00ebrkthejm\u00eb drejtp\u00ebrdrejt, del integrim i pand\u00ebrprer\u00eb. Por sa \u00ebsht\u00eb v\u00ebrtet\u00eb pand\u00ebrprer\u00eb nuk \u00ebsht\u00eb shum\u00eb e qart\u00eb, ajo \u00ebsht\u00eb mjaft e nd\u00ebrprer\u00eb. Por sa \u00ebsht\u00eb integrim gjithashtu nuk \u00ebsht\u00eb shum\u00eb e dukshme. <\/p>\n<p><\/p>\n<p>Dhe p\u00ebr k\u00ebt\u00eb po ju sjell tani citate nga programimi ekstrem. Dhe do t'i shqyrtojm\u00eb t\u00eb dy fjal\u00ebt ve\u00e7 e ve\u00e7. <\/p>\n<p><\/p>\n<p>Integration \u2014 Si\u00e7 e theksova, ne strehim q\u00eb \u00e7do inxhinier t\u00eb punoj\u00eb me versionin m\u00eb t\u00eb fundit t\u00eb kodit, q\u00eb ai t\u00eb p\u00ebrpiqet t\u00eb shtoj\u00eb kodin e tij sa m\u00eb shpesh n\u00eb deg\u00ebn e p\u00ebrbashk\u00ebt, q\u00eb ato t\u00eb jen\u00eb deg\u00eb shum\u00eb t\u00eb vogla. Sepse n\u00ebse ato jan\u00eb t\u00eb m\u00ebdha, mund t\u00eb ngecim leht\u00ebsisht p\u00ebr nj\u00eb jav\u00eb me konflikte t\u00eb bashkimit. Sidomos n\u00ebse kemi nj\u00eb cik\u00ebl t\u00eb gjat\u00eb zhvillimi si waterfall, ku zhvilluesi \u00ebsht\u00eb larguar p\u00ebr nj\u00eb muaj p\u00ebr t\u00eb punuar nj\u00eb karakteristik\u00eb t\u00eb madhe. Dhe ai gjat\u00eb integrimit do t\u00eb ngec\u00eb p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb. <\/p>\n<p><\/p>\n<p>Integration \u2013 \u00ebsht\u00eb kur e marrim deg\u00ebn ton\u00eb dhe e integrojm\u00eb at\u00eb me master-in, ne e bashkojm\u00eb. Ka nj\u00eb variant ultimativ, kur ne e transbasojm\u00eb zhvilluesin, ku ne synojm\u00eb q\u00eb t\u00eb shkruajm\u00eb direkt n\u00eb master pa deg\u00eb t\u00eb tepruara.<\/p>\n<p><\/p>\n<p>N\u00eb p\u00ebrgjith\u00ebsi, integration \u2013 \u00ebsht\u00eb t\u00eb marr\u00ebsh kodin t\u00ebnd dhe ta sjell\u00ebsh at\u00eb n\u00eb master. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/8950103e6a59ed7132ec321ac6abe600.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00c7far\u00eb n\u00ebnkuptohet k\u00ebtu me fjal\u00ebn \"continuous\", \u00e7far\u00eb quhet vazhdim\u00ebsi? Prakika n\u00ebnkupton q\u00eb zhvilluesi p\u00ebrpiqet t\u00eb integroj\u00eb kodin e tij sa m\u00eb shpejt t\u00eb jet\u00eb e mundur. Kjo \u00ebsht\u00eb q\u00ebllimi i tij gjat\u00eb realizimit t\u00eb \u00e7do detyre \u2013 t\u00eb b\u00ebj\u00eb n\u00eb m\u00ebnyr\u00eb q\u00eb kodi i tij t\u00eb shfaqet n\u00eb master sa m\u00eb shpejt. N\u00eb nj\u00eb bot\u00eb ideale, zhvilluesit do ta b\u00ebnin k\u00ebt\u00eb \u00e7do disa or\u00eb. Do t\u00eb thot\u00eb, merrni nj\u00eb detyr\u00eb t\u00eb vog\u00ebl, e bashk\u00ebngjitni n\u00eb master. E gjith\u00eb kjo \u00ebsht\u00eb e shk\u00eblqyer. K\u00ebshtu duhet t\u00eb synoni. Dhe duhet ta b\u00ebni at\u00eb vazhdimisht. Sa her\u00eb q\u00eb b\u00ebni di\u00e7ka, menj\u00ebher\u00eb e d\u00ebrgoni n\u00eb master. <\/p>\n<p><\/p>\n<p>Dhe zhvilluesi q\u00eb b\u00ebn di\u00e7ka \u00ebsht\u00eb p\u00ebrgjegj\u00ebs p\u00ebr at\u00eb q\u00eb b\u00ebri, q\u00eb t\u00eb funksionoj\u00eb dhe t\u00eb mos prish\u00eb asgj\u00eb. K\u00ebtu zakonisht lind historia me testet. Ne duam t\u00eb ekzekutojm\u00eb disa teste mbi commit-in ton\u00eb, mbi bashkimin ton\u00eb, p\u00ebr t\u00eb siguruar q\u00eb kjo funksionon. Dhe k\u00ebtu Jenkins mund t'ju ndihmoj\u00eb.<\/p>\n<p><\/p>\n<p>Por me historin\u00eb: le t\u00eb jen\u00eb ndryshimet t\u00eb vogla, le t'i b\u00ebjm\u00eb detyrat t\u00eb vogla, le t\u00eb p\u00ebrpiqemi t\u00eb bashkojm\u00eb detyrat direkt n\u00eb master \u2013 k\u00ebtu asnj\u00eb Jenkins nuk do t'ju ndihmoj\u00eb. Sepse Jenkins do t'ju ndihmoj\u00eb vet\u00ebm p\u00ebr t\u00eb ekzekutuar testet. <\/p>\n<p><\/p>\n<p>Mund t\u00eb kaloni edhe pa to. Kjo nuk do t'ju pengoj\u00eb aspak. Sepse q\u00ebllimi i praktik\u00ebs \u00ebsht\u00eb q\u00eb t\u00eb bashkoheni sa m\u00eb shpesh, p\u00ebr t\u00eb mos shpenzuar nj\u00eb koh\u00eb t\u00eb madhe n\u00eb ndonj\u00eb konflikte n\u00eb t\u00eb ardhmen. <\/p>\n<p><\/p>\n<p>T\u00eb imagjinojm\u00eb se jemi n\u00eb vitin 2020 ndonj\u00ebher\u00eb pa internet. Dhe ne po punojm\u00eb lokal. Nuk kemi Jenkins. Kjo \u00ebsht\u00eb normale. Ende mund t\u00eb merrni dhe t\u00eb krijoni nj\u00eb deg\u00eb lokale. Keni shkruar ndonj\u00eb kod n\u00eb t\u00eb. Keni b\u00ebr\u00eb nj\u00eb detyr\u00eb p\u00ebr 3-4 or\u00eb. Jeni kaluar n\u00eb master, keni b\u00ebr\u00eb git pull, keni bashkuar deg\u00ebn tuaj atje. Keni mbaruar. N\u00ebse e b\u00ebni k\u00ebt\u00eb shpesh \u2013 p\u00ebrg\u00ebzime, keni Continuous Integration!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/1f2117b65994b940edb04e0e119f6e8a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cilat jan\u00eb provat n\u00eb bot\u00ebn moderne se ia vlen t\u00eb investosh energji p\u00ebr k\u00ebt\u00eb? Sepse n\u00eb p\u00ebrgjith\u00ebsi \u00ebsht\u00eb e v\u00ebshtir\u00eb. N\u00ebse provoni t\u00eb punoni k\u00ebshtu, do t\u00eb kuptoni se tani do t\u00eb p\u00ebrfshiheni n\u00eb nj\u00eb planifikim t\u00eb caktuar, do t'ju duhet t\u00eb kaloni m\u00eb shum\u00eb koh\u00eb p\u00ebr t\u00eb dekomponuar detyrat. Sepse n\u00ebse do t\u00eb b\u00ebni man\u2026, nuk do t\u00eb mund t\u00eb bashkoheni shpejt dhe, p\u00ebr rrjedhoj\u00eb, do t\u00eb bini n\u00eb telashe. Nuk do t\u00eb keni m\u00eb praktik\u00ebn. <\/p>\n<p><\/p>\n<p>Dhe kjo do t\u00eb jet\u00eb e shtrenjt\u00eb. Nuk do t\u00eb mund t\u00eb punoni me Continuous Integration q\u00eb nga nes\u00ebr. T\u00eb gjith\u00eb do t'ju duhet shum\u00eb koh\u00eb t\u00eb p\u00ebrshtateni, shum\u00eb koh\u00eb t\u00eb m\u00ebsoni t\u00eb dekompozoni detyrat, shum\u00eb koh\u00eb t\u00eb m\u00ebsoni t\u00eb rishikoni praktikat, n\u00ebse i keni. Sepse q\u00ebllimi yn\u00eb \u00ebsht\u00eb q\u00eb t\u00eb b\u00ebhet bashkimi sot. N\u00ebse e b\u00ebni rishikimin p\u00ebr tre dit\u00eb, at\u00ebher\u00eb keni probleme dhe nuk e realizoni Continuous Integration. <\/p>\n<p><\/p>\n<p>Por a kemi ndonj\u00eb prov\u00eb t\u00eb r\u00ebnd\u00ebsishme tani q\u00eb na tregon se ka kuptim t\u00eb investohet n\u00eb k\u00ebt\u00eb praktik\u00eb?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/2026a8f1d72fb05613511e7bab57e8ec.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>E para q\u00eb m\u00eb shkon n\u00eb mendje \u00ebsht\u00eb State of DevOps. Kjo \u00ebsht\u00eb nj\u00eb k\u00ebrkim q\u00eb ata e b\u00ebjn\u00eb tashm\u00eb p\u00ebr 7 vjet. Tani ata e b\u00ebjn\u00eb si nj\u00eb organizat\u00eb t\u00eb pavarur, por n\u00ebn Google.<\/p>\n<p><\/p>\n<p>Dhe k\u00ebrkimi i tyre n\u00eb vitin 2018 tregoi nj\u00eb korelacion mes kompanive q\u00eb p\u00ebrpiqen t\u00eb p\u00ebrdorin deg\u00eb me jet\u00eb t\u00eb shkurt\u00ebr, t\u00eb cilat integlohen shpejt, integlohen shpesh, ato kan\u00eb tregues m\u00eb t\u00eb mir\u00eb t\u00eb performanc\u00ebs IT.<\/p>\n<p><\/p>\n<p>Cilat jan\u00eb k\u00ebta tregues? K\u00ebto jan\u00eb 4 metrika q\u00eb ata grumbullojn\u00eb nga t\u00eb gjitha kompanit\u00eb n\u00eb anketat e tyre: frekuenca e vendosjes, koha p\u00ebr ndryshime, koha p\u00ebr t\u00eb rikthyer sh\u00ebrbimin, shkalla e d\u00ebshtimit t\u00eb ndryshimeve.<\/p>\n<p><\/p>\n<p>S\u00eb pari, ka k\u00ebt\u00eb korelacion, ne e dim\u00eb se kompanit\u00eb q\u00eb b\u00ebjn\u00eb shp\u00ebrthime shpesh, ato kan\u00eb k\u00ebto metrika shum\u00eb m\u00eb t\u00eb mira. Dhe ata e ndajn\u00eb kompanit\u00eb n\u00eb disa kategori: kompani t\u00eb ngadalta, q\u00eb prodhojn\u00eb di\u00e7ka ngadal\u00eb, performer\u00eb t\u00eb mes\u00ebm, performer\u00eb t\u00eb lart\u00eb dhe elita. Elita \u2013 kjo \u00ebsht\u00eb Netflix, Amazon, q\u00eb jan\u00eb shum\u00eb t\u00eb shpejt\u00eb, gjith\u00e7ka e b\u00ebjn\u00eb shpejt, bukur dhe me cil\u00ebsi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/4fd98ef48a5cffdd6ae2ceea93dbb0bf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Historia e dyt\u00eb, q\u00eb ndodhi pik\u00ebrisht para nj\u00eb muaji. N\u00eb Technology Radar u shfaq nj\u00eb sh\u00ebnim i shk\u00eblqyer mbi Gitflow. Gitflow ndryshon nga t\u00eb tjer\u00ebt sepse deg\u00ebt e tij jetojn\u00eb gjat\u00eb. Ka deg\u00eb l\u00ebshimi q\u00eb jetojn\u00eb gjat\u00eb, deg\u00eb funksionesh q\u00eb gjithashtu jetojn\u00eb gjat\u00eb. Kjo praktik\u00eb n\u00eb Technology Radar \u00ebsht\u00eb kaluar n\u00eb HOLD. Pse? Sepse njer\u00ebzit p\u00ebrballen me dhimbje integrimi. <\/p>\n<p><\/p>\n<p>N\u00ebse ke nj\u00eb deg\u00eb q\u00eb jeton shum\u00eb gjat\u00eb, ajo ngec, kalbet, ne fillojm\u00eb t\u00eb harxhojm\u00eb m\u00eb shum\u00eb koh\u00eb p\u00ebr t\u00eb b\u00ebr\u00eb nj\u00eb ndryshim n\u00eb t\u00eb. <\/p>\n<p><\/p>\n<p>Dhe sapo autori i Gitflow tha se, n\u00ebse jeni duke synuar Integrimin e Vazhdush\u00ebm, n\u00ebse d\u00ebshironi t\u00eb l\u00ebvizni sa m\u00eb shpesh t\u00eb jet\u00eb e mundur, at\u00ebher\u00eb Gitflow \u00ebsht\u00eb nj\u00eb ide e keqe. Ai theksoi gjithashtu n\u00eb nj\u00eb artikull se, n\u00ebse keni nj\u00eb backend ku mund ta arrini k\u00ebt\u00eb, at\u00ebher\u00eb Gitflow \u00ebsht\u00eb i tep\u00ebrt p\u00ebr ju, sepse Gitflow do t'ju ngadal\u00ebsoj\u00eb dhe do t'ju krijoj\u00eb probleme me integrimin. <\/p>\n<p><\/p>\n<p>Kjo nuk do t\u00eb thot\u00eb se Gitflow \u00ebsht\u00eb i keq dhe se nuk duhet ta p\u00ebrdorni. Ai \u00ebsht\u00eb p\u00ebr raste t\u00eb tjera. P\u00ebr shembull, kur ju nevojitet t\u00eb mbani disa versione t\u00eb sh\u00ebrbimit, aplikacionit, pra, atje ku ju nevojitet t\u00eb mb\u00ebshtesni gjat\u00eb nj\u00eb periudhe t\u00eb gjat\u00eb. <\/p>\n<p><\/p>\n<p>Por n\u00ebse bisedoni me njer\u00ebzit q\u00eb mb\u00ebshtesin k\u00ebto sh\u00ebrbime, do t\u00eb d\u00ebgjoni shum\u00eb ankes\u00eb se kjo version ishte 3.2, q\u00eb ishte 4 muaj m\u00eb par\u00eb, dhe nuk p\u00ebrfshiu k\u00ebt\u00eb ndreqje dhe tani, p\u00ebr ta futur, duhet t\u00eb b\u00ebni shum\u00eb ndryshime. Dhe tani jan\u00eb s\u00ebrish t\u00eb bllokuar, dhe po kalojn\u00eb nj\u00eb jav\u00eb duke u p\u00ebrpjekur t\u00eb marrin dhe t\u00eb bashkojn\u00eb ndonj\u00eb ve\u00e7ori t\u00eb re. <\/p>\n<p><\/p>\n<p>Si\u00e7 vuri n\u00eb dukje sakt\u00ebsisht Aleksand\u00ebr Kovaljev n\u00eb bised\u00eb, korrelacioni nuk \u00ebsht\u00eb e nj\u00ebjt\u00eb me lidhjen shkak-pasoj\u00eb. Kjo \u00ebsht\u00eb e v\u00ebrtet\u00eb. Do t\u00eb thot\u00eb, nuk ka ndonj\u00eb lidhje t\u00eb drejtp\u00ebrdrejt\u00eb, q\u00eb n\u00ebse keni Integrim t\u00eb Vazhdush\u00ebm, at\u00ebher\u00eb t\u00eb gjitha metrikat do t\u00eb jen\u00eb t\u00eb shk\u00eblqyera, jo. Por ka nj\u00eb korrelacion pozitiv, q\u00eb n\u00ebse kemi nj\u00ebrin, at\u00ebher\u00eb shum\u00eb gjasa kemi edhe tjetrin. Nuk \u00ebsht\u00eb fakt, por \u00ebsht\u00eb shum\u00eb e mundshme. Kjo \u00ebsht\u00eb vet\u00ebm nj\u00eb korrelacion. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Integrimi i vazhduesh\u00ebm si praktik\u00eb, dhe jo Jenkins. Andrey Alexandrov\" src=\"\/wp-content\/uploads\/2020\/09\/d5fc050550b0e9f86a1fdf85fff32fa5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Duket se ne po b\u00ebjm\u00eb di\u00e7ka, duket se po i bashkojm\u00eb, por si t\u00eb kuptojm\u00eb se integrimi i vazhduesh\u00ebm na e ka; se ne po bashkohemi mjaft shpesh?<\/p>\n<p><\/p>\n<p>Jez Humble \u00ebsht\u00eb autori i Handbook, Accelerate, faqes Continuous Delivery dhe librit \"Continuous Delivery\". Ai ofron nj\u00eb test t\u00eb till\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Kodi i inxhinierit hyn n\u00eb master \u00e7do dit\u00eb. <\/li>\n<li>P\u00ebr \u00e7do commit, ju ndizni testet unit.<\/li>\n<li>Build-i n\u00eb master ra, e riparuan brenda rreth 10 minutash.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ai propozon t\u00eb p\u00ebrdorni nj\u00eb test t\u00eb till\u00eb p\u00ebr t\u00eb siguruar se praktika juaj \u00ebsht\u00eb me t\u00eb v\u00ebrtet\u00eb aty. <\/p>\n<p><\/p>\n<p>E fundit e gjej pak t\u00eb diskutueshme. Pra, n\u00ebse mund ta rregulloni brenda 10 minutash, at\u00ebher\u00eb keni Continuous Integration, kjo duket pak e \u00e7uditshme p\u00ebr mendimin tim, por ka kuptim. Pse? Sepse, n\u00ebse b\u00ebni merge shpesh, kjo do t\u00eb thot\u00eb q\u00eb ndryshimet jan\u00eb t\u00eb vogla. N\u00ebse ndonj\u00eb ndryshim i vog\u00ebl shkakton d\u00ebshtimin e nd\u00ebrtimit t\u00eb masterit, do t\u00eb mund ta gjeni shpejt, sepse ndryshimi \u00ebsht\u00eb i vog\u00ebl. Keni pasur nj\u00eb merge t\u00eb vog\u00ebl, n\u00eb t\u00eb cilin jan\u00eb ndryshuar 20-30 rreshta. Dhe, p\u00ebrkat\u00ebsisht, mund ta kuptoni shpejt se cila \u00ebsht\u00eb arsyeja, sepse ndryshimet jan\u00eb shum\u00eb t\u00eb vogla, keni nj\u00eb zon\u00eb shum\u00eb t\u00eb vog\u00ebl p\u00ebr t\u00eb k\u00ebrkuar problemin. <\/p>\n<p><\/p>\n<p>Dhe edhe n\u00ebse prodhimi yn\u00eb prishet pas lan\u00e7imit, n\u00ebse kemi praktik\u00ebn e Continuous Integration, na \u00ebsht\u00eb shum\u00eb m\u00eb e leht\u00eb t\u00eb veprojm\u00eb, sepse ndryshimet jan\u00eb t\u00eb vogla. Po, kjo do ta prek\u00eb planifikimin. Do t\u00eb jet\u00eb e dhimbshme. Dhe, ndoshta, gj\u00ebja m\u00eb e v\u00ebshtir\u00eb n\u00eb k\u00ebt\u00eb praktik\u00eb \u00ebsht\u00eb t\u00eb m\u00ebsohesh t\u00eb ndash detyrat, pra, si t\u00eb b\u00ebsh di\u00e7ka dhe ta realizosh brenda disa or\u00ebve dhe n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb t\u00eb kalosh n\u00ebp\u00ebr rishikim, n\u00ebse e ke at\u00eb. Rishikimi \u00ebsht\u00eb nj\u00eb dhimbje e ve\u00e7ant\u00eb. <\/p>\n<p><\/p>\n<p>Testet unitare jan\u00eb thjesht nj\u00eb ndihm\u00ebs q\u00eb ju ndihmon t\u00eb kuptoni n\u00ebse integrimi juaj kalon me sukses, n\u00ebse v\u00ebrtet nuk ka ndodhur ndonj\u00eb prishje. P\u00ebr mendimin tim, kjo gjithashtu nuk \u00ebsht\u00eb nj\u00eb pik\u00eb e domosdoshme, sepse kuptimi i praktik\u00ebs nuk q\u00ebndron aty. <\/p>\n<p><\/p>\n<p>Ky ishte nj\u00eb p\u00ebrmbledhje e shkurt\u00ebr p\u00ebr Continuous Integration. Kjo \u00ebsht\u00eb gjith\u00e7ka q\u00eb ka n\u00eb k\u00ebt\u00eb praktik\u00eb. Jam gati p\u00ebr pyetje. <\/p>\n<p><\/p>\n<p>P\u00ebrmbledh faktikisht vet\u00ebm nj\u00eb her\u00eb tjet\u00ebr:<\/p>\n<p><\/p>\n<ul>\n<li>Continuous Integration nuk \u00ebsht\u00eb Jenkins, nuk \u00ebsht\u00eb Gitlab.<\/li>\n<li>Nuk \u00ebsht\u00eb nj\u00eb mjet, \u00ebsht\u00eb nj\u00eb praktik\u00eb p\u00ebr at\u00eb q\u00eb ne sa m\u00eb shpesh q\u00eb mundemi i b\u00ebjm\u00eb merge kodin ton\u00eb n\u00eb master. <\/li>\n<li>E b\u00ebjm\u00eb k\u00ebt\u00eb q\u00eb t\u00eb shmangim dhimbjen e madhe q\u00eb ndodh me m\u00ebrgjet n\u00eb t\u00eb ardhmen, pra, p\u00ebrjetojm\u00eb nj\u00eb dhimbje t\u00eb vog\u00ebl tani, q\u00eb t\u00eb mos p\u00ebrjetojm\u00eb nj\u00eb t\u00eb madhe n\u00eb t\u00eb ardhmen. Kjo \u00ebsht\u00eb e gjith\u00eb kuptimi. <\/li>\n<li>Nga ana tjet\u00ebr, komunikimi kalon p\u00ebrmes kodit, por un\u00eb k\u00ebt\u00eb e shoh shum\u00eb rrall\u00eb, por p\u00ebr k\u00ebt\u00eb \u00ebsht\u00eb menduar gjithashtu.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Pyetje<\/strong><\/p>\n<p><\/p>\n<p><em>\u00c7far\u00eb t\u00eb b\u00ebjm\u00eb me detyrat e pa ndar\u00eb?<\/em><\/p>\n<p><\/p>\n<p>T'i ndajm\u00eb. \u00c7far\u00eb \u00ebsht\u00eb problemi? Mundi t\u00eb sillni nj\u00eb shembull, se ka nj\u00eb detyr\u00eb dhe ajo nuk ndahet?<\/p>\n<p><\/p>\n<p><em>Ka detyra t\u00eb tilla q\u00eb nuk mund t\u00eb ndahen fare, p\u00ebr shembull, ato q\u00eb k\u00ebrkojn\u00eb ekspertiz\u00eb t\u00eb thell\u00eb dhe q\u00eb v\u00ebrtet mund t\u00eb zgjidhen p\u00ebr nj\u00eb muaj deri n\u00eb nj\u00eb rezultat t\u00eb pranuesh\u00ebm.<\/em> <\/p>\n<p><\/p>\n<p>N\u00ebse te kuptova drejt\u00eb, ka nj\u00eb detyr\u00eb t\u00eb madhe dhe t\u00eb komplikuar, rezultatet e s\u00eb cil\u00ebs do t\u00eb jen\u00eb t\u00eb dukshme vet\u00ebm pas nj\u00eb muaji?<\/p>\n<p><\/p>\n<p><em>Po, e sakt\u00eb. Po, mund t\u00eb vler\u00ebsojm\u00eb rezultatin jo m\u00eb her\u00ebt se pas nj\u00eb muaji.<\/em> <\/p>\n<p><\/p>\n<p>Mir\u00eb. N\u00eb p\u00ebrgjith\u00ebsi, kjo nuk \u00ebsht\u00eb nj\u00eb problem. Pse? Sepse, n\u00eb k\u00ebt\u00eb rast, kur flasim p\u00ebr deg\u00eb, nuk flasim p\u00ebr nj\u00eb deg\u00eb me nj\u00eb ve\u00e7ori. Ve\u00e7orit\u00eb mund t\u00eb jen\u00eb t\u00eb m\u00ebdha dhe t\u00eb komplikuara. Ato mund t\u00eb prekin nj\u00eb num\u00ebr t\u00eb madh komponent\u00ebsh. Dhe ndoshta, nuk mund t'i realizojm\u00eb plot\u00ebsisht brenda nj\u00eb dege. Kjo \u00ebsht\u00eb normale. Na nevojitet vet\u00ebm ta ndajm\u00eb k\u00ebt\u00eb histori. N\u00ebse ve\u00e7oria nuk \u00ebsht\u00eb gati deri n\u00eb fund, kjo nuk do t\u00eb thot\u00eb se disa pjes\u00eb t\u00eb kodit t\u00eb saj nuk mund t\u00eb bashkohen. P\u00ebr shembull, ke shtuar nj\u00eb migrim dhe brenda ve\u00e7oris\u00eb ka disa etapa. Ki etapat \u2013 b\u00ebn\u00eb migrimin, shto nj\u00eb metod\u00eb t\u00eb re. Dhe k\u00ebto gj\u00ebra mund t'i bashkosh \u00e7do dit\u00eb. <\/p>\n<p><\/p>\n<p><em>Mir\u00eb. \u00c7far\u00eb ka n\u00eb k\u00ebt\u00eb rast?<\/em><\/p>\n<p><\/p>\n<p>\u00c7Far\u00eb kuptimi ka t\u00eb bashkosh gj\u00ebra t\u00eb vogla \u00e7do dit\u00eb?<\/p>\n<p><\/p>\n<p><em>Po.<\/em><\/p>\n<p><\/p>\n<p>N\u00ebse ato t\u00eb kan\u00eb prishur ndonj\u00eb gj\u00eb, e sheh menj\u00ebher\u00eb. Ke nj\u00eb cop\u00eb t\u00eb vog\u00ebl q\u00eb e ka prishur di\u00e7ka, \u00ebsht\u00eb m\u00eb e leht\u00eb ta rregullosh. Kuptimi \u00ebsht\u00eb q\u00eb t\u00eb bashkosh nj\u00eb cop\u00eb t\u00eb vog\u00ebl tani \u00ebsht\u00eb shum\u00eb m\u00eb e leht\u00eb se sa t\u00eb bashkosh di\u00e7ka t\u00eb madhe pas disa jav\u00ebsh. Dhe kuptimi i tret\u00eb \u00ebsht\u00eb q\u00eb inxhinier\u00ebt e tjer\u00eb do t\u00eb punojn\u00eb me versionin aktual t\u00eb kodit. Ata do t\u00eb shohin se k\u00ebtu jan\u00eb shtuar disa migrazione, e k\u00ebtu \u00ebsht\u00eb shfaqur nj\u00eb metod\u00eb, t\u00eb cil\u00ebn ndoshta ata do t\u00eb duan ta p\u00ebrdorin gjithashtu. T\u00eb gjith\u00eb do t\u00eb shohin se \u00e7far\u00eb ndodh me kodin t\u00ebnd. Pik\u00ebrisht p\u00ebr k\u00ebto tre gj\u00ebra b\u00ebhet kjo praktik\u00eb. <\/p>\n<p><\/p>\n<p><em>Faleminderit, pyetja \u00ebsht\u00eb e mbyllur!<\/em><\/p>\n<p><\/p>\n<p><em>(Oleg Soroka) Mund t\u00eb shtoj nj\u00eb gj\u00eb? E theve sakt\u00eb, vet\u00ebm dua t\u00eb shtoj nj\u00eb fraz\u00eb.<\/em><\/p>\n<p><\/p>\n<p>Ashtu.<\/p>\n<p><\/p>\n<p><em>Me Continuous Integration, kodi bashkohet n\u00eb degen p\u00ebrkat\u00ebse jo kur ve\u00e7oria \u00ebsht\u00eb plot\u00ebsisht e gatshme, por kur ndalon s\u00eb prishuri buildin. Dhe ju mund t\u00eb angazhoni n\u00eb master sa her\u00eb q\u00eb t\u00eb d\u00ebshironi gjat\u00eb dit\u00ebs. Aspekti i dyt\u00eb \u2013 n\u00ebse nuk mund t\u00eb ndash nj\u00eb detyr\u00eb mujor n\u00eb detyra p\u00ebr t\u00eb pakt\u00ebn tri dit\u00eb, e l\u00eb p\u00ebr tri or\u00eb, at\u00ebher\u00eb ke nj\u00eb problem t\u00eb madh. Dhe fakti q\u00eb nuk ke Continuous Integration \u00ebsht\u00eb problemi m\u00eb i vog\u00ebl. Kjo do t\u00eb thot\u00eb q\u00eb ke probleme me arkitektur\u00ebn dhe praktikatat inxhinierike jan\u00eb n\u00eb zero. Sepse edhe n\u00ebse \u00ebsht\u00eb hulumtim, n\u00eb \u00e7do rast duhet ta paraqes\u00ebsh si hipoteza ose cic\u00ebl.<\/em> <\/p>\n<p><\/p>\n<p><em>Kemi folur p\u00ebr 4 metrika q\u00eb i ndajn\u00eb kompanit\u00eb e suksesshme nga ato n\u00eb prapa. Duhet t\u00eb arrijm\u00eb k\u00ebto 4 metrika. N\u00ebse nj\u00eb detyr\u00eb mesatare zgjat nj\u00eb muaj, un\u00eb do t\u00eb p\u00ebrq\u00ebndrohesha fillimisht te kjo metrik\u00eb. Do ta uja at\u00eb fillimisht n\u00eb 3 dit\u00eb. Dhe pas k\u00ebsaj, do t\u00eb filloja t\u00eb mendoja p\u00ebr Continuous.<\/em><\/p>\n<p><\/p>\n<p>A e kuptova sakt\u00eb, q\u00eb mendon se n\u00eb p\u00ebrgjith\u00ebsi nuk ka kuptim t\u00eb investosh n\u00eb praktikat inxhinierike, n\u00ebse \u00e7do detyr\u00eb zgjat nj\u00eb muaj?<\/p>\n<p><\/p>\n<p><em>Ke Continuous Integration. Dhe aty ka nj\u00eb tem\u00eb, q\u00eb brenda 10 minutave duhet t\u00eb rregullosh nj\u00eb gabim ose t\u00eb rikthehesh. Imagjino, e nxorre at\u00eb. Madje ke edhe continuous deployment, e nxorre n\u00eb prodhimin dhe vet\u00ebm at\u00ebher\u00eb e v\u00ebren se di\u00e7ka ka shkuar keq. Dhe tani duhet ta rikthehesh, nd\u00ebrkoh\u00eb q\u00eb tashm\u00eb ka ndodhur migrimi i baz\u00ebs s\u00eb t\u00eb dh\u00ebnave. Tashm\u00eb ke skem\u00ebn e versionit t\u00eb ardhsh\u00ebm t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, madje, gjithashtu ka kaluar ndonj\u00eb backup dhe jan\u00eb regjistruar t\u00eb dh\u00ebna aty.<\/em><\/p>\n<p><\/p>\n<p><em>Dhe cila \u00ebsht\u00eb alternativa jote? N\u00ebse rikthen kodin prapa, at\u00ebher\u00eb ai nuk mund t\u00eb punoj\u00eb me k\u00ebt\u00eb baz\u00eb t\u00eb dh\u00ebnash t\u00eb p\u00ebrdit\u00ebsuar.<\/em><\/p>\n<p><\/p>\n<p>Baza l\u00ebviz vet\u00ebm p\u00ebrpara, po. <\/p>\n<p><\/p>\n<p><em>Tek njer\u00ebzit q\u00eb kan\u00eb praktika inxhinierike t\u00eb dob\u00ebta, shum\u00eb mund\u00ebsi nuk e kan\u00eb lexuar as at\u00eb lib\u00ebr t\u00eb trash\u00eb p\u00ebr... \u00c7far\u00eb t\u00eb b\u00ebsh me backup-in? N\u00ebse rikthehesh nga nj\u00eb backup, at\u00ebher\u00eb do t\u00eb thot\u00eb se humb t\u00eb dh\u00ebnat q\u00eb jan\u00eb grumbulluar gjat\u00eb k\u00ebsaj periudhe. P\u00ebr shembull, ke punuar tre or\u00eb me versionin e ri t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, atje jan\u00eb regjistruar p\u00ebrdoruesit. Ti rikthehesh n\u00eb nj\u00eb backup t\u00eb vjet\u00ebr, sepse me versionin e ri skema nuk punon, si p\u00ebr pasoj\u00eb, k\u00ebta p\u00ebrdorues i humb. Dhe ata jan\u00eb t\u00eb pak\u00ebnaqur, ata ankohen.<\/em><\/p>\n<p><\/p>\n<p><em>P\u00ebr t\u00eb zot\u00ebruar t\u00eb gjith\u00eb spektrin e praktikave q\u00eb mb\u00ebshtesin Continuous Integration dhe Continuous Delivery, nuk mjafton t\u00eb m\u00ebsosh thjesht \u2026. S\u00eb pari, ato mund t\u00eb jen\u00eb shum\u00eb, dhe kjo do t\u00eb ishte e papraktikshme. P\u00ebrve\u00e7 k\u00ebsaj, ka nj\u00eb num\u00ebr praktikash t\u00eb tjera si Scientific. Ekziston nj\u00eb praktik\u00eb, q\u00eb GitHub e popullarizoi nj\u00eb koh\u00eb, kur t\u00eb gjitha kodet, edhe ato t\u00eb vjetra, edhe ato t\u00eb reja, ekzekutohen n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb. Kjo ndodh kur krijon nj\u00eb karakteristik\u00eb t\u00eb pa p\u00ebrfunduar q\u00eb mund t\u00eb kthej\u00eb nj\u00eb vler\u00eb: si nj\u00eb funksion, ose si nj\u00eb Rest API. Ti ekzekuton t\u00eb dyja kodet e reja dhe t\u00eb vjetra dhe krahason ndryshimin midis tyre. N\u00ebse ka nj\u00eb ndryshim, at\u00ebher\u00eb e regjistron k\u00ebt\u00eb ngjarje. K\u00ebshtu, ti e di se karakteristika jote e re \u00ebsht\u00eb gati t\u00eb aktivizohet mbi t\u00eb vjetrin, n\u00ebse gjat\u00eb nj\u00eb periudhe t\u00eb caktuar nuk ka pasur ndonj\u00eb ndryshim mes k\u00ebtyre dyve.<\/em> <\/p>\n<p><\/p>\n<p><em>Ka qindra praktika t\u00eb tilla. Do t\u00eb sugjeroja t\u00eb filloni me zhvillimin e transbase. Ajo nuk \u00ebsht\u00eb 100 % n\u00eb Continuous Integration, por praktikat jan\u00eb t\u00eb nj\u00ebjta, nj\u00ebra nuk jeton mir\u00eb pa tjetr\u00ebn.<\/em> <\/p>\n<p><\/p>\n<p>A e ke p\u00ebrmendur zhvillimin e transbase si nj\u00eb shembull ku mund t\u00eb shihen praktikat, apo po sugjeron q\u00eb njer\u00ebzit t\u00eb fillojn\u00eb ta p\u00ebrdorin zhvillimin e transbase?<\/p>\n<p><\/p>\n<p><em>T\u00eb shihen, pasi ata nuk do t\u00eb jen\u00eb n\u00eb gjendje ta p\u00ebrdorin. P\u00ebr ta p\u00ebrdorur, duhet t\u00eb lexojn\u00eb shum\u00eb. Dhe kur dikush pyet: \"\u00c7far\u00eb duhet t\u00eb b\u00ebj me nj\u00eb karakteristik\u00eb q\u00eb zgjat nj\u00eb muaj, kjo do t\u00eb thot\u00eb se ai nuk ka lexuar p\u00ebr zhvillimin e transbase.\" Un\u00eb gjithashtu nuk do t\u00eb k\u00ebshilloja akoma. Do t\u00eb sugjeroja t\u00eb p\u00ebrqendrohen ekskluzivisht n\u00eb tem\u00ebn se si t\u00eb ndajm\u00eb arkitektonikisht detyrat e m\u00ebdha n\u00eb m\u00eb t\u00eb vogla. Kjo \u00ebsht\u00eb thelbi i dekonstrukcionit.<\/em><\/p>\n<p><\/p>\n<p><em>Dekonstrukcioni \u00ebsht\u00eb nj\u00eb nga instrumentet e arkitektit. Ne fillimisht b\u00ebjm\u00eb nj\u00eb analiz\u00eb, m\u00eb pas dekonstruktion, pastaj sintez\u00eb, m\u00eb pas integrim. Dhe k\u00ebshtu gjith\u00e7ka p\u00ebrb\u00ebhet. Dhe p\u00ebrpara se t\u00eb arrijm\u00eb tek Continuous Integration, duhet t\u00eb rritemi p\u00ebrmes dekonstrukcionit. Pyetjet n\u00eb faz\u00ebn e par\u00eb dalin, dhe ne tashm\u00eb flasim p\u00ebr faz\u00ebn e kat\u00ebrt, do t\u00eb thot\u00eb, sa m\u00eb shpesh t\u00eb b\u00ebsh integrimin, aq m\u00eb mir\u00eb. Akoma \u00ebsht\u00eb her\u00ebt p\u00ebr ta b\u00ebr\u00eb, do t\u00eb ishte mir\u00eb fillimisht t\u00eb ndahesh monolitin t\u00ebnd.<\/em> <\/p>\n<p><\/p>\n<p><em>Duhet t\u00eb vizatoni disa shigjeta dhe katror\u00eb n\u00eb ndonj\u00eb diagram. Ti nuk mund t\u00eb thua se tani do t\u00eb tregoj nj\u00eb diagram arkitekturor t\u00eb aplikacionit t\u00eb ri dhe t\u00eb tregoj nj\u00eb katror, brenda t\u00eb cilit \u00ebsht\u00eb nj\u00eb buton i gjelb\u00ebr p\u00ebr aplikacionin. N\u00eb \u00e7do rast, do t\u00eb ket\u00eb m\u00eb shum\u00eb katror\u00eb dhe shigjeta. N\u00eb \u00e7do diagram q\u00eb kam par\u00eb, ka qen\u00eb m\u00eb shum\u00eb se nj\u00eb. Dhe dekompozimi madje n\u00eb nivelin e p\u00ebrfaq\u00ebsimit grafik tashm\u00eb po b\u00ebhet. Prandaj, katror\u00ebt mund t\u00eb b\u00ebhen t\u00eb pavarur. N\u00ebse jo, at\u00ebher\u00eb kam pyetje t\u00eb m\u00ebdha p\u00ebr arkitektin.<\/em> <\/p>\n<p><\/p>\n<p>Ka nj\u00eb pyetje nga chat-i: \"N\u00ebse rishikimi \u00ebsht\u00eb i detyruesh\u00ebm dhe zgjat gjat\u00eb, diku nj\u00eb dit\u00eb e m\u00eb shum\u00eb?\".<\/p>\n<p><\/p>\n<p>Keni probleme me praktik\u00ebn. Rishikimi nuk duhet t\u00eb zgjas\u00eb nj\u00eb dit\u00eb e m\u00eb shum\u00eb. Kjo \u00ebsht\u00eb e nj\u00ebjta histori si me pyetjen e m\u00ebparshme, vet\u00ebm pak m\u00eb e but\u00eb. N\u00ebse rishikimi zgjat nj\u00eb dit\u00eb, at\u00ebher\u00eb shum\u00eb ndoshta po b\u00ebhet p\u00ebr nj\u00eb ndryshim shum\u00eb t\u00eb madh. Kjo do t\u00eb thot\u00eb se duhet t\u00eb b\u00ebhet m\u00eb e vog\u00ebl. N\u00eb zhvillimin e transbase, q\u00eb Oleg e rekomandoi, ka nj\u00eb histori t\u00eb till\u00eb q\u00eb quhet rishikim i vazhduesh\u00ebm. Ideja e saj \u00ebsht\u00eb se ne b\u00ebjm\u00eb nj\u00eb pull request kaq t\u00eb vog\u00ebl me q\u00ebllim, sepse synojm\u00eb t\u00eb bashkohemi vazhdimisht dhe pak nga pak. Dhe k\u00ebshtu pull request-i ndryshon nj\u00eb abstraksion ose 10 rreshta. Fal\u00eb k\u00ebsaj, rishikimi yn\u00eb zgjat disa minuta. <\/p>\n<p><\/p>\n<p>N\u00ebse rishikimi zgjat nj\u00eb dit\u00eb e m\u00eb shum\u00eb, do t\u00eb thot\u00eb se di\u00e7ka nuk \u00ebsht\u00eb n\u00eb rregull. S\u00eb pari, ndoshta keni disa probleme me arkitektur\u00ebn. Ose \u00ebsht\u00eb nj\u00eb cop\u00eb e madhe kodi, p\u00ebr shembull 1,000 rreshta. Ose keni nj\u00eb arkitektur\u00eb aq t\u00eb nd\u00ebrlikuar sa q\u00eb njeriu nuk mund ta kuptoj\u00eb. Kjo \u00ebsht\u00eb nj\u00eb problem pak nga ana, por gjithashtu do t\u00eb duhet t\u00eb zgjidhni. Ndoshta nuk \u00ebsht\u00eb e nevojshme t\u00eb b\u00ebni rishikim fare. K\u00ebt\u00eb duhet ta mendoni. Rishikimi \u2013 \u00ebsht\u00eb ajo gj\u00eb q\u00eb ju ngadal\u00ebson. Ajo sjell p\u00ebrfitime n\u00eb p\u00ebrgjith\u00ebsi, por duhet t\u00eb kuptoni se p\u00ebrse po e b\u00ebni k\u00ebt\u00eb. A \u00ebsht\u00eb nj\u00eb m\u00ebnyr\u00eb p\u00ebr ju p\u00ebr t\u00eb kaluar shpejt informacionin, \u00ebsht\u00eb nj\u00eb m\u00ebnyr\u00eb p\u00ebr t\u00eb vendosur ndonj\u00eb standard t\u00eb brendsh\u00ebm, apo \u00e7far\u00eb? P\u00ebrse ju nevojitet kjo? Sepse rishikimi duhet b\u00ebr\u00eb ose shum\u00eb shpejt, ose duhet anuluar fare. \u00cbsht\u00eb si zhvillimi i transbase \u2013 nj\u00eb histori shum\u00eb e bukur, por vet\u00ebm p\u00ebr djem t\u00eb pjekur. <\/p>\n<p><\/p>\n<p>Sa i p\u00ebrket 4 metrikave, un\u00eb do t\u00eb rekomandoja q\u00eb t'i hiqni ato, p\u00ebr t\u00eb kuptuar se \u00e7far\u00eb sjell kjo. T\u00eb shikoni n\u00eb numra, t\u00eb shikoni imazhin, sa e keqe \u00ebsht\u00eb gjith\u00e7ka. <\/p>\n<p><\/p>\n<p><em>(Dmitri) Jam gati t\u00eb hyj n\u00eb nj\u00eb diskutim mbi k\u00ebt\u00eb me ty. Numrat dhe metrikat jan\u00eb t\u00eb gjitha t\u00eb shk\u00eblqyera, praktikat jan\u00eb t\u00eb shk\u00eblqyera. Por duhet t\u00eb kuptojm\u00eb \u2013 a \u00ebsht\u00eb e nevojshme p\u00ebr biznesin? Ka biznese q\u00eb nuk kan\u00eb nevoj\u00eb p\u00ebr nj\u00eb shpejt\u00ebsi t\u00eb till\u00eb ndryshimi. Un\u00eb di kompani ku nuk \u00ebsht\u00eb e mundur t\u00eb b\u00ebhen ndryshime \u00e7do 15 minuta. Dhe jo sepse jan\u00eb t\u00eb k\u00ebqij. \u00cbsht\u00eb nj\u00eb cik\u00ebl jet\u00ebsor. Dhe p\u00ebr t\u00eb b\u00ebr\u00eb ve\u00e7orit\u00eb branches, ve\u00e7orit\u00eb toggle, nevojiten njohuri t\u00eb thella.<\/em> <\/p>\n<p><\/p>\n<p>\u00cbsht\u00eb e komplikuar. N\u00ebse d\u00ebshiron t\u00eb lexosh nj\u00eb histori m\u00eb t\u00eb holl\u00ebsishme p\u00ebr ve\u00e7orin\u00eb toggle, at\u00ebher\u00eb t\u00eb rekomandoj shum\u00eb. <noindex><a rel=\"nofollow\" href=\"https:\/\/trunkbaseddevelopment.com\/\">https:\/\/trunkbaseddevelopment.com\/<\/a><\/noindex>. Dhe ka nj\u00eb artikull t\u00eb shk\u00eblqyer nga Martin Fowler rreth ve\u00e7orive toggle: p\u00ebr llojet q\u00eb ekzistojn\u00eb, ciklet e jet\u00ebs, etj. Ve\u00e7oria toggle \u2013 \u00ebsht\u00eb e komplikuar. <\/p>\n<p><\/p>\n<p><em>Dhe ti ende nuk p\u00ebrgjigje p\u00ebr pyetjen: \"A \u00ebsht\u00eb Jenkins i nevojsh\u00ebm apo jo?\"<\/em><\/p>\n<p><\/p>\n<p>Jenkins n\u00eb t\u00eb v\u00ebrtet\u00eb nuk \u00ebsht\u00eb i nevojsh\u00ebm n\u00eb asnj\u00eb rast. N\u00ebse flasim seriozisht, mjetet: Jenkins, Gitlab do t'ju sjellin leht\u00ebsi. Do t\u00eb shihni n\u00ebse nd\u00ebrtimi \u00ebsht\u00eb b\u00ebr\u00eb apo jo. Ato mund t'ju ndihmojn\u00eb, por nuk do t'ju japin praktik\u00eb. Ato mund t'ju japin vet\u00ebm nj\u00eb rreth \u2013 OK, nuk OK. Dhe kjo, n\u00ebse ende shkruani teste, sepse n\u00ebse nuk ka teste, at\u00ebher\u00eb kjo \u00ebsht\u00eb pothuajse e pafalshme. Pra, \u00ebsht\u00eb i nevojsh\u00ebm, sepse \u2013 \u00ebsht\u00eb m\u00eb e leht\u00eb, por n\u00eb p\u00ebrgjith\u00ebsi mund t\u00eb jetoni edhe pa t\u00eb, nuk do humbni shum\u00eb. <\/p>\n<p><\/p>\n<p><em>Pra, n\u00ebse keni praktika, at\u00ebher\u00eb do t\u00eb thot\u00eb se nuk ju nevojitet?<\/em><\/p>\n<p><\/p>\n<p>E drejt\u00eb. Un\u00eb rekomandoj testin Jez Humble. Atje kam nj\u00eb q\u00ebndrim t\u00eb dyfisht\u00eb mbi pik\u00ebn e fundit. Por n\u00eb p\u00ebrgjith\u00ebsi, n\u00ebse keni tri gj\u00ebra, po bashkoni vazhdimisht, po ekzekutoni teste t\u00eb angazhimeve n\u00eb master, shpejt rregulloni nd\u00ebrtimin n\u00eb master, ndoshta nuk keni nevoj\u00eb p\u00ebr ndonj\u00eb gj\u00eb tjet\u00ebr. <\/p>\n<p><\/p>\n<p><em>Nd\u00ebrsa presim pyetje nga pjes\u00ebmarr\u00ebsit, kam nj\u00eb pyetje. Ne tani po flisnim p\u00ebr kodin produktor. A e ke p\u00ebrdorur p\u00ebr kodin e infrastruktur\u00ebs? A \u00ebsht\u00eb i nj\u00ebjti kod, ka t\u00eb nj\u00ebjtat principe dhe t\u00eb nj\u00ebjtin cik\u00ebl jet\u00ebsor, apo aty ka cikle dhe principe t\u00eb tjera? Zakonisht, kur t\u00eb gjith\u00eb flasin p\u00ebr Integrimin dhe Zhvillimin e Vazhdush\u00ebm, ata harrojn\u00eb se ka edhe kod infrastrukturor. Dhe n\u00eb koh\u00ebt e fundit po b\u00ebhet gjithnj\u00eb e m\u00eb shum\u00eb. A duhet t\u00eb sjellim t\u00eb gjitha k\u00ebto rregulla atje?<\/em><\/p>\n<p><\/p>\n<p>Madje jo vet\u00ebm se duhet, kjo do t\u00eb ishte n\u00eb t\u00eb v\u00ebrtet\u00eb e shk\u00eblqyer, sepse me siguri do t\u00eb thjeshtoj\u00eb jet\u00ebn. Sa m\u00eb shpejt t\u00eb punojm\u00eb me kodin, jo me skriptet n\u00eb bash, por kur kemi kod t\u00eb mir\u00eb.<\/p>\n<p><\/p>\n<p><em>Stop-stop, skripti n\u00eb bash \u2013 \u00ebsht\u00eb gjithashtu kod. Mos e prek dashurin\u00eb time t\u00eb vjet\u00ebr.<\/em> <\/p>\n<p><\/p>\n<p>Mir\u00eb, nuk do t\u00eb shtyp kujtimet tua. Kam nj\u00eb antipati personale ndaj bash-it. Ai shpesh d\u00ebshtonte n\u00eb m\u00ebnyr\u00eb t\u00eb frikshme dhe t\u00eb sh\u00ebmtuar. Dhe d\u00ebshtonte shpesh n\u00eb m\u00ebnyr\u00eb t\u00eb papritur, prandaj nuk e p\u00eblqej. Por mir\u00eb, le t\u00eb supozojm\u00eb se ke kod n\u00eb bash. Mund t\u00eb jet\u00eb q\u00eb un\u00eb v\u00ebrtet nuk e kuptoj dhe ndoshta ka korniza normale p\u00ebr testim aty. Un\u00eb thjesht nuk jam n\u00eb k\u00ebt\u00eb fush\u00eb. Dhe ne po marrim t\u00eb nj\u00ebjtat p\u00ebrfitime.<\/p>\n<p><\/p>\n<p>Sa her\u00eb q\u00eb punojm\u00eb me infrastruktur\u00ebn si kod, ne hasim t\u00eb nj\u00ebjtat probleme si zhvilluesit. Disa muaj m\u00eb par\u00eb u p\u00ebrballa me nj\u00eb situat\u00eb ku nj\u00eb koleg m\u00eb d\u00ebrgoi nj\u00eb pull request me 1,000 rreshta n\u00eb bash. Dhe ti ngec n\u00eb rishikim p\u00ebr 4 or\u00eb. Problemet jan\u00eb t\u00eb nj\u00ebjta. Akoma \u00ebsht\u00eb kod. Edhe \u00ebsht\u00eb akoma pun\u00eb n\u00eb bashk\u00ebpunim. Ne ngecim me pull request dhe ngecim me ato konflikte t\u00eb p\u00ebrzierjes t\u00eb bash-it, p\u00ebr shembull. <\/p>\n<p><\/p>\n<p>Aktualisht po e shoh k\u00ebt\u00eb gj\u00eb me programimin m\u00eb t\u00eb bukur t\u00eb infrastruktur\u00ebs. Kam futur Pulumi n\u00eb infrastruktur\u00ebn time. Ky \u00ebsht\u00eb programim i past\u00ebr. Aty \u00ebsht\u00eb shum\u00eb m\u00eb e bukur, sepse kam t\u00eb gjitha mund\u00ebsit\u00eb e gjuh\u00ebs s\u00eb programimit, dmth. kam b\u00ebr\u00eb toggles t\u00eb bukura me t\u00eb nj\u00ebjtat if-e. V\u00ebrtet, ndryshimi im \u00ebsht\u00eb tashm\u00eb n\u00eb master. T\u00eb gjith\u00eb e shohin at\u00eb. Inxhinier\u00eb t\u00eb tjer\u00eb jan\u00eb t\u00eb informuar. Ai tashm\u00eb ka ndikuar n\u00eb di\u00e7ka. Por, p\u00ebrve\u00e7 k\u00ebsaj, ai nuk \u00ebsht\u00eb aktivizuar p\u00ebr t\u00eb gjith\u00eb infrastrukturat. Ai \u00ebsht\u00eb aktivizuar p\u00ebr stolat e mia t\u00eb testit, p\u00ebr shembull. Prandaj, p\u00ebr t'u p\u00ebrgjigjur pyetjes t\u00ebnde edhe nj\u00ebher\u00eb, \u00ebsht\u00eb e nevojshme. Kjo, si inxhinier\u00eb q\u00eb punojm\u00eb me kod, gjithashtu na leht\u00ebson jet\u00ebn. <\/p>\n<p><\/p>\n<p><em>A ka ndokush pyetje tjet\u00ebr?<\/em> <\/p>\n<p><\/p>\n<p>Kam nj\u00eb pyetje. Dua t\u00eb vazhdoj diskutimin me Olegun. N\u00eb p\u00ebrgjith\u00ebsi, mendoj se ke t\u00eb drejt\u00eb, se n\u00ebse nj\u00eb detyr\u00eb t\u00eb merr nj\u00eb muaj, at\u00ebher\u00eb ke problem me arkitektur\u00ebn, ke problem me analiz\u00ebn, dekompozimin, planifikimin etj. Por kam ndjesin\u00eb se n\u00ebse fillon t\u00eb jetosh sipas Continuous Integration, at\u00ebher\u00eb do t\u00eb fillosh t\u00eb korrigjosh dhimbjet e planifikimit, sepse nuk mund t\u00eb ik\u00ebsh nga kjo. <\/p>\n<p><\/p>\n<p><em>(Oleg) Po, gjith\u00e7ka \u00ebsht\u00eb si\u00e7 thoni. N\u00eb nivelin e pun\u00ebs, kjo praktik\u00eb \u00ebsht\u00eb e krahasueshme me \u00e7do praktik\u00eb tjet\u00ebr serioze q\u00eb ndryshon kultur\u00ebn. E gjith\u00eb v\u00ebshtir\u00ebsia n\u00eb tejkalimin ndodhet n\u00eb zakonet, ve\u00e7an\u00ebrisht zakonet e k\u00ebqija. Dhe n\u00ebse p\u00ebr t\u00eb arritur k\u00ebt\u00eb praktik\u00eb k\u00ebrkohet nj\u00eb ndryshim i r\u00ebnd\u00ebsish\u00ebm i zakonit t\u00eb atyre q\u00eb ju rrethojn\u00eb: zhvilluesve, menaxhmentit, menaxherit t\u00eb prodhimit, prisni befasi.<\/em> <\/p>\n<p><\/p>\n<p><em>Cilat mund t\u00eb jen\u00eb befasi? Le t\u00eb themi, se vendos\u00ebt q\u00eb do t\u00eb realizoni integrimin m\u00eb shpesh. Dhe n\u00eb integrimin tuaj \u00ebsht\u00eb lidhur di\u00e7ka tjet\u00ebr, le t\u00eb themi artefaktet. Dhe n\u00eb kompanin\u00eb tuaj, p\u00ebr shembull, ka nj\u00eb politik\u00eb q\u00eb \u00e7do artefakt duhet t\u00eb jet\u00eb n\u00eb nj\u00eb m\u00ebnyr\u00eb t\u00eb regjistruar n\u00eb nj\u00eb sistem ruajtjeje artefaktesh. Dhe kjo merr nj\u00eb sasi t\u00eb caktuar kohe. Nj\u00eb njeri duhet t\u00eb v\u00ebr\u00eb nj\u00eb shenj\u00eb, q\u00eb si menaxher i l\u00ebshimit e ka provuar k\u00ebt\u00eb artefakt p\u00ebr gatishm\u00ebri p\u00ebr t\u00eb kaluar n\u00eb prodhim. N\u00ebse kjo zgjat 5-10-15 minuta, por lidhur me k\u00ebt\u00eb b\u00ebni nj\u00eb l\u00ebshim nj\u00eb her\u00eb n\u00eb jav\u00eb, at\u00ebher\u00eb nj\u00eb her\u00eb n\u00eb jav\u00eb t\u00eb shpenzoni gjysm\u00eb ore, nuk \u00ebsht\u00eb nj\u00eb tatim i madh.<\/em> <\/p>\n<p><\/p>\n<p><em>N\u00ebse b\u00ebni Continuous Integration 10 her\u00eb n\u00eb dit\u00eb, at\u00ebher\u00eb 10 her\u00eb duhet t\u00eb mnoheni me 30 minuta. Dhe kjo e kalon koh\u00ebn e pun\u00ebs s\u00eb k\u00ebtij menaxheri t\u00eb l\u00ebshimit. Ai thjesht lodhet t\u00eb b\u00ebj k\u00ebt\u00eb. Ka shpenzime t\u00eb vazhdueshme p\u00ebr disa praktika. Dhe ashtu.<\/em> <\/p>\n<p><\/p>\n<p><em>Dhe ju duhet ose t\u00eb anuloni k\u00ebt\u00eb rregull, q\u00eb t\u00eb mos merresh m\u00eb me k\u00ebt\u00eb gj\u00eb, dmth. nuk jepni manualisht nivelin e p\u00ebrputhshm\u00ebris\u00eb s\u00eb di\u00e7kaje me di\u00e7ka tjet\u00ebr. Ju besoni plot\u00ebsisht n\u00eb nj\u00eb grup t\u00eb automatizuar testesh gatishm\u00ebrie.<\/em> <\/p>\n<p><\/p>\n<p><em>Dhe n\u00ebse ju nevojitet ndonj\u00eb prov\u00eb nga dikush, q\u00eb kryesori t\u00eb n\u00ebnshkruaj\u00eb, dhe ju nuk hyni n\u00eb prodhim pa at\u00eb q\u00eb Vasia tha se lejohet etj. \u2013 e gjith\u00eb kjo marr\u00ebzi ndalon praktikat. Sepse n\u00ebse ka aktivitete t\u00eb lidhura si nj\u00eb tatim, at\u00ebher\u00eb gjith\u00e7ka rritet n\u00eb 100 her\u00eb. Pra, ndryshimi shpesh do t\u00eb merret jo me g\u00ebzim nga t\u00eb gjith\u00eb. Sepse \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb korrigjohen zakonet e njer\u00ebzve.<\/em> <\/p>\n<p><\/p>\n<p><em>Kur nj\u00eb person b\u00ebn nj\u00eb pun\u00eb t\u00eb zakonshme, ai e b\u00ebn at\u00eb, praktikisht, pa menduar. Ngarkesa e tij kognitive \u00ebsht\u00eb zero. Ai thjesht punon me t\u00eb gatshmen, ai ka nj\u00eb list\u00eb kontrolli n\u00eb kok\u00eb, e ka b\u00ebr\u00eb k\u00ebt\u00eb nj\u00eb mij\u00eb her\u00eb. Dhe sapo t\u00eb vij\u00eb dhe i thoni: \"Le t\u00eb anulojm\u00eb k\u00ebt\u00eb praktik\u00eb dhe nga e h\u00ebna t\u00eb zbatojm\u00eb nj\u00eb t\u00eb re\", p\u00ebr t\u00eb kjo b\u00ebhet nj\u00eb ngarkes\u00eb e madhe kognitive. Dhe kjo ndodh menj\u00ebher\u00eb p\u00ebr t\u00eb gjith\u00eb.<\/em> <\/p>\n<p><\/p>\n<p><em>Prandaj, m\u00ebnyra m\u00eb e thjesht\u00eb, e v\u00ebrteta, \u00ebsht\u00eb se kjo luks nuk e lejojn\u00eb t\u00eb gjith\u00eb, por un\u00eb gjithmon\u00eb e b\u00ebj k\u00ebshtu. N\u00ebse nis nj\u00eb projekt t\u00eb ri, zakonisht t\u00eb gjitha praktikat e paprovuar futen menj\u00ebher\u00eb n\u00eb k\u00ebt\u00eb projekt. Nd\u00ebrsa projekti \u00ebsht\u00eb i ri, nuk rrezikojm\u00eb shum\u00eb. Prod nuk \u00ebsht\u00eb ende aty, nuk ka asgj\u00eb q\u00eb mund t\u00eb prishet. Prandaj, mund ta p\u00ebrdorim si st\u00ebrvitje. Ky qasje funksionon. Por nuk t\u00eb gjitha kompanit\u00eb kan\u00eb mund\u00ebsi ta nisin k\u00ebt\u00eb lloj projektesh shpesh. Megjithat\u00eb, kjo \u00ebsht\u00eb disi e \u00e7uditshme sepse tani ka nj\u00eb transformim t\u00eb plot\u00eb digital, t\u00eb gjith\u00eb duhet t\u00eb fillojn\u00eb eksperimente p\u00ebr t\u00eb mbetur n\u00eb hap me konkurrent\u00ebt.<\/em> <\/p>\n<p><\/p>\n<p>K\u00ebtu e gjen veten para faktit se m\u00eb par\u00eb duhet t\u00eb kesh nj\u00eb kuptim t\u00eb asaj q\u00eb duhet t\u00eb b\u00ebsh. Bota nuk \u00ebsht\u00eb ideale, as prodhimi nuk \u00ebsht\u00eb ideal. <\/p>\n<p><\/p>\n<p><em>Po, k\u00ebto gj\u00ebra jan\u00eb t\u00eb lidhura ngusht\u00eb.<\/em><\/p>\n<p><\/p>\n<p>Biznesi gjithashtu nuk ka gjithmon\u00eb nj\u00eb kuptim se duhet t\u00eb shkojn\u00eb n\u00eb k\u00ebt\u00eb drejtim. <\/p>\n<p><\/p>\n<p><em>Ka nj\u00eb situat\u00eb ku asnj\u00eb ndryshim nuk \u00ebsht\u00eb i mundur. Kjo \u00ebsht\u00eb nj\u00eb situat\u00eb kur presioni mbi ekip \u00ebsht\u00eb m\u00eb i madh. Ekipi \u00ebsht\u00eb tashm\u00eb mjaft i shteruar. Ai nuk ka asnj\u00eb koh\u00eb rezerv\u00eb p\u00ebr eksperimente. Ata punojn\u00eb p\u00ebr t\u00eb zhvilluar karakteristika nga m\u00ebngjesi deri n\u00eb mbr\u00ebmje. Dhe drejtuesit k\u00ebrkojn\u00eb gjithnj\u00eb e m\u00eb shum\u00eb karakteristika. N\u00eb k\u00ebt\u00eb situat\u00eb, asnj\u00eb ndryshim nuk \u00ebsht\u00eb i mundur. Ekipit mund t'i thuhet vet\u00ebm se nes\u00ebr do ta b\u00ebjm\u00eb ashtu si dje, duhet vet\u00ebm t\u00eb b\u00ebjm\u00eb pak m\u00eb shum\u00eb karakteristika. Asnj\u00eb kalim n\u00eb asnj\u00eb praktik\u00eb n\u00eb k\u00ebt\u00eb sens nuk \u00ebsht\u00eb i mundur. Kjo \u00ebsht\u00eb nj\u00eb situat\u00eb klasike, kur nuk ka koh\u00eb p\u00ebr t\u00eb sharpen the axe, duhet prer\u00eb pem\u00ebt, prandaj prehen me nj\u00eb aks t\u00eb mpreht\u00eb. K\u00ebtu nuk ka k\u00ebshilla t\u00eb thjeshta.<\/em> <\/p>\n<p><\/p>\n<p><em>(Dmitri) Un\u00eb do t\u00eb lexoj nj\u00eb sqarim nga biseda: \"Por nevojitet nj\u00eb mbulim i madh me teste n\u00eb nivele t\u00eb ndryshme. Sa koh\u00eb i kushtohet testeve? Duket disi e shtrenjt\u00eb, merr shum\u00eb koh\u00eb.\"<\/em><\/p>\n<p><\/p>\n<p><em>(Oleg) Kjo \u00ebsht\u00eb nj\u00eb keqkuptim klasik. Duhet t\u00eb keni mjaft teste n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb keni vet\u00ebbesim. Continuous Integration nuk \u00ebsht\u00eb nj\u00eb gj\u00eb ku s\u00eb pari b\u00ebni 100% teste dhe vet\u00ebm pastaj filloni ta aplikoni k\u00ebt\u00eb praktik\u00eb. Continuous Integration e ul barr\u00ebn kognitive mbi ju, sepse \u00e7do ndryshim q\u00eb shihni me sy \u00ebsht\u00eb aq i qart\u00eb sa q\u00eb kuptoni n\u00ebse do t\u00eb d\u00ebshtoj\u00eb di\u00e7ka apo jo, edhe pa teste. Ju mund ta testoni shpejt n\u00eb mendje, sepse ndryshimet jan\u00eb t\u00eb vogla. Edhe n\u00ebse keni vet\u00ebm testues manual\u00eb, atyre gjithashtu u leht\u00ebsohet. Ju e keni lan\u00e7uar dhe thoni: \"Shiko, a ka ndodhur ndonj\u00eb d\u00ebshtim?\" Ata kontrollojn\u00eb dhe thon\u00eb: \"Jo, nuk ka ndodhur asgj\u00eb.\" Sepse testuesi e di se ku t\u00eb shikoj\u00eb. Keni nj\u00eb commit t\u00eb lidhur me nj\u00eb fragment t\u00eb vet\u00ebm kodit. Dhe kjo eksploitohet me nj\u00eb sjellje konkrete.<\/em><\/p>\n<p><\/p>\n<p>K\u00ebtu, sigurisht, e ke zbukuruar disi. <\/p>\n<p><\/p>\n<p><em>(Dmitry) K\u00ebtu nuk jam dakord. Ekziston praktika \u2013 zhvillimi p\u00ebrmes testimit, e cila pik\u00ebrisht do t'ju shp\u00ebtoj\u00eb nga kjo.<\/em> <\/p>\n<p><\/p>\n<p><em>(Oleg) K\u00ebt\u00eb nuk e kam arritur akoma. Iluzioni i par\u00eb \u00ebsht\u00eb se duhet t\u00eb shkruani pik\u00ebrisht 100% teste ose nuk duhet fare ta praktikoni Continuous Integration. Kjo \u00ebsht\u00eb e pav\u00ebrtet\u00eb. K\u00ebto jan\u00eb dy praktika paralele. Dhe ato nuk varen drejtp\u00ebrdrejt nj\u00ebra nga tjetra. Mbulesa juaj me teste duhet t\u00eb jet\u00eb optimale. Optimumi do t\u00eb thot\u00eb q\u00eb jeni t\u00eb sigurt se cil\u00ebsia e masterit, n\u00eb t\u00eb cilin ka mbetur pas commit-it tuaj, ju lejon t\u00eb klikoni me besim butonin \u201cDeploy\u201d t\u00eb premten n\u00eb mbr\u00ebmje, kur jeni duke pir\u00eb. Si e arrini k\u00ebt\u00eb? N\u00ebp\u00ebrmjet rishikimeve, mbules\u00ebs, n\u00ebp\u00ebrmjet monitorimit t\u00eb mir\u00eb.<\/em> <\/p>\n<p><\/p>\n<p><em>Monitorimi i mir\u00eb \u2013 nuk \u00ebsht\u00eb i dalluesh\u00ebm nga testet. N\u00ebse ju i ekzekutoni testet nj\u00eb her\u00eb n\u00eb pre prod, ato kontrollojn\u00eb nj\u00eb her\u00eb t\u00eb gjitha skenar\u00ebt tuaj t\u00eb p\u00ebrdoruesit dhe asgj\u00eb m\u00eb shum\u00eb. Por n\u00ebse i ekzekutoni ato n\u00eb nj\u00eb cik\u00ebl t\u00eb pafund, at\u00ebher\u00eb ky \u00ebsht\u00eb sistemi juaj i zgjeruar i monitorimit, i cili e teston gjith\u00e7ka n\u00eb m\u00ebnyr\u00eb t\u00eb pafund \u2013 ka r\u00ebn\u00eb apo nuk ka r\u00ebn\u00eb. N\u00eb k\u00ebt\u00eb rast, ndryshimi \u00ebsht\u00eb vet\u00ebm n\u00eb nj\u00eb her\u00eb ose n\u00eb shum\u00eb her\u00eb. Nj\u00eb set i shk\u00eblqyer testesh ... t\u00eb ekzekutuara pafund\u00ebsisht, jan\u00eb monitorim. Dhe monitorimi i duhur duhet t\u00eb jet\u00eb k\u00ebshtu.<\/em> <\/p>\n<p><\/p>\n<p><em>Dhe prandaj, si do ta arrini k\u00ebt\u00eb gjendje, kur t\u00eb b\u00ebni deploy t\u00eb premten n\u00eb mbr\u00ebmje dhe t\u00eb largoheni p\u00ebr n\u00eb sht\u00ebpi, \u00ebsht\u00eb nj\u00eb \u00e7\u00ebshtje tjet\u00ebr. Mund t\u00eb jeni thjesht nj\u00eb i guximsh\u00ebm i \u00e7mendur.<\/em> <\/p>\n<p><\/p>\n<p>Le t\u00eb kthehemi pak pas te Integrimi i Vazhduesh\u00ebm. Ne u shp\u00ebrngul\u00ebm n\u00eb nj\u00eb praktik\u00eb tjet\u00ebr t\u00eb komplikuar. <\/p>\n<p><\/p>\n<p><em>Iluzione t\u00eb dyta jan\u00eb se MVP, thon\u00eb, duhet t\u00eb b\u00ebhet shpejt, prandaj testet nuk jan\u00eb t\u00eb nevojshme. Nuk \u00ebsht\u00eb gjithmon\u00eb k\u00ebshtu. E v\u00ebrteta \u00ebsht\u00eb se kur shkruani nj\u00eb tregim p\u00ebrdoruesi p\u00ebr MVP, mund ta zhvilloni at\u00eb n\u00eb m\u00ebnyr\u00eb t\u00eb lir\u00eb, dmth, e d\u00ebgjuat q\u00eb ekziston nj\u00eb tregim p\u00ebrdoruesi dhe menj\u00ebher\u00eb u nxit\u00ebt ta kodoni, ose t\u00eb punoni sipas TDD. N\u00eb praktik\u00ebn TDD, si\u00e7 tregon p\u00ebrvoja, nuk merr m\u00eb shum\u00eb koh\u00eb, dmth testet jan\u00eb nj\u00eb efekt an\u00ebsor. Praktika TDD nuk ka t\u00eb b\u00ebj\u00eb vet\u00ebm me testimin. Pavar\u00ebsisht se quhet Zhvillim i Drejtuar nga Testet, aty nuk flitet p\u00ebr testet. Kjo \u00ebsht\u00eb nj\u00eb qasje arkitektonike m\u00eb shum\u00eb. \u00cbsht\u00eb nj\u00eb m\u00ebnyr\u00eb se si t\u00eb shkruani pik\u00ebrisht at\u00eb q\u00eb nevojitet dhe t\u00eb mos shkruani at\u00eb q\u00eb nuk nevojitet. Kjo praktik\u00eb fokusohet n\u00eb iteracionin tuaj t\u00eb ardhsh\u00ebm t\u00eb zhvillimit t\u00eb mendjes n\u00eb lidhje me nd\u00ebrtimin e arkitektur\u00ebs s\u00eb aplikacionit.<\/em> <\/p>\n<p><\/p>\n<p><em>Prandaj, nuk \u00ebsht\u00eb kaq e leht\u00eb t\u00eb lirohemi nga k\u00ebto iluzione. MVP dhe testet nuk jan\u00eb n\u00eb kund\u00ebrshtim me nj\u00ebra-tjetr\u00ebn. M\u00eb shum\u00eb, n\u00eb fakt, n\u00ebse b\u00ebni MVP sipas praktik\u00ebs TDD, do ta b\u00ebni at\u00eb m\u00eb mir\u00eb dhe m\u00eb shpejt sesa n\u00ebse e b\u00ebni krejt\u00ebsisht lirisht, pa praktik\u00eb.<\/em><\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb nj\u00eb mendim shum\u00eb i paqart\u00eb dhe i komplikuar. Kur d\u00ebgoni q\u00eb tani do t\u00eb shkruani edhe teste dhe p\u00ebr k\u00ebt\u00eb arsye do t\u00eb b\u00ebni di\u00e7ka m\u00eb shpejt, ting\u00ebllon krejt\u00ebsisht e pabesueshme. <\/p>\n<p><\/p>\n<p><em>(Dmitri) K\u00ebtu shum\u00eb, kur p\u00ebrmendin MVP, e b\u00ebjn\u00eb at\u00eb sepse jan\u00eb len\u00eb t\u00eb shkruajn\u00eb di\u00e7ka normale. Dhe kjo \u00ebsht\u00eb ende gj\u00ebra t\u00eb ndryshme. Mos e shnd\u00ebrroni MVP n\u00eb di\u00e7ka t\u00eb keqe q\u00eb nuk funksionon.<\/em> <\/p>\n<p><\/p>\n<p>Po, po, ke t\u00eb drejt\u00eb.<\/p>\n<p><\/p>\n<p><em>Dhe pastaj papritur MVP n\u00eb prodhim.<\/em><\/p>\n<p><\/p>\n<p>P\u00ebrher\u00eb. <\/p>\n<p><\/p>\n<p>TDD ting\u00ebllon shum\u00eb e pazakont\u00eb, kur d\u00ebgjon q\u00eb po shkruan teste dhe duket se po b\u00ebn m\u00eb shum\u00eb pun\u00eb. Kjo ting\u00ebllon shum\u00eb e \u00e7uditshme, por n\u00eb t\u00eb v\u00ebrtet\u00eb kjo ndihmon q\u00eb t\u00eb b\u00ebsh gj\u00ebrat m\u00eb shpejt dhe m\u00eb bukur. Kur shkruan nj\u00eb test, tashm\u00eb mendon shum\u00eb p\u00ebr at\u00eb se \u00e7far\u00eb kodi do t\u00eb jet\u00eb dhe si do t\u00eb thirret, si dhe sjelljen q\u00eb presim prej tij. Nuk thua thjesht q\u00eb kam shkruar nj\u00eb funksion dhe ai b\u00ebn di\u00e7ka. S\u00eb pari mendon se ka k\u00ebto kushte dhe do t\u00eb thirret n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb. K\u00ebt\u00eb e mbulon me teste dhe prej k\u00ebsaj kupton si do t\u00eb duken nd\u00ebrfaqet brenda kodit t\u00ebnd. Kjo ndikon shum\u00eb n\u00eb arkitektur\u00eb. Kodi yt automatikisht b\u00ebhet m\u00eb modular, sepse s\u00eb pari p\u00ebrpiqesh t\u00eb kuptosh si do ta testosh, dhe pastaj e shkruan. <\/p>\n<p><\/p>\n<p>Kisha ime ndodhur me TDD q\u00eb n\u00eb nj\u00eb moment un\u00eb kam marr\u00eb nj\u00eb mentor p\u00ebr Ruby, kur ende isha programues n\u00eb Ruby. Ai tha: \"Le t'i b\u00ebjm\u00eb gj\u00ebrat sipas TDD.\" Dhe un\u00eb mendoja: \"Oj, tani do t\u00eb shkruaj di\u00e7ka shtes\u00eb.\" Ne u dakorduam q\u00eb p\u00ebr dy jav\u00eb t\u00eb shkruaja t\u00eb gjith\u00eb kodin funksional n\u00eb Python duke p\u00ebrdorur TDD. Pas dy jav\u00ebsh kuptova se nuk doja t\u00eb kthehesha mbrapsht. Pas dy jav\u00ebsh duke u p\u00ebrpjekur ta aplikoj kudo, kuptova sa m\u00eb e leht\u00eb ishte t\u00eb mendosh. Por kjo nuk \u00ebsht\u00eb e dukshme, prandaj e rekomandoj t\u00eb gjith\u00ebve, n\u00ebse keni ndjesin\u00eb se TDD \u00ebsht\u00eb e v\u00ebshtir\u00eb, e gjat\u00eb dhe e panevojshme, provoni ta mbani p\u00ebr dy jav\u00eb. Mua m\u00eb mjaftoi dy jav\u00eb p\u00ebr k\u00ebt\u00eb.<\/p>\n<p><\/p>\n<p><em>(Dmitrij) Ne mund ta zhvillojm\u00eb k\u00ebt\u00eb mendim nga pik\u00ebpamja e funksionimit t\u00eb infrastruktur\u00ebs. Para se t\u00eb lancojm\u00eb di\u00e7ka t\u00eb re, ne b\u00ebjm\u00eb monitoring dhe pastaj e lan\u00e7ojm\u00eb. N\u00eb k\u00ebt\u00eb rast, monitorimi yn\u00eb b\u00ebhet nj\u00eb testim i zakonsh\u00ebm. Edhe zhvillimi p\u00ebrmes monitoring-ut. Por pothuajse t\u00eb gjith\u00eb thon\u00eb se \u00ebsht\u00eb e gjat\u00eb, m\u00eb len\u00eb, kam b\u00ebr\u00eb nj\u00eb skic\u00eb t\u00eb p\u00ebrkohshme. N\u00ebse e kemi b\u00ebr\u00eb monitoring-un si\u00e7 duhet, kuptojm\u00eb gjendjen e sistemit CI. N\u00eb sistemin CI ka shum\u00eb monitorim. Ne kuptojm\u00eb gjendjen e sistemit, kuptojm\u00eb \u00e7far\u00eb ka brenda. Dhe gjat\u00eb zhvillimit ne pik\u00ebrisht krijojm\u00eb sistemin q\u00eb ta sjellim n\u00eb gjendjen e d\u00ebshiruar.<\/em> <\/p>\n<p><\/p>\n<p><em>K\u00ebto praktika jan\u00eb t\u00eb njohura prej koh\u00ebsh. Ne e kemi diskutuar k\u00ebt\u00eb rreth 4 vjet m\u00eb par\u00eb. Por p\u00ebr 4 vjet praktikisht nuk ka ndryshuar asgj\u00eb.<\/em> <\/p>\n<p><\/p>\n<p><em>Por n\u00eb k\u00ebt\u00eb not\u00eb propozoj t\u00eb mbyllim diskutimin zyrtar.<\/em><\/p>\n<p><\/p>\n<p>Video (e futur si element media, por pse nuk funksionon):<\/p>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/zZ3qXVN3Oic\">https:\/\/youtu.be\/zZ3qXVN3Oic<\/a><\/noindex><br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/518406\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0431\u0441\u0443\u0434\u0438\u043c \u043f\u043e\u0447\u0435\u043c\u0443 CI-\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0438 CI \u2013 \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u043e \u0440\u0430\u0437\u043d\u043e\u0435. \u041a\u0430\u043a\u0443\u044e \u0431\u043e\u043b\u044c CI \u043f\u0440\u0438\u0437\u0432\u0430\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0438\u0434\u0435\u044f, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f \u0447\u0442\u043e \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 Jenkins. \u041c\u044b\u0441\u043b\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u043a\u043b\u0430\u0434 \u043f\u0440\u043e Continuous Integration \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0435\u0449\u0435 \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434, \u043a\u043e\u0433\u0434\u0430 \u044f \u0445\u043e\u0434\u0438\u043b \u043f\u043e \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0438\u0441\u043a\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443. \u041f\u043e\u043e\u0431\u0449\u0430\u043b\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":93886,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-93885","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Continuous Integration \u043a\u0430\u043a \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u0430 \u043d\u0435 Jenkins. \u0410\u043d\u0434\u0440\u0435\u0439 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-10T17:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-10T17:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Integrimi i vazhduesh\u00ebm si praktik\u00eb, jo si Jenkins. Andrey Alexandrov | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Continuous Integration \u043a\u0430\u043a \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u0430 \u043d\u0435 Jenkins. \u0410\u043d\u0434\u0440\u0435\u0439 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u0432 | ProHoster","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/continuous-integration-kak-praktika-a-ne-jenkins-andrej-aleksandrov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-10T17:42:23+00:00","article:modified_time":"2020-09-10T17:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"93885","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:37:31","updated":"2022-09-27 15:57:30","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/93885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=93885"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/93885\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/93886"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=93885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=93885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=93885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}