{"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":"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/ed8a32ae63b8dccfc8b4893ab27f1527.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le t\u00eb diskutojm\u00eb pse mjetet CI dhe CI jan\u00eb krejt\u00ebsisht gj\u00ebra t\u00eb ndryshme.<\/p>\n<p><\/p>\n<p>Cila \u00ebsht\u00eb dhimbja q\u00eb CI synon t\u00eb zgjidh\u00eb, nga ka ardhur idea, \u00e7far\u00eb konfirmimesh t\u00eb fundit ka q\u00eb funksionon, si t\u00eb kuptoni q\u00eb keni praktik\u00eb dhe jo thjesht 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 n\u00eb intervista p\u00ebr t\u00eb k\u00ebrkuar pun\u00eb. Kam biseduar me 10-15 kompani, dhe vet\u00ebm nj\u00ebra arriti t\u00eb shpjegoj\u00eb qart\u00eb se \u00e7far\u00eb \u00ebsht\u00eb CI dhe si ata kuptuan q\u00eb nuk e kishin at\u00eb. T\u00eb tjerat thoshin gj\u00ebra t\u00eb paqarta rreth Jenkins \ud83d\ude42 Po, ne kemi Jenkins, ai b\u00ebn nd\u00ebrtimet, CI! N\u00eb k\u00ebt\u00eb prezantim do t\u00eb p\u00ebrpiqem t\u00eb shpjegoj se \u00e7far\u00eb \u00ebsht\u00eb n\u00eb t\u00eb v\u00ebrtet\u00eb Integrimi i Vazhduesh\u00ebm 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=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/a57813a652c0d788e5a927dc8a7130ba.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pra, \u00e7far\u00eb vjen zakonisht n\u00eb mendje kur mendoni p\u00ebr CI? Shumic\u00ebs s\u00eb njer\u00ebzve u vjen n\u00eb mendje Jenkins, Gitlab CI, Travis, etj.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/c9799c11ba7bb7bbdb2048c2f314b22a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Edhe n\u00ebse ne e gjejm\u00eb n\u00eb Google, do t\u00eb na tregojn\u00eb k\u00ebto mjete.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/028ef088b28b73e7905b1666d9d53d1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00ebse pyesni njer\u00ebzit n\u00ebse jan\u00eb t\u00eb njohur, menj\u00ebher\u00eb pas p\u00ebrmendjes s\u00eb mjeteve do t'ju tregojn\u00eb se CI \u00ebsht\u00eb kur ndodh nd\u00ebrtimi dhe provojn\u00eb testet n\u00eb Pull Request p\u00ebr commit.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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 ka t\u00eb b\u00ebj\u00eb me mjetet, as me nd\u00ebrtimet me teste n\u00eb deg\u00eb! Integrimi i Vazhduesh\u00ebm \u00ebsht\u00eb nj\u00eb praktik\u00eb e integrimit t\u00eb shpesht\u00eb t\u00eb kodit t\u00eb ri dhe p\u00ebr ta zbatuar k\u00ebt\u00eb nuk \u00ebsht\u00eb e nevojshme t\u00eb zhvilloni Jenkins, GitLab, etj.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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 at\u00eb dhe t\u00eb ndjejm\u00eb dhimbjen q\u00eb ata p\u00ebrpiqeshin t\u00eb zgjidhnin.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/2ab9c0f4dba2887fed5744c8b021b424.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ata po zgjidhnin dhimbjen e bashk\u00ebpunimit n\u00eb ekip!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/11a5f3b1075f8b8d0f169fe07adf6c91.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le t\u00eb shohim disa shembuj, me cilat sfida p\u00ebrballen zhvilluesit gjat\u00eb zhvillimit n\u00eb grup. Kemi nj\u00eb projekt, dega master n\u00eb git dhe dy zhvillues.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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 punojn\u00eb si\u00e7 kan\u00eb b\u00ebr\u00eb gjithmon\u00eb. Merrnin nj\u00eb detyr\u00eb n\u00eb Jira, krijonin nj\u00eb feature branch dhe shkruanin kod.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/54720c40d9bbd9631b411a2a26c4083f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nj\u00ebri p\u00ebrfundoi ve\u00e7orin\u00eb m\u00eb shpejt dhe e bashkoi n\u00eb master.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/4593dc3cf33a44bf3a4d8166be9bc5da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tjetri pati 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 shkruante funksionalitete t\u00eb nevojshme p\u00ebr biznesin, zhvilluesi kalon koh\u00eb dhe energji p\u00ebr t\u00eb zgjidhur konfliktet.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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 jet\u00eb bashkimi i funksionalitetit tuaj me masterin e p\u00ebrbashk\u00ebt, aq m\u00eb shum\u00eb koh\u00eb do t\u00eb harxhoni n\u00eb k\u00ebt\u00eb. Dhe kjo \u00ebsht\u00eb ende nj\u00eb shembull mjaft i thjesht\u00eb. Ky \u00ebsht\u00eb nj\u00eb shembull ku p\u00ebrfshihen vet\u00ebm 2 zhvillues. Imagjinoni n\u00ebse 10, 15 ose 100 njer\u00ebz n\u00eb kompani shkruajn\u00eb n\u00eb nj\u00eb depo. Do t\u00eb \u00e7mendeni duke zgjidhur t\u00eb gjitha k\u00ebto konflikte. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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 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=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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 ishte n\u00eb rregull, dor\u00ebzoi detyr\u00ebn.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/e96d4fd52c39089e3377ed85adeeb591.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Zhvilluesi tjet\u00ebr n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb dor\u00ebzoi detyr\u00ebn e tij. Supozoni se ai e dha at\u00eb p\u00ebr rishikim. N\u00eb shum\u00eb kompani ekziston praktika - rishikimi. Nga nj\u00ebra an\u00eb, kjo \u00ebsht\u00eb nj\u00eb praktik\u00eb e mir\u00eb dhe e dobishme, nga ana tjet\u00ebr, na pengon n\u00eb shum\u00eb raste. Nuk do t\u00eb thellohemi 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 komplikuar me rishikimin. Keni dor\u00ebzuar nj\u00eb pull request p\u00ebr rishikim. Zhvilluesit nuk kan\u00eb gj\u00eb tjet\u00ebr p\u00ebr t\u00eb b\u00ebr\u00eb. \u00c7far\u00eb fillon ai t\u00eb b\u00ebj\u00eb? Ai fillon t\u00eb marr\u00eb detyra t\u00eb tjera. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/7b8e121be99432606056acf11e20f518.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb koh\u00eb, zhvilluesi i dyt\u00eb ka b\u00ebr\u00eb di\u00e7ka tjet\u00ebr. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/ceaa5ba5b3b5014fad527362f5794e94.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I pari p\u00ebrfundoi nj\u00eb detyr\u00eb tjet\u00ebr. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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, rishikimi i tij \u00ebsht\u00eb provuar dhe ai p\u00ebrpiqet t\u00eb bashkohet. \u00c7far\u00eb ndodh? Ai p\u00ebrjeton nj\u00eb num\u00ebr t\u00eb madh konfliktesh. Pse? Sepse derisa pull requesti i tij t\u00eb ishte n\u00eb rishikim, n\u00eb kod pati shum\u00eb ndryshime. <\/p>\n<p><\/p>\n<p>P\u00ebrve\u00e7 historis\u00eb me konflikti, ka dhe nj\u00eb histori me komunikimin. Pasi q\u00eb dega juaj \u00ebsht\u00eb n\u00eb rishikim, ndalon s\u00eb ndjekuri se \u00e7far\u00eb tjet\u00ebr po ndryshon n\u00eb baz\u00ebn e kodit tuaj t\u00eb sh\u00ebrbimit. Mund t\u00eb jet\u00eb q\u00eb ajo q\u00eb po p\u00ebrpiqeni t\u00eb zgjidhni tani \u00ebsht\u00eb zgjidhur nga dje dhe mund t\u00eb merrni nj\u00eb metod\u00eb p\u00ebr ta ri p\u00ebrdorur. Por nuk do ta shihni k\u00ebt\u00eb, sepse gjithmon\u00eb punoni me nj\u00eb deg\u00eb t\u00eb vjet\u00ebr. Dhe kjo deg\u00eb e vjet\u00ebr gjithmon\u00eb sjell si pasoj\u00eb se do t\u00eb keni t\u00eb nevojshme t\u00eb zgjidhni konflikte bashkimi. <\/p>\n<p><\/p>\n<p>K\u00ebshtu, n\u00ebse punojm\u00eb si nj\u00eb ekip, dmth. jo vet\u00ebm nj\u00eb njeri merret me depozit\u00ebn, por 5-10 njer\u00ebz, sa 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 t\u00eb kemi, dhe sa m\u00eb shum\u00eb me nj\u00eb version t\u00eb vjet\u00ebr punojm\u00eb, aq m\u00eb tep\u00ebr probleme kemi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/55c070f65a4d3838fb8c02bb9684c76b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bashk\u00ebpunimi \u00ebsht\u00eb i dhimbsh\u00ebm! Ne gjithmon\u00eb pengojm\u00eb nj\u00ebri-tjetrin. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/b914c50aad6f3c9f97edcad7e71ba627.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kjo problematik\u00eb \u00ebsht\u00eb v\u00ebn\u00eb re mbi 20 vjet m\u00eb par\u00eb. P\u00ebr her\u00eb t\u00eb par\u00eb, un\u00eb e gjet\u00ebm p\u00ebrmendjen e praktik\u00ebs s\u00eb Integrimit t\u00eb Vazhduesh\u00ebm n\u00eb programimin ekstrem.<\/p>\n<p><\/p>\n<p>Programimi ekstrem \u00ebsht\u00eb korniza e par\u00eb agile. Faqa u shfaq n\u00eb vitin 96. Ideja ishte t\u00eb p\u00ebrdoren disa praktika programimi, planifikimi dhe t\u00eb tjer\u00eb, q\u00eb zhvillimi t\u00eb jet\u00eb sa m\u00eb fleksib\u00ebl, p\u00ebr t\u00eb ndihmuar n\u00eb reagimin m\u00eb t\u00eb shpejt\u00eb ndaj ndryshimeve dhe k\u00ebrkesave nga klient\u00ebt tan\u00eb. Dymb\u00ebdhjet\u00eb vjet m\u00eb par\u00eb filluan t\u00eb p\u00ebrballen me faktin se, n\u00ebse b\u00ebn di\u00e7ka p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb dhe n\u00eb m\u00ebnyr\u00eb t\u00eb ndar\u00eb, konsumon m\u00eb shum\u00eb koh\u00eb p\u00ebr shkak t\u00eb konflikteve. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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 fraz\u00ebn \"Integrimi i vazhduesh\u00ebm\" fjal\u00eb p\u00ebr fjal\u00eb. N\u00ebse e p\u00ebrkthejm\u00eb dosido, na del integrim i vazhduesh\u00ebm. Por sa vazhdimisht \u00ebsht\u00eb kjo, nuk \u00ebsht\u00eb shum\u00eb e qart\u00eb; ajo \u00ebsht\u00eb shum\u00eb e nd\u00ebrprer\u00eb. Por sa \u00ebsht\u00eb \"integration\" gjithashtu nuk \u00ebsht\u00eb shum\u00eb e dukshme. <\/p>\n<p><\/p>\n<p>Dhe p\u00ebr k\u00ebt\u00eb arsye po sjell tani citate nga programimi ekstrem. T\u00eb dy fjal\u00ebt do t'i shqyrtojm\u00eb ve\u00e7mas. <\/p>\n<p><\/p>\n<p>Integrimi - Si\u00e7 e thash\u00eb, ne synojm\u00eb 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 t\u00eb jen\u00eb dega 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 programuesi largohet p\u00ebr nj\u00eb muaj p\u00ebr t\u00eb punuar n\u00eb nj\u00eb karakteristik\u00eb t\u00eb madhe. Dhe ai n\u00eb faz\u00ebn e integrimit mund t\u00eb ngec\u00eb p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb. <\/p>\n<p><\/p>\n<p>Integrimi \u00ebsht\u00eb kur marrim deg\u00ebn ton\u00eb dhe e integrojm\u00eb me masterin, e bashkojm\u00eb at\u00eb. Ka nj\u00eb variant ultimativ, kur ne jemi \"transbase developer\", ku p\u00ebrpiqemi t\u00eb shkruajm\u00eb direkt n\u00eb master pa deg\u00eb t\u00eb panevojshme.<\/p>\n<p><\/p>\n<p>N\u00eb thelb, integrimi \u00ebsht\u00eb t\u00eb marr\u00ebsh kodin t\u00ebnd dhe ta \u00e7osh n\u00eb master. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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? Praktika n\u00ebnkupton q\u00eb programuesi synon t\u00eb integroj\u00eb kodin e tij sa m\u00eb shpejt. Kjo \u00ebsht\u00eb q\u00ebllimi gjat\u00eb p\u00ebrfundimit t\u00eb \u00e7do detyre \u2013 t\u00eb b\u00ebj\u00eb q\u00eb kodi i tij t\u00eb shfaqet n\u00eb master sa m\u00eb shpejt. N\u00eb nj\u00eb bot\u00eb ideale, programuesit do ta b\u00ebnin k\u00ebt\u00eb \u00e7do disa or\u00eb. Do thot\u00eb, merr nj\u00eb detyr\u00eb t\u00eb vog\u00ebl, e bashkon n\u00eb master. E gjitha \u00ebsht\u00eb e shk\u00eblqyer. K\u00ebshtu q\u00eb duhet ta b\u00ebni vazhdimisht. Sa her\u00eb q\u00eb b\u00ebni di\u00e7ka, menj\u00ebher\u00eb e \u00e7oni n\u00eb master. <\/p>\n<p><\/p>\n<p>Dhe programuesi, i cili b\u00ebn di\u00e7ka, \u00ebsht\u00eb p\u00ebrgjegj\u00ebs p\u00ebr at\u00eb q\u00eb ka b\u00ebr\u00eb, q\u00eb t\u00eb funksionoj\u00eb dhe t\u00eb mos prish\u00eb asgj\u00eb. K\u00ebtu zakonisht dalin historit\u00eb me testet. Ne d\u00ebshirojm\u00eb t\u00eb ekzekutojm\u00eb disa teste mbi commit-in ton\u00eb, mbi bashkimin ton\u00eb, p\u00ebr t'u siguruar q\u00eb ajo funksionon. Dhe k\u00ebtu Jenkins mund t'ju ndihmoj\u00eb.<\/p>\n<p><\/p>\n<p>Por p\u00ebr historit\u00eb: a t\u00eb b\u00ebjm\u00eb ndryshimet t\u00eb vogla, a t\u00eb b\u00ebjm\u00eb q\u00eb detyrat t\u00eb jen\u00eb t\u00eb vogla, a t\u00eb b\u00ebjm\u00eb q\u00eb detyra ta p\u00ebrfundojm\u00eb dhe menj\u00ebher\u00eb t\u00eb p\u00ebrpiqemi ta bashkojm\u00eb n\u00eb master \u2013 k\u00ebtu nuk do t'ju ndihmojn\u00eb asnj\u00eb Jenkins. Sepse Jenkins do t'ju ndihmojn\u00eb vet\u00ebm p\u00ebr t\u00eb ekzekutuar testet. <\/p>\n<p><\/p>\n<p>Mund t\u00eb kaloni edhe pa to. Nuk do t'ju pengojn\u00eb fare. Sepse q\u00ebllimi i praktik\u00ebs \u00ebsht\u00eb t\u00eb bashkoni sa m\u00eb shpesh, p\u00ebr t\u00eb mos humbur nj\u00eb sasi t\u00eb madhe kohe p\u00ebr disa konflikte n\u00eb t\u00eb ardhmen. <\/p>\n<p><\/p>\n<p>Imagjinoni se vitin 2020 ndodhemi pa internet. Dhe ne punojm\u00eb lokal. Nuk kemi Jenkins. Kjo \u00ebsht\u00eb n\u00eb rregull. Ende mund t\u00eb merrni dhe t\u00eb krijoni nj\u00eb deg\u00eb lokale. Keni shkruar ndonj\u00eb kod. Keni p\u00ebrfunduar nj\u00eb detyr\u00eb pas 3-4 or\u00ebsh. Kaloni n\u00eb master, b\u00ebni git pull, e bashkoni deg\u00ebn tuaj atje. Gati. N\u00ebse e b\u00ebni k\u00ebt\u00eb shpesh \u2013 p\u00ebrsh\u00ebndetje, keni integrim t\u00eb vazhduesh\u00ebm!<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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 q\u00eb tregojn\u00eb se duhet t\u00eb investoni energjin\u00eb tuaj n\u00eb k\u00ebt\u00eb? Sepse n\u00eb p\u00ebrgjith\u00ebsi kjo \u00ebsht\u00eb e nd\u00ebrlikuar. N\u00ebse p\u00ebrpiqeni t\u00eb punoni k\u00ebshtu, do t\u00eb kuptoni se kjo do t\u00eb prek\u00eb ndonj\u00eb planifikim, do t'ju duhet t\u00eb p\u00ebrkushtoni m\u00eb shum\u00eb koh\u00eb p\u00ebr dekompozimin e detyrave. Sepse n\u00ebse b\u00ebni man\u2026, nuk do t\u00eb b\u00ebni bashkimin shpejt dhe p\u00ebr rrjedhoj\u00eb do t\u00eb bini n\u00eb nj\u00eb situat\u00eb t\u00eb v\u00ebshtir\u00eb. Praktikat tuaja do t\u00eb humbasin. <\/p>\n<p><\/p>\n<p>Dhe kjo do t\u00eb jet\u00eb e shtrenjt\u00eb. Nuk do t\u00eb arrini t'i kaloni menj\u00ebher\u00eb praktik\u00eb aktuale t\u00eb integrimit t\u00eb vazhduesh\u00ebm. T\u00eb gjith\u00eb do t'ju duhen shum\u00eb koh\u00eb p\u00ebr t'u adaptuar, shum\u00eb koh\u00eb p\u00ebr t'u m\u00ebsuar t\u00eb dekompozoni detyrat, shum\u00eb koh\u00eb p\u00ebr t'u m\u00ebsuar t\u00eb rishikoni praktikat, n\u00ebse ato ekzistojn\u00eb. Sepse q\u00ebllimi yn\u00eb \u00ebsht\u00eb q\u00eb ta bashkojm\u00eb sot. Dhe n\u00ebse e b\u00ebni rishikimin n\u00eb tre dit\u00eb, at\u00ebher\u00eb keni probleme dhe integrimi i vazhduesh\u00ebm nuk funksionon. <\/p>\n<p><\/p>\n<p>Por a kemi ndonj\u00eb prov\u00eb aktuale tani q\u00eb na thot\u00eb se investimi n\u00eb k\u00ebt\u00eb praktik\u00eb ka kuptim?<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" 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 erdhi n\u00eb mendje \u2013 \u00ebsht\u00eb State of DevOps. Ky \u00ebsht\u00eb nj\u00eb studim q\u00eb ekipi e ka zhvilluar 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 studimi i tyre n\u00eb vitin 2018 tregoi nj\u00eb korrelacion midis kompanive q\u00eb p\u00ebrpiqen t\u00eb p\u00ebrdorin deg\u00eb t\u00eb shkurtra, t\u00eb cilat integrohen shpejt, integrohen shpesh, ato kan\u00eb t\u00eb dh\u00ebna m\u00eb t\u00eb mira t\u00eb performanc\u00ebs IT.<\/p>\n<p><\/p>\n<p>\u00c7far\u00eb jan\u00eb k\u00ebto t\u00eb dh\u00ebna? K\u00ebto jan\u00eb 4 metrika q\u00eb ata shkencojn\u00eb nga t\u00eb gjitha kompanit\u00eb n\u00eb anketat e tyre: frekuenca e lansimit, koh\u00ebzgjatja p\u00ebr ndryshime, koha p\u00ebr t\u00eb rikthyer sh\u00ebrbimin, shkalla e d\u00ebshtimit t\u00eb ndryshimit.<\/p>\n<p><\/p>\n<p>S\u00eb pari, ekziston ky korrelacion, e dim\u00eb se kompanit\u00eb q\u00eb b\u00ebjn\u00eb bashkime shpesh, kan\u00eb k\u00ebto metrika shum\u00eb m\u00eb t\u00eb mira. Dhe ata kan\u00eb b\u00ebr\u00eb nj\u00eb ndarje t\u00eb kompanive n\u00eb disa kategori: ato kompani t\u00eb ngadalta q\u00eb prodhojn\u00eb di\u00e7ka ngadal\u00eb, performer\u00eb mesatar\u00eb, performer\u00eb t\u00eb lart\u00eb dhe elita. Elita jan\u00eb Netflix, Amazon, t\u00eb cilat jan\u00eb jasht\u00ebzakonisht t\u00eb shpejta, gjith\u00eb\u00e7ka e b\u00ebjn\u00eb shpejt, bukur dhe me cil\u00ebsi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/4fd98ef48a5cffdd6ae2ceea93dbb0bf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Historia tjet\u00ebr, q\u00eb ndodhi vet\u00ebm nj\u00eb muaj m\u00eb par\u00eb. N\u00eb Technology Radar u shfaq nj\u00eb sh\u00ebnim i shk\u00eblqyer rreth Gitflow. Gitflow dallon nga t\u00eb gjitha t\u00eb tjerat sepse deg\u00ebt e tij jetojn\u00eb p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb. Ka deg\u00eb l\u00ebshimi q\u00eb jetojn\u00eb p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb, deg\u00eb funksionesh q\u00eb gjithashtu jetojn\u00eb gjat\u00eb. Kjo praktik\u00eb n\u00eb Technology Radar kaloi n\u00eb HOLD. Pse? Sepse njer\u00ebzit p\u00ebrballen me dhimbjen e integrimit. <\/p>\n<p><\/p>\n<p>N\u00ebse nj\u00eb deg\u00eb jeton p\u00ebr nj\u00eb koh\u00eb shum\u00eb t\u00eb gjat\u00eb, ajo ngec, skadon, 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 s\u00eb fundmi, autori i Gitflow tha se n\u00ebse ju p\u00ebrpiqeni p\u00ebr Integrim t\u00eb Vazhdush\u00ebm, n\u00ebse ju d\u00ebshironi t\u00eb l\u00ebvizni sa m\u00eb shpesh, at\u00ebher\u00eb Gitflow \u00ebsht\u00eb nj\u00eb ide e keqe. Ai ve\u00e7ant\u00ebsh n\u00eb artikullin e tij shtoi se n\u00ebse keni nj\u00eb backend, ku mund t\u00eb synoni k\u00ebt\u00eb, at\u00ebher\u00eb Gitflow \u00ebsht\u00eb e 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 q\u00eb Gitflow \u00ebsht\u00eb i keq dhe nuk duhet ta p\u00ebrdorni. Ai \u00ebsht\u00eb p\u00ebr raste t\u00eb tjera. P\u00ebr shembull, kur ju nevojitet t\u00eb mb\u00ebshtesni disa versione t\u00eb sh\u00ebrbimit, aplikacionit, pra ku duhet t\u00eb mb\u00ebshtetni p\u00ebr nj\u00eb periudh\u00eb m\u00eb t\u00eb zgjatur kohore. <\/p>\n<p><\/p>\n<p>Por n\u00ebse flisni me njer\u00ebzit q\u00eb mb\u00ebshtesin k\u00ebto sh\u00ebrbime, do t\u00eb d\u00ebgjoni shum\u00eb dhimbje p\u00ebr faktin se kjo version ishte 3.2, q\u00eb ishte 4 muaj m\u00eb par\u00eb, dhe se kjo p\u00ebrmir\u00ebsim nuk u p\u00ebrfshi dhe tani, p\u00ebr ta treguar, duhet t\u00eb b\u00ebni shum\u00eb ndryshime. Dhe tani ata mbeten p\u00ebrs\u00ebri t\u00eb bllokuar, dhe kalojn\u00eb nj\u00eb jav\u00eb duke u zvarritur p\u00ebr t\u00eb marr\u00eb dhe b\u00ebr\u00eb bashkimin e ndonj\u00eb funksionaliteti t\u00eb ri. <\/p>\n<p><\/p>\n<p>Si\u00e7 e vuri n\u00eb dukje Aleksand\u00ebr Koval\u00ebv n\u00eb bised\u00eb, korrelacioni nuk do t\u00eb thot\u00eb lidhje shkaku-pasoj\u00eb. Kjo \u00ebsht\u00eb e v\u00ebrtet\u00eb. Pra, nuk ka ndonj\u00eb lidhje t\u00eb drejtp\u00ebrdrejt\u00eb se n\u00ebse keni Integrim t\u00eb Vazhdush\u00ebm, at\u00ebher\u00eb t\u00eb gjitha metrikat do t\u00eb jen\u00eb shk\u00eblqyese, jo. Por ekziston nj\u00eb korrelacion pozitiv q\u00eb n\u00ebse nj\u00eb \u00ebsht\u00eb e v\u00ebrtet\u00eb, at\u00ebher\u00eb me siguri tjetra \u00ebsht\u00eb gjithashtu e till\u00eb. Nuk \u00ebsht\u00eb fakt, por me siguri. Ky \u00ebsht\u00eb thjesht nj\u00eb korrelacion. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Continuous Integration si praktik\u00eb, e jo Jenkins. Andrey Aleksandrov\" src=\"\/wp-content\/uploads\/2020\/09\/d5fc050550b0e9f86a1fdf85fff32fa5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Duket se ne tashm\u00eb po b\u00ebjm\u00eb di\u00e7ka, duket se po bashkohemi, por si t\u00eb kuptojm\u00eb n\u00ebse ne n\u00eb t\u00eb v\u00ebrtet\u00eb kemi Integrim t\u00eb Vazhdush\u00ebm, se po bashkohemi mjaft shpesh?<\/p>\n<p><\/p>\n<p>Jez Humble \u00ebsht\u00eb autori i Manualit, Accelerate, faqeve t\u00eb Integrimit t\u00eb Vazhdush\u00ebm dhe librit \"Integrimi i Vazhdush\u00ebm\". Ai ofron k\u00ebt\u00eb test:<\/p>\n<p><\/p>\n<ul>\n<li>Kodi i inxhinierit hyjn\u00eb n\u00eb master \u00e7do dit\u00eb. <\/li>\n<li>N\u00eb \u00e7do commit ju ekzekutoni teste unit.<\/li>\n<li>Buildi n\u00eb master ra, u rregullua p\u00ebr af\u00ebrsisht 10 minuta.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ai ofron t\u00eb p\u00ebrdor\u00eb k\u00ebt\u00eb test p\u00ebr t\u00eb siguruar q\u00eb praktika \u00ebsht\u00eb atje. <\/p>\n<p><\/p>\n<p>E fundit e gjej pak t\u00eb diskutueshme. K\u00ebshtu q\u00eb n\u00ebse mund ta rregulloni p\u00ebr 10 minuta, do t\u00eb thot\u00eb se keni Integrim t\u00eb Vazhdush\u00ebm, ting\u00ebllon pak e \u00e7uditshme, n\u00eb mendimin tim, por ka kuptim. Pse? Sepse n\u00ebse po bashkoheni shpesh, do t\u00eb thot\u00eb se ndryshimet jan\u00eb t\u00eb vogla. N\u00ebse nj\u00eb ndryshim i vog\u00ebl shkakton d\u00ebshtimin e buildit n\u00eb master, at\u00ebher\u00eb do t\u00eb jeni n\u00eb gjendje t\u00eb gjeni shpejt shembullin e gabimit, sepse ndryshimi \u00ebsht\u00eb i vog\u00ebl. Ja, keni pasur nj\u00eb bashkim t\u00eb vog\u00ebl, n\u00eb t\u00eb cilin jan\u00eb ndryshuar 20-30 linja. Dhe, p\u00ebrkat\u00ebsisht, mund t\u00eb kuptoni shpejt se cila ishte arsyeja, sepse ndryshimet jan\u00eb t\u00eb vogla, k\u00ebshtu q\u00eb 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 madje edhe n\u00ebse na bie prodhimi pas lansimit, n\u00ebse kemi nj\u00eb praktik\u00eb Integrimi t\u00eb Vazhdush\u00ebm, \u00ebsht\u00eb shum\u00eb m\u00eb leht\u00eb t\u00eb veprojm\u00eb, sepse ndryshimet jan\u00eb t\u00eb vogla. Po, kjo do t\u00eb ndikoj\u00eb n\u00eb planifikim. Do t\u00eb jet\u00eb e dhimbshme. Dhe ndoshta, m\u00eb e v\u00ebshtira n\u00eb k\u00ebt\u00eb praktik\u00eb \u2013 \u00ebsht\u00eb t\u00eb m\u00ebsoni t\u00eb ndani detyrat, pra si t\u00eb b\u00ebni di\u00e7ka dhe ta kryeni brenda disa or\u00ebsh dhe nd\u00ebrkoh\u00eb t\u00eb kaloni revist\u00ebn, n\u00ebse e keni. Rishikimi \u00ebsht\u00eb nj\u00eb dhimbje e ve\u00e7ant\u00eb. <\/p>\n<p><\/p>\n<p>Teste unit jan\u00eb thjesht nj\u00eb ndihm\u00ebsi q\u00eb ju ndihmon t\u00eb kuptoni \u2013 a ka kaluar me sukses integrimi juaj, a ka ndodhur ndonj\u00eb d\u00ebshtim. N\u00eb mendimin tim, kjo gjithashtu nuk \u00ebsht\u00eb nj\u00eb pik\u00eb e obligueshme, sepse thelbi i praktik\u00ebs nuk \u00ebsht\u00eb kjo. <\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb nj\u00eb p\u00ebrmbledhje e shkurt\u00ebr mbi Integrimin e Vazhdush\u00ebm. Kjo \u00ebsht\u00eb gjith\u00e7ka q\u00eb ka n\u00eb k\u00ebt\u00eb praktik\u00eb. Jam i gatsh\u00ebm p\u00ebr pyetje. <\/p>\n<p><\/p>\n<p>Shkurt, vet\u00ebm p\u00ebrs\u00ebri do t'i p\u00ebrmbledh:<\/p>\n<p><\/p>\n<ul>\n<li>Integrimi i Vazhdush\u00ebm nuk \u00ebsht\u00eb Jenkins, nuk \u00ebsht\u00eb Gitlab.<\/li>\n<li>Ky\u00e7 \u00ebsht\u00eb jo vet\u00ebm nj\u00eb mjet, por nj\u00eb praktik\u00eb p\u00ebr t\u00eb bashkuar sa m\u00eb shpesh kodin ton\u00eb n\u00eb master. <\/li>\n<li>E b\u00ebjm\u00eb k\u00ebt\u00eb p\u00ebr t\u00eb shmangur dhimbjen e madhe q\u00eb vjen nga bashkimet n\u00eb t\u00eb ardhmen, pra, po p\u00ebrjetojm\u00eb nj\u00eb dhimbje t\u00eb vog\u00ebl tani p\u00ebr t\u00eb mos p\u00ebrjetuar nj\u00eb dhimbje t\u00eb madhe m\u00eb von\u00eb. Kjo \u00ebsht\u00eb e gjitha. <\/li>\n<li>Nga ana e kodit kalon komunikimi, por un\u00eb shum\u00eb rrall\u00eb e shoh k\u00ebt\u00eb, megjithat\u00eb 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 q\u00eb nuk decompozohet?<\/em><\/p>\n<p><\/p>\n<p>T\u00eb decompozojm\u00eb. \u00c7far\u00eb problemi ka? Mund t\u00eb jap\u00ebsh nj\u00eb shembull, se ka nj\u00eb detyr\u00eb dhe ajo nuk decompozohet?<\/p>\n<p><\/p>\n<p><em>Ka detyra t\u00eb tilla q\u00eb nuk mund t\u00eb decompozohet fare, p\u00ebr shembull, ato q\u00eb k\u00ebrkojn\u00eb nj\u00eb ekspertiz\u00eb t\u00eb thell\u00eb dhe q\u00eb mund t\u00eb zgjidhen realisht gjat\u00eb nj\u00eb muaji deri n\u00eb nj\u00eb rezultat t\u00eb pranuesh\u00ebm.<\/em> <\/p>\n<p><\/p>\n<p>N\u00ebse t\u00eb kuptova mir\u00eb, ka nj\u00eb detyr\u00eb t\u00eb madhe dhe t\u00eb komplikuar, rezultati i s\u00eb cil\u00ebs do t\u00eb jet\u00eb i duksh\u00ebm vet\u00ebm pas nj\u00eb muaji?<\/p>\n<p><\/p>\n<p><em>Po, sakt\u00ebsisht. Po, rezultatin mund ta vler\u00ebsosh vet\u00ebm 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 po flasim p\u00ebr deg\u00ebn e funksionalitetit. Funksionalitetet mund t\u00eb jen\u00eb t\u00eb m\u00ebdha dhe t\u00eb komplikuara. Ato mund t\u00eb p\u00ebrfshijn\u00eb shum\u00eb komponent\u00eb. Dhe ndoshta nuk mund t\u2019i realizojm\u00eb plot\u00ebsisht n\u00eb nj\u00eb deg\u00eb. Kjo \u00ebsht\u00eb normale. Na nevojitet vet\u00ebm t\u00eb ndajm\u00eb k\u00ebt\u00eb histori. N\u00ebse funksionaliteti nuk \u00ebsht\u00eb gati deri n\u00eb fund, kjo nuk do t\u00eb thot\u00eb se disa pjes\u00eb t\u00eb kodit t\u00eb tij nuk mund t\u00eb bashkohen. Ke shtuar, p\u00ebr shembull, migrimin dhe brenda funksionalitetit ka disa faza. Ka, p\u00ebr shembull, nj\u00eb faz\u00eb \u2013 t\u00eb b\u00ebsh migrimin, t\u00eb shtosh nj\u00eb metod\u00eb t\u00eb re. Dhe k\u00ebto gj\u00ebra mund t\u2019i bashkosh \u00e7do dit\u00eb. <\/p>\n<p><\/p>\n<p><em>Mir\u00eb. \u00c7far\u00eb ka kuptim n\u00eb k\u00ebt\u00eb?<\/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 d\u00ebmtojn\u00eb, e sheh menj\u00ebher\u00eb. Ke nj\u00eb cop\u00eb t\u00eb vog\u00ebl q\u00eb e ka thyer di\u00e7ka, dhe \u00ebsht\u00eb m\u00eb e leht\u00eb ta rregullosh. K\u00ebtu \u00ebsht\u00eb kuptimi, q\u00eb t\u00eb bashkosh nj\u00eb cop\u00eb t\u00eb vog\u00ebl tani \u00ebsht\u00eb shum\u00eb m\u00eb e leht\u00eb sesa 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 migrime, dhe k\u00ebtu ka nj\u00eb metod\u00eb q\u00eb ata gjithashtu ndoshta do t\u00eb duan ta p\u00ebrdorin. T\u00eb gjith\u00eb do t\u00eb shohin se \u00e7far\u00eb po ndodh me kodin t\u00ebnd. Pik\u00ebrisht p\u00ebr k\u00ebto tre arsye praktika b\u00ebhet. <\/p>\n<p><\/p>\n<p><em>Faleminderit, pyetja \u00ebsht\u00eb mbyllur!<\/em><\/p>\n<p><\/p>\n<p><em>(Oleg Soroka) A mund t\u00eb shtoj di\u00e7ka? Ti e ke th\u00ebn\u00eb at\u00eb t\u00eb drejt\u00eb, dua vet\u00ebm t\u00eb shtoj nj\u00eb fraz\u00eb.<\/em><\/p>\n<p><\/p>\n<p>Po.<\/p>\n<p><\/p>\n<p><em>Gjat\u00eb Continuous Integration, kodi bashkohet n\u00eb deg\u00ebn e p\u00ebrbashk\u00ebt jo kur funksionaliteti \u00ebsht\u00eb plot\u00ebsisht gati, por kur ndalon s\u00eb prishuri nd\u00ebrtimin. Dhe ju mund t\u00eb angazhoheni n\u00eb master sa her\u00eb q\u00eb d\u00ebshironi gjat\u00eb dit\u00ebs. Aspekti i dyt\u00eb - n\u00ebse p\u00ebr ndonj\u00eb arsye nuk mund t\u00eb ndash nj\u00eb detyr\u00eb nj\u00ebmujor n\u00eb detyra, edhe p\u00ebr tri dit\u00eb, nuk po flas p\u00ebr tri or\u00eb, at\u00ebher\u00eb keni nj\u00eb problem t\u00eb madh. Dhe fakti q\u00eb nuk keni Continuous Integration \u2013 \u00ebsht\u00eb m\u00eb i vogli nga k\u00ebto probleme. Kjo do t\u00eb thot\u00eb q\u00eb keni probleme me arkitektur\u00ebn dhe praktikat inxhinierike jan\u00eb n\u00eb zero. Sepse edhe n\u00ebse b\u00ebhet fjal\u00eb p\u00ebr k\u00ebrkime, prap\u00eb duhet ta formatizoni at\u00eb n\u00eb form\u00ebn e hipotezave ose ciklit.<\/em> <\/p>\n<p><\/p>\n<p><em>Flisnim p\u00ebr 4 metrikat q\u00eb dallojn\u00eb kompanit\u00eb e suksesshme nga ato q\u00eb mbeten prapa. Para k\u00ebtyre 4 metrike, duhet t\u00eb arrini. N\u00ebse nj\u00eb detyr\u00eb e mesme zgjat nj\u00eb muaj, do t\u00eb p\u00ebrqendrohesha fillimisht n\u00eb k\u00ebt\u00eb metrik\u00eb. Do ta ulja fillimisht n\u00eb 3 dit\u00eb. Pas k\u00ebsaj, do t\u00eb filloja t\u00eb mendoja p\u00ebr Continuous.<\/em><\/p>\n<p><\/p>\n<p>A e kuptova drejt, q\u00eb mendon se investimi n\u00eb praktikat inxhinierike, n\u00ebse cdo detyr\u00eb zgjat nj\u00eb muaj, nuk ka kuptim akoma?<\/p>\n<p><\/p>\n<p><em>Ke Continuous Integration. Dhe aty \u00ebsht\u00eb nj\u00eb tem\u00eb q\u00eb p\u00ebr 10 minuta ose e rregulloni ose e ktheni mbrapsht. Imagjino, e ke l\u00ebshuar. Po ashtu ke dhe continuous deployment, e ke l\u00ebshuar n\u00eb prodhim dhe vet\u00ebm pastaj e ke v\u00ebn\u00eb re q\u00eb di\u00e7ka shkoi keq. Dhe duhet ta kthesh, por tashm\u00eb ka ndodhur migrimi i baz\u00ebs s\u00eb t\u00eb dh\u00ebnave. Tani skema e baz\u00ebs s\u00eb t\u00eb dh\u00ebnave \u00ebsht\u00eb n\u00eb versionin e ardhsh\u00ebm, p\u00ebr m\u00eb tep\u00ebr, \u00ebsht\u00eb b\u00ebr\u00eb edhe nj\u00eb backup, dhe gjithashtu jan\u00eb regjistruar t\u00eb dh\u00ebna aty.<\/em><\/p>\n<p><\/p>\n<p><em>Dhe \u00e7far\u00eb alternative ke? N\u00ebse e kthen kodin prapa, nuk mund t\u00eb funksionoj\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>P\u00ebr njer\u00ebzit q\u00eb kan\u00eb praktika inxhinierike t\u00eb dob\u00ebta, me siguri, ata nuk kan\u00eb lexuar asnj\u00eb lib\u00ebr t\u00eb trash\u00eb p\u00ebr... \u00c7far\u00eb b\u00ebni me backupin? N\u00ebse po rikuperoheni nga nj\u00eb backup, at\u00ebher\u00eb do t\u00eb thot\u00eb se po humbni t\u00eb dh\u00ebnat q\u00eb u grumbulluan n\u00eb at\u00eb moment. P\u00ebr shembull, keni punuar tri or\u00eb me versionin e ri t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, jan\u00eb regjistruar p\u00ebrdorues. Po kthehesh n\u00eb nj\u00eb backup t\u00eb vjet\u00ebr, sepse skema me versionin e ri nuk funksionon, p\u00ebrkat\u00ebsisht, ata p\u00ebrdorues i keni humbur. Dhe ata jan\u00eb t\u00eb pak\u00ebnaqur, ata kan\u00eb ankesa.<\/em><\/p>\n<p><\/p>\n<p><em>P\u00ebr t\u00eb zot\u00ebruar t\u00eb gjitha praktikat q\u00eb mb\u00ebshtesin Continuous Integration dhe Continuous Delivery, nuk mjafton t\u00eb m\u00ebsosh thjesht t\u00eb shkruash\u2026. S\u00eb pari, ato mund t\u00eb b\u00ebhen shum\u00eb dhe do t\u00eb ishte jo praktik. P\u00ebrve\u00e7 k\u00ebsaj, ka shum\u00eb praktika t\u00eb tjera si Scientific. Ka nj\u00eb praktik\u00eb t\u00eb till\u00eb, t\u00eb njohur nga GitHub n\u00eb nj\u00eb koh\u00eb. Kjo \u00ebsht\u00eb kur ti ke nj\u00ebkoh\u00ebsisht kodin e vjet\u00ebr dhe kodin e ri n\u00eb funksion. Kjo kur b\u00ebn nj\u00eb karakteristik\u00eb t\u00eb pap\u00ebrfunduar, por ajo mund t\u00eb kthej\u00eb ndonj\u00eb vler\u00eb: ose si funksion, ose si Rest API. Ti ekzekuton si kodin e ri ashtu edhe at\u00eb t\u00eb vjet\u00ebr dhe krahason diferenc\u00ebn mes tyre. Dhe n\u00ebse ka nj\u00eb diferenc\u00eb, e regjistron k\u00ebt\u00eb ngjarje. K\u00ebshtu e di se karakteristika e re \u00ebsht\u00eb gati p\u00ebr t\u2019u lan\u00e7uar mbi t\u00eb vjetr\u00ebn, n\u00ebse p\u00ebr nj\u00eb periudh\u00eb t\u00eb caktuar kohe nuk ka pasur shp\u00ebrputhje mes k\u00ebtyre dyja.<\/em> <\/p>\n<p><\/p>\n<p><em>Ka qindra t\u00eb till\u00eb praktikash. Do propozohja t\u00eb fillosh me transbase development. Ajo nuk \u00ebsht\u00eb 100 % n\u00eb Continuous Integration, por praktikat jan\u00eb t\u00eb nj\u00ebjta, nj\u00ebra pa tjetr\u00ebn nuk mund t\u00eb ekzistoj\u00eb mir\u00eb.<\/em> <\/p>\n<p><\/p>\n<p>E ke p\u00ebrdorur transbase development si nj\u00eb shembull, ku mund t\u00eb shoh\u00ebsh praktikat ose po sugjeron q\u00eb njer\u00ebzit ta fillojn\u00eb t\u00eb p\u00ebrdorin transbase development?<\/p>\n<p><\/p>\n<p><em>T\u00eb shohin, pasi ata nuk do t\u00eb mund ta p\u00ebrdorin. P\u00ebr ta p\u00ebrdorur, duhet t\u00eb lexosh shum\u00eb. Dhe kur dikush ka pyetje si: \"\u00c7far\u00eb t\u00eb b\u00ebj me nj\u00eb karakteristik\u00eb q\u00eb merr nj\u00eb muaj\", do t\u00eb thot\u00eb se ai nuk ka lexuar p\u00ebr transbase development. Nj\u00ebkoh\u00ebsisht nuk do ta k\u00ebshilloja akoma. Do t\u00eb sugjeroja t\u00eb p\u00ebrqendrohesh ekskluzivisht n\u00eb tem\u00ebn e ndarjes arkitektonike t\u00eb detyrave t\u00eb m\u00ebdha n\u00eb m\u00eb t\u00eb vogla. Kjo \u00ebsht\u00eb thelbi i dekombinimit.<\/em><\/p>\n<p><\/p>\n<p><em>Dekombinimi \u00ebsht\u00eb nj\u00eb nga mjetet e arkitektit. Ne fillimisht b\u00ebjm\u00eb nj\u00eb analiz\u00eb, m\u00eb pas dekombinimin, pastaj sintez\u00ebn, e m\u00eb pas integrimin. K\u00ebshtu gjith\u00e7ka p\u00ebrb\u00ebhet. Dhe p\u00ebr t\u00eb arritur n\u00eb Continuous Integration, duhet t\u00eb kalosh p\u00ebrmes dekombinimit. Pyetjet n\u00eb faz\u00ebn e par\u00eb lindin, e ne tani po 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. Ende \u00ebsht\u00eb her\u00ebt p\u00ebr ta b\u00ebr\u00eb, \u00ebsht\u00eb m\u00eb mir\u00eb t\u00eb fillosh me ndarjen e monolitit t\u00ebnd.<\/em> <\/p>\n<p><\/p>\n<p><em>Duhet t\u00eb vizatosh disa shigjeta dhe katror\u00eb n\u00eb ndonj\u00eb skem\u00eb. Ti nuk mund t\u00eb thuash se tani do tregoj nj\u00eb skem\u00eb arkitektonike t\u00eb aplikacionit t\u00eb ri dhe t\u00eb tregosh 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 skem\u00eb q\u00eb kam par\u00eb, kishte m\u00eb shum\u00eb se nj\u00eb. Dhe dekombinimi, edhe n\u00eb nivelin e prezantimit grafik, tashm\u00eb po kryhet. Prandaj katror\u00ebt mund t\u00eb b\u00ebhen t\u00eb pavarur. N\u00ebse jo, at\u00ebher\u00eb kam shum\u00eb pyetje p\u00ebr arkitektin.<\/em> <\/p>\n<p><\/p>\n<p>Ka nj\u00eb pyetje nga \u00e7ati: \"N\u00ebse rishikimi \u00ebsht\u00eb i detyruesh\u00ebm dhe zgjat shum\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 zgjat\u00eb nj\u00eb dit\u00eb e m\u00eb shum\u00eb. Kjo \u00ebsht\u00eb e nj\u00ebjta histori si me pyetjen e m\u00ebparshme, por pak m\u00eb e but\u00eb. N\u00ebse rishikimi zgjat nj\u00eb dit\u00eb, do t\u00eb thot\u00eb se ndoshta po rishikohet nj\u00eb ndryshim shum\u00eb t\u00eb madh. K\u00ebshtu q\u00eb duhet ta b\u00ebsh at\u00eb m\u00eb t\u00eb vog\u00ebl. N\u00eb transbase development, q\u00eb Oleg rekomandoi, ka nj\u00eb histori q\u00eb quhet continuous review. Ideja e saj \u00ebsht\u00eb se ne q\u00ebllimisht krijojm\u00eb k\u00ebrkesa t\u00eb vogla p\u00ebr bashkimin, sepse synojm\u00eb t\u00eb bashkohemi vazhdimisht dhe pak nga pak. Prandaj k\u00ebrkesa e bashkimit ndryshon nj\u00eb abstraksion ose 10 rreshta. Fal\u00eb k\u00ebsaj, rishikimi zgjat disa minuta. <\/p>\n<p><\/p>\n<p>N\u00ebse rishikimi zgjat nj\u00eb dit\u00eb e m\u00eb shum\u00eb, at\u00ebher\u00eb di\u00e7ka nuk \u00ebsht\u00eb n\u00eb rregull. S\u00eb pari, ndoshta keni disa probleme me arkitektur\u00ebn. Ose ndoshta \u00ebsht\u00eb nj\u00eb cop\u00eb e madhe kodi, p\u00ebr shembull 1,000 rreshta. Ose arkitektura juaj \u00ebsht\u00eb aq e komplikuar saq\u00eb personi nuk mund ta kuptoj\u00eb. Kjo \u00ebsht\u00eb nj\u00eb problem nga nj\u00eb k\u00ebndv\u00ebshtrim tjet\u00ebr, por do t\u00eb duhet ta zgjidhni at\u00eb gjithashtu. Ndoshta rishikimi nuk ka nevoj\u00eb t\u00eb b\u00ebhet fare. Kjo \u00ebsht\u00eb di\u00e7ka p\u00ebr t\u00eb cil\u00ebn duhet t\u00eb mendohet. Rishikimi \u00ebsht\u00eb ajo q\u00eb ju ngadal\u00ebson. Ai ka p\u00ebrfitimet e tij n\u00eb p\u00ebrgjith\u00ebsi, por duhet t\u00eb kuptoni se p\u00ebrse e b\u00ebni at\u00eb. A \u00ebsht\u00eb nj\u00eb m\u00ebnyr\u00eb p\u00ebr t\u00eb kaluar informacionin shpejt, a \u00ebsht\u00eb nj\u00eb m\u00ebnyr\u00eb p\u00ebr t\u00eb vendosur disa standarde brenda ose \u00e7far\u00eb? Pse keni nevoj\u00eb p\u00ebr t\u00eb? Sepse rishikimi duhet t\u00eb jet\u00eb ose shum\u00eb i shpejt\u00eb, ose ta anuloni at\u00eb krejt. Kjo \u00ebsht\u00eb si transbase development - nj\u00eb histori shum\u00eb e bukur, por vet\u00ebm p\u00ebr djem t\u00eb pjekur. <\/p>\n<p><\/p>\n<p>N\u00eb lidhje me 4 metrikat, do t\u00eb rekomandoja t'i kapni ato p\u00ebr t\u00eb kuptuar n\u00eb \u00e7far\u00eb rezultati \u00e7ojn\u00eb. Shihni n\u00eb numra, shihni skem\u00ebn, sa keq \u00ebsht\u00eb gjith\u00e7ka. <\/p>\n<p><\/p>\n<p><em>(Dmitri) Jam i gatsh\u00ebm t\u00eb hyj n\u00eb diskutim me ty p\u00ebr k\u00ebt\u00eb. Numrat dhe metrikat jan\u00eb t\u00eb shk\u00eblqyera, praktikat jan\u00eb t\u00eb shk\u00eblqyera. Por duhet t\u00eb kuptohet - a i nevojitet kjo biznesit. Ka biznese p\u00ebr t\u00eb cilat nuk ka nevoj\u00eb p\u00ebr k\u00ebt\u00eb shpejt\u00ebsi ndryshimi. Un\u00eb njoh kompani, ku nuk mund t\u00eb b\u00ebhen ndryshime \u00e7do 15 minuta. Dhe jo sepse ato jan\u00eb t\u00eb k\u00ebqija. \u00cbsht\u00eb nj\u00eb cik\u00ebl jet\u00ebsor i till\u00eb. Dhe p\u00ebr t\u00eb b\u00ebr\u00eb karakteristika branches, karakteristika toggle, jan\u00eb t\u00eb nevojshme njohuri t\u00eb thella.<\/em> <\/p>\n<p><\/p>\n<p>\u00cbsht\u00eb e komplikuar. N\u00ebse d\u00ebshiron t\u00eb lexosh m\u00eb shum\u00eb p\u00ebr karakteristik\u00ebn toggle, rekomandoj shum\u00eb. <noindex><a rel=\"nofollow\" href=\"https:\/\/trunkbaseddevelopment.com\/\">https:\/\/trunkbaseddevelopment.com\/<\/a><\/noindex>. Ka ekziston nj\u00eb artikull i shk\u00eblqyer nga Martin Fowler p\u00ebr nd\u00ebrrimin e ve\u00e7orave: p\u00ebr llojet, ciklet e jet\u00ebs dhe t\u00eb tjera. Nd\u00ebrrimi i ve\u00e7orave \u00ebsht\u00eb i komplikuar. <\/p>\n<p><\/p>\n<p><em>Dhe akoma nuk e ke p\u00ebrgjigjur pyetjen: \u00abA \u00ebsht\u00eb i nevojsh\u00ebm Jenkins apo jo?\u00bb<\/em><\/p>\n<p><\/p>\n<p>Jenkins n\u00eb t\u00eb v\u00ebrtet\u00eb nuk \u00ebsht\u00eb aspak i nevojsh\u00ebm. N\u00ebse flasim seriozisht, mjetet: Jenkins, Gitlab do t'ju sjellin leht\u00ebsi. Do t\u00eb shihni n\u00ebse nd\u00ebrtimi \u00ebsht\u00eb krejt\u00ebsisht funksional apo jo. Ato mund t'ju ndihmojn\u00eb, por nuk do t'ju sjellin praktik\u00eb. Ato mund t'ju japin vet\u00ebm nj\u00eb dizenjim \u2013 OK, jo OK. Dhe k\u00ebt\u00eb n\u00ebse d\u00ebgjoni t\u00eb gjith\u00eb testet, sepse n\u00ebse nuk keni teste, at\u00ebher\u00eb ka pak kuptim. Prandaj \u00ebsht\u00eb i nevojsh\u00ebm, sepse \u00ebsht\u00eb m\u00eb e leht\u00eb, por n\u00eb p\u00ebrgjith\u00ebsi mund t\u00eb jetoni edhe pa t\u00eb, nuk do t\u00eb humbni shum\u00eb. <\/p>\n<p><\/p>\n<p><em>Pra, n\u00ebse keni praktika, do t\u00eb thot\u00eb q\u00eb ai nuk \u00ebsht\u00eb i nevojsh\u00ebm p\u00ebr ju?<\/em><\/p>\n<p><\/p>\n<p>E gjitha \u00ebsht\u00eb e sakt\u00eb. Un\u00eb rekomandoj testin Jez Humble. Atje kam nj\u00eb q\u00ebndrim t\u00eb dyshimt\u00eb p\u00ebr pik\u00ebn e fundit. Por n\u00eb p\u00ebrgjith\u00ebsi, n\u00ebse keni tre gj\u00ebra: ju bashkoni vazhdimisht, ju ekzekutoni testet p\u00ebr commitet n\u00eb master, shpejt rregulloni nd\u00ebrtimin n\u00eb master, at\u00ebher\u00eb ndoshta nuk keni nevoj\u00eb p\u00ebr asgj\u00eb tjet\u00ebr. <\/p>\n<p><\/p>\n<p><em>Nd\u00ebrkoh\u00eb q\u00eb presim pyetje nga pjes\u00ebmarr\u00ebsit, kam nj\u00eb pyetje. Tani po flisnim p\u00ebr kodin produktor. A ke p\u00ebrdorur kodin p\u00ebr infrastruktur\u00ebn? A \u00ebsht\u00eb i nj\u00ebjt\u00eb me kodin e produktit, a ka t\u00eb nj\u00ebjtin cik\u00ebl jete dhe t\u00eb nj\u00ebjtat parime, apo ka cikle dhe parime t\u00eb tjera? Zakonisht, kur flisni p\u00ebr Continuous Integration dhe Development, harrohet se ekziston edhe kodi i infrastruktur\u00ebs. Dhe vitet e fundit, ai po b\u00ebhet gjithnj\u00eb e m\u00eb shum\u00eb i r\u00ebnd\u00ebsish\u00ebm. A duhet t\u00eb sjellim t\u00eb gjitha k\u00ebto rregulla aty?<\/em><\/p>\n<p><\/p>\n<p>Nuk \u00ebsht\u00eb se duhet, por do t\u00eb ishte e shk\u00eblqyer, sepse do ta thjeshtonte jet\u00ebn. Sa her\u00eb q\u00eb punojm\u00eb me kod, jo me skriptet e bash, por kemi nj\u00eb kod t\u00eb rregullt.<\/p>\n<p><\/p>\n<p><em>Prit, prit, skriptet n\u00eb bash \u2013 jan\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 shkel\u00eb n\u00eb kujtimet e tua. Kam nj\u00eb antipati personale p\u00ebr bash. Ai thyen n\u00eb m\u00ebnyr\u00eb t\u00eb \u00e7rregullt dhe \u00ebsht\u00eb gjithmon\u00eb i friksh\u00ebm. Dhe thyen shpesh pa pritshm\u00ebri, prandaj nuk e dua shum\u00eb. Mir\u00eb, le t\u00eb themi q\u00eb ke kod n\u00eb bash. Ndoshta, nuk e di n\u00ebse ka struktura t\u00eb mira p\u00ebr testimin atje. Nuk jam n\u00eb tem\u00eb. Dhe ne 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 kam hasur nj\u00eb situat\u00eb kur nj\u00eb koleg m\u00eb d\u00ebrgoi nj\u00eb k\u00ebrkes\u00eb p\u00ebr t\u00eb bashkuar 1,000 rreshta n\u00eb bash. Dhe ti ngelesh n\u00eb rishikim p\u00ebr 4 or\u00eb. Problemet jan\u00eb t\u00eb nj\u00ebjta. \u00cbsht\u00eb akoma kod. Dhe akoma pun\u00eb n\u00eb grup. Ne ngecim me k\u00ebrkesat p\u00ebr bashkimin dhe ngecim me konfliktet e bashkimit t\u00eb nj\u00ebjt\u00eb t\u00eb bash-it, p\u00ebr shembull. <\/p>\n<p><\/p>\n<p>Tani jam duke e ndjekur k\u00ebt\u00eb proces n\u00eb programimin m\u00eb t\u00eb bukur t\u00eb infrastruktur\u00ebs. Kam integruar Pulumi n\u00eb infrastruktur\u00eb. Kjo \u00ebsht\u00eb programim e past\u00ebr. Atje \u00ebsht\u00eb edhe m\u00eb e bukur, sepse kam t\u00eb gjitha mund\u00ebsit\u00eb e gjuh\u00ebs s\u00eb programimit, pra kam b\u00ebr\u00eb nd\u00ebrrimet e bukura me if-at, dhe gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull. Pra, ndryshimi im \u00ebsht\u00eb tashm\u00eb n\u00eb master. T\u00eb tjer\u00ebt e din\u00eb p\u00ebr t\u00eb. Ai tashm\u00eb ka ndikuar ndonj\u00ebher\u00eb. Por gjithashtu \u00ebsht\u00eb aktivizuar jo p\u00ebr t\u00eb gjitha infrastrukturat. \u00cbsht\u00eb aktivizuar p\u00ebr ambientet e mia testuese, p\u00ebr shembull. Prandaj, duke u p\u00ebrgjigjur pyetjes t\u00ebnde p\u00ebrs\u00ebri, \u00ebsht\u00eb e nevojshme. Na thjeshton jet\u00ebn si inxhinier\u00eb q\u00eb punojm\u00eb me kod. <\/p>\n<p><\/p>\n<p><em>N\u00ebse ndonj\u00eb i pranish\u00ebm ka 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, kur ndonj\u00ebher\u00eb nj\u00eb detyr\u00eb zgjat nj\u00eb muaj, at\u00ebher\u00eb ke nj\u00eb problem me arkitektur\u00ebn, ke nj\u00eb problem me analiz\u00ebn, dekompozimin, planifikimin etj. Por kam ndjesin\u00eb se n\u00ebse fillon t\u00eb jetosh sipas Continuous Integration, do t\u00eb fillosh t\u00eb rregullosh problemet me planifikimin, sepse nuk ka asnj\u00eb m\u00ebnyr\u00eb tjet\u00ebr q\u00eb ti t'i shp\u00ebtosh. <\/p>\n<p><\/p>\n<p><em>(Oleg) Po, gjith\u00e7ka \u00ebsht\u00eb ashtu. Sa i p\u00ebrket mund\u00ebsis\u00eb s\u00eb pun\u00ebs, kjo praktik\u00eb \u00ebsht\u00eb e barabart\u00eb me \u00e7do praktik\u00eb tjet\u00ebr serioze q\u00eb ndryshon kultur\u00ebn. Gj\u00ebja m\u00eb e v\u00ebshtir\u00eb p\u00ebr t'u kap\u00ebrcyer jan\u00eb zakonet, sidomos, zakonet e k\u00ebqija. Dhe n\u00ebse p\u00ebr t\u00eb vendosur k\u00ebt\u00eb praktik\u00eb k\u00ebrkohet nj\u00eb ndryshim serioz i zakoneve t\u00eb atyre rreth jush: zhvilluesve, drejtuesve, menaxher\u00ebve t\u00eb prodhimit, do t\u00eb keni surpriza.<\/em> <\/p>\n<p><\/p>\n<p><em>Cilat mund t\u00eb jen\u00eb surprizat? Imagjinoni se keni vendosur t\u00eb b\u00ebni shpesh integrim. Dhe n\u00eb integrim, ju keni lidhur disa gj\u00ebra t\u00eb tjera, si artefaktet. Dhe n\u00eb kompanin\u00eb tuaj, p\u00ebr shembull, ka nj\u00eb politik\u00eb q\u00eb \u00e7do artefakt duhet t\u00eb regjistrohet n\u00eb nj\u00eb sistem t\u00eb ruajtjes s\u00eb artefakteve. Dhe kjo merr nj\u00eb sasi kohe. Njer\u00ebzit duhet t\u00eb sh\u00ebnojn\u00eb q\u00eb si menaxher versioni e kan\u00eb provuar k\u00ebt\u00eb artefakt p\u00ebr gatishm\u00ebrin\u00eb p\u00ebr ta depozituar n\u00eb production. N\u00ebse kjo merr 5-10-15 minuta, por ju e b\u00ebni depozitimin nj\u00eb her\u00eb n\u00eb jav\u00eb, at\u00ebher\u00eb nj\u00eb her\u00eb n\u00eb jav\u00eb t\u00eb kaloni gjysm\u00eb ore \u00ebsht\u00eb nj\u00eb taks\u00eb e vog\u00ebl.<\/em> <\/p>\n<p><\/p>\n<p><em>N\u00ebse ju b\u00ebni Continuous Integration 10 her\u00eb n\u00eb dit\u00eb, at\u00ebher\u00eb duhet t\u00eb shum\u00ebzoni 10 her\u00eb me 30 minuta. Dhe kjo e tejkalon sasin\u00eb e koh\u00ebs s\u00eb pun\u00ebs s\u00eb atij menaxheri t\u00eb versionit. Ai thjesht lodhet ta b\u00ebj\u00eb k\u00ebt\u00eb. Ka kosto t\u00eb vazhdueshme p\u00ebr disa praktika. Dhe gjith\u00e7ka.<\/em> <\/p>\n<p><\/p>\n<p><em>Dhe ju duhet ose ta anuloni k\u00ebt\u00eb rregull, q\u00eb t\u00eb mos p\u00ebrfshiheni m\u00eb n\u00eb k\u00ebt\u00eb pun\u00eb, q\u00eb do t\u00eb thot\u00eb se nuk i jepni manualisht nj\u00eb grad\u00eb p\u00ebr p\u00ebrputhshm\u00ebri t\u00eb di\u00e7kaje me di\u00e7ka tjet\u00ebr. Ju mb\u00ebshteteni 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 production pa at\u00eb q\u00eb Vasia nuk tha, q\u00eb ai lejon dhe k\u00ebshtu me radh\u00eb - e gjitha kjo pengon praktikat. Sepse n\u00ebse ka aktivitete t\u00eb lidhura si taks\u00eb, at\u00ebher\u00eb gjith\u00e7ka rritet 100 her\u00eb. Prandaj, ndryshimi shpesh nuk do t\u00eb pranohet me g\u00ebzim nga t\u00eb gjith\u00eb. Sepse \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb ndryshosh zakonat e njer\u00ebzve.<\/em> <\/p>\n<p><\/p>\n<p><em>Kur nj\u00eb njeri b\u00ebn pun\u00ebn e zakonshme, ai e b\u00ebn at\u00eb pothuajse pa menduar. Ngarkesa e tij njoh\u00ebse \u00ebsht\u00eb zero. Ai thjesht e b\u00ebn at\u00eb, sepse 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 sa her\u00eb q\u00eb i thua: \"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 njoh\u00ebse e fuqishme. Nd\u00ebrsa ajo ndodh p\u00ebr t\u00eb gjith\u00eb menj\u00ebher\u00eb.<\/em> <\/p>\n<p><\/p>\n<p><em>Prandaj, m\u00eb e thjeshta \u00ebsht\u00eb, megjithat\u00eb, k\u00ebt\u00eb luks nuk e kan\u00eb t\u00eb gjith\u00eb, por un\u00eb gjithmon\u00eb veproj k\u00ebshtu. N\u00ebse nisi nj\u00eb projekt t\u00eb ri, zakonisht t\u00eb gjitha praktikat e pabesueshme shtyhen menj\u00ebher\u00eb n\u00eb k\u00ebt\u00eb projekt. Deri sa projekti \u00ebsht\u00eb i ri, ne nuk rrezikojm\u00eb shum\u00eb. Prod nuk ekziston ende, nuk ka asgj\u00eb p\u00ebr t\u00eb shkat\u00ebrruar. Prandaj, mund t\u00eb p\u00ebrdoret si trajnim. Ky qasje funksionon. Por nuk t\u00eb gjitha kompanit\u00eb kan\u00eb mund\u00ebsi t\u00eb nisin projekte t\u00eb tilla shpesh. Megjithat\u00eb, \u00ebsht\u00eb pak e \u00e7uditshme, sepse tani po zhvillohet nj\u00eb transformim digjital, t\u00eb gjith\u00eb duhet t\u00eb fillojn\u00eb eksperimentet p\u00ebr t\u00eb mbetur n\u00eb konkurrenc\u00eb.<\/em> <\/p>\n<p><\/p>\n<p>K\u00ebtu ju pengoni n\u00eb faktin se s\u00eb pari duhet t\u00eb keni nj\u00eb kuptim se \u00e7far\u00eb keni nevoj\u00eb t\u00eb b\u00ebni. Bota nuk \u00ebsht\u00eb ideale, prodhimi gjithashtu nuk \u00ebsht\u00eb ideal. <\/p>\n<p><\/p>\n<p><em>Po, k\u00ebto gj\u00ebra jan\u00eb t\u00eb lidhura.<\/em><\/p>\n<p><\/p>\n<p>Biznesi gjithashtu nuk ka gjithmon\u00eb nj\u00eb kuptim se ku duhet t\u00eb shkoj\u00eb. <\/p>\n<p><\/p>\n<p><em>Ka situata kur asnj\u00eb ndryshim nuk \u00ebsht\u00eb i mundur. Kjo \u00ebsht\u00eb nj\u00eb situat\u00eb kur ka nj\u00eb presion m\u00eb t\u00eb madh mbi ekipin. Ekipi tashm\u00eb \u00ebsht\u00eb i lodhur. Ai nuk ka asnj\u00eb koh\u00eb t\u00eb lir\u00eb p\u00ebr eksperimentet. Ata punojn\u00eb nga m\u00ebngjesi deri n\u00eb mbr\u00ebmje p\u00ebr t\u00eb punuar karakteristika. Dhe drejtuesi po k\u00ebrkon m\u00eb shum\u00eb karakteristika. K\u00ebshtu q\u00eb n\u00eb at\u00eb situat\u00eb, asnj\u00eb ndryshim nuk \u00ebsht\u00eb i mundur. Ekipit mund t'u thuhet vet\u00ebm, se nes\u00ebr do t\u00eb b\u00ebjm\u00eb si dje, thjesht duhet t\u00eb b\u00ebjm\u00eb pak m\u00eb shum\u00eb karakteristika. \u00c7do kalim n\u00eb praktika t\u00eb tjera n\u00eb k\u00ebt\u00eb kuptim nuk \u00ebsht\u00eb i mundur. Kjo \u00ebsht\u00eb nj\u00eb situat\u00eb klasike, kur nuk ka koh\u00eb p\u00ebr t\u00eb mbushur axhenda, duhet t\u00eb pritet druri, k\u00ebshtu q\u00eb e b\u00ebjn\u00eb me s\u00eb fundi nj\u00eb shkurt. K\u00ebtu nuk ka k\u00ebshillash t\u00eb thjeshta.<\/em> <\/p>\n<p><\/p>\n<p><em>(Dmitri) Do t\u00eb lexoj nj\u00eb sqarim nga \u00e7ati: \"Por ju nevojitet mbulimi i madh me teste n\u00eb nivele t\u00eb ndryshme. Sa koh\u00eb i kushtohet testeve? Duket sikur \u00ebsht\u00eb shum\u00eb e kushtueshme, merr shum\u00eb koh\u00eb.\"<\/em><\/p>\n<p><\/p>\n<p><em>(Oleg) Kjo \u00ebsht\u00eb nj\u00eb keqkuptim klasik. Testet duhet t\u00eb jen\u00eb t\u00eb mjaftueshme q\u00eb ju t\u00eb keni besimin tuaj. Continuous Integration nuk \u00ebsht\u00eb di\u00e7ka, ku s\u00eb pari shkojn\u00eb 100% teste dhe vet\u00ebm pastaj filloni t\u00eb p\u00ebrdorni k\u00ebt\u00eb praktik\u00eb. Continuous Integration ul ngarkes\u00ebn njoh\u00ebse p\u00ebr ju, sepse \u00e7do ndryshim q\u00eb e shihni me sy \u00ebsht\u00eb aq i qart\u00eb q\u00eb ju e kuptoni n\u00ebse do ta thyej\u00eb di\u00e7ka apo jo, edhe pa teste. Ju mund ta provoni shpejt n\u00eb mendjen tuaj, sepse jan\u00eb ndryshime t\u00eb vogla. Edhe n\u00ebse keni vet\u00ebm testues manual\u00eb, atyre gjithashtu iu b\u00ebhet m\u00eb e leht\u00eb. Ju e nxor\u00ebt dhe thoni: \"A doli gjith\u00e7ka mir\u00eb?\" Ata kontrollojn\u00eb dhe thon\u00eb: \"Po, gjith\u00e7ka \u00ebsht\u00eb mir\u00eb.\" Sepse testuesi di se ku t\u00eb shikoj\u00eb. Nj\u00eb komit \u00ebsht\u00eb i lidhur me nj\u00eb fragment t\u00eb caktuar t\u00eb kodit. Dhe kjo \u00ebsht\u00eb eksploruar me nj\u00eb sjellje t\u00eb caktuar.<\/em><\/p>\n<p><\/p>\n<p>K\u00ebtu, sigurisht, ti e ke b\u00ebr\u00eb m\u00eb t\u00eb bukur. <\/p>\n<p><\/p>\n<p><em>(Dmitri) K\u00ebtu nuk pajtohem. Ka praktik\u00eb \u2014 zhvillim p\u00ebrmes testimit, e cila do t'ju mbaj\u00eb larg k\u00ebtij problemi.<\/em> <\/p>\n<p><\/p>\n<p><em>(Oleg) Ja, un\u00eb ende nuk kam arritur deri k\u00ebtu. Iluzioni i par\u00eb \u00ebsht\u00eb se duhet t\u00eb shkruani 100% teste ose t\u00eb mos merremi fare me Continuous Integration. Kjo nuk \u00ebsht\u00eb e v\u00ebrtet\u00eb. K\u00ebto jan\u00eb dy praktika paralele. Dhe ato nuk varen drejtp\u00ebrdrejt nga nj\u00ebra-tjetra. Mbulesa juaj me teste duhet t\u00eb jet\u00eb optimale. Optimale do t\u00eb thot\u00eb q\u00eb ju t\u00eb jeni t\u00eb sigurt se cil\u00ebsia e variantit master, q\u00eb ka mbetur pas commit-it tuaj, ju lejon t\u00eb shtypni me besim butonin \u201eDeploy\u201c t\u00eb premten n\u00eb mbr\u00ebmje kur jeni n\u00ebn ndikimin e alkoolit. Si e arrini k\u00ebt\u00eb? N\u00ebp\u00ebrmjet revistave, mbulimit, p\u00ebrmes monitorimit t\u00eb mir\u00eb.<\/em> <\/p>\n<p><\/p>\n<p><em>Monitorimi i mir\u00eb nuk \u00ebsht\u00eb i ndrysh\u00ebm nga testet. N\u00ebse ju ekzekutoni testet nj\u00eb her\u00eb n\u00eb pre prodhim, ato kontrollojn\u00eb nj\u00eb her\u00eb t\u00eb gjitha skenaret tuaj t\u00eb p\u00ebrdoruesve dhe kaq. Por n\u00ebse i ekzekutoni ato n\u00eb nj\u00eb cik\u00ebl t\u00eb pafund, at\u00ebher\u00eb kjo \u00ebsht\u00eb sistemi juaj i monitorimit t\u00eb zgjeruar, i cili teston gjith\u00e7ka vazhdimisht \u2013 ra apo nuk ra. N\u00eb k\u00ebt\u00eb rast, dallimi \u00ebsht\u00eb vet\u00ebm n\u00eb nj\u00eb her\u00eb ose shum\u00eb her\u00eb. Nj\u00eb set shum\u00eb i mir\u00eb testesh ..., t\u00eb ekzekutuar pafund\u00ebsisht, \u00ebsht\u00eb monitorim. Dhe monitorimi i drejt\u00eb duhet t\u00eb jet\u00eb i till\u00eb.<\/em> <\/p>\n<p><\/p>\n<p><em>Dhe prandaj, si do t'i arrini k\u00ebto gjendje, kur t\u00eb shp\u00ebrndaheni t\u00eb premten n\u00eb mbr\u00ebmje dhe t\u00eb shkoni n\u00eb sht\u00ebpi, \u00ebsht\u00eb nj\u00eb pyetje tjet\u00ebr. Ndoshta jeni thjesht nj\u00eb guximtar.<\/em> <\/p>\n<p><\/p>\n<p>Le t\u00eb rikthehemi pak te Continuous Integration. Ne zbuluam pak n\u00eb nj\u00eb praktik\u00eb t\u00eb nd\u00ebrlikuar tjet\u00ebr. <\/p>\n<p><\/p>\n<p><em>Dhe iluzioni i dyt\u00eb \u00ebsht\u00eb se MVP, njer\u00ebzit thon\u00eb se duhet t\u00eb b\u00ebhet shpejt, prandaj testet nuk jan\u00eb t\u00eb nevojshme. Jo e gjith\u00eb v\u00ebrteta. Kur ju shkruani nj\u00eb histori p\u00ebrdoruesi p\u00ebr MVP, mund ta zhvilloni at\u00eb ose mbi bazen e d\u00ebshmive, dmth. d\u00ebgjuat p\u00ebr nj\u00eb histori p\u00ebrdoruesi dhe menj\u00ebher\u00eb filloi t\u00eb kodoni, ose t\u00eb punoni sipas TDD. Dhe sipas praktik\u00ebs TDD, koha e zhvillimit nuk \u00ebsht\u00eb m\u00eb e gjat\u00eb, dmth. testet jan\u00eb nj\u00eb efekt an\u00ebsor. Praktika TDD nuk konsiston n\u00eb testim. Megjith\u00ebse quhet Zhvillim i Drejtuar nga Testet, aty flitet n\u00eb t\u00eb v\u00ebrtet\u00eb p\u00ebr nj\u00eb qasje arkitekturore. Kjo \u00ebsht\u00eb nj\u00eb qasje se si t\u00eb shkruani at\u00eb q\u00eb nevojitet dhe t\u00eb mos shkruani at\u00eb q\u00eb nuk nevojitet. Kjo praktik\u00eb p\u00ebrq\u00ebndrohet n\u00eb iteracionin tuaj t\u00eb ardhsh\u00ebm n\u00eb zhvillimin e mendjes p\u00ebr sa i p\u00ebrket krijimit t\u00eb arkitektur\u00ebs s\u00eb aplikacionit.<\/em> <\/p>\n<p><\/p>\n<p><em>Pra, \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb heq\u00ebsh dor\u00eb nga k\u00ebto iluzione. MVP dhe testet nuk e kund\u00ebrshtojn\u00eb nj\u00ebra-tjetr\u00ebn. P\u00ebrkundrazi, n\u00ebse e b\u00ebni MVP sipas praktik\u00ebs TDD, do ta b\u00ebni m\u00eb mir\u00eb dhe m\u00eb shpejt se sa n\u00ebse do ta b\u00ebni pa praktik\u00eb, p\u00ebr nj\u00eb rezultat sipas d\u00ebshmive.<\/em><\/p>\n<p><\/p>\n<p>Kjo \u00ebsht\u00eb nj\u00eb mendim shum\u00eb i paduksh\u00ebm dhe i nd\u00ebrlikuar. Kur d\u00ebgjon se tani do t\u00eb shkruaj teste dhe n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb do t\u00eb b\u00ebj di\u00e7ka m\u00eb shpejt, kjo ting\u00ebllon krejt\u00ebsisht e pamundur. <\/p>\n<p><\/p>\n<p><em>(Dmitri) Shum\u00eb njer\u00ebz kur flasin p\u00ebr MVP, kjo \u00ebsht\u00eb sepse u duket e lodhshme t\u00eb shkruajn\u00eb di\u00e7ka normale. Dhe k\u00ebto jan\u00eb ende gj\u00ebra t\u00eb ndryshme. Mos e ktheni MVP n\u00eb di\u00e7ka t\u00eb keqe q\u00eb nuk punon.<\/em> <\/p>\n<p><\/p>\n<p>Po, po, ke t\u00eb drejt\u00eb.<\/p>\n<p><\/p>\n<p><em>Dhe m\u00eb pas papritur MVP n\u00eb prodhim.<\/em><\/p>\n<p><\/p>\n<p>P\u00ebrher\u00eb. <\/p>\n<p><\/p>\n<p>Dhe TDD ting\u00ebllon shum\u00eb e zakonshme, ku d\u00ebgjon se po shkruan teste dhe duket se po b\u00ebn m\u00eb shum\u00eb pun\u00eb. Kjo ting\u00ebllon shum\u00eb \u00e7uditsh\u00ebm, por n\u00eb t\u00eb v\u00ebrtet\u00eb kjo ka rezultuar m\u00eb shpejt dhe m\u00eb t\u00ebrheq\u00ebse. Kur shkruan nj\u00eb test, tashm\u00eb mendon shum\u00eb p\u00ebr at\u00eb se \u00e7far\u00eb lloji kodi do t\u00eb ket\u00eb dhe si do t\u00eb thirret, gjithashtu \u00e7far\u00eb sjelljeje presim prej tij. Nuk thjesht thoni se kam shkruar nj\u00eb funksion dhe ai b\u00ebn di\u00e7ka. Fillimisht keni menduar p\u00ebr at\u00eb q\u00eb ka k\u00ebto kushte, k\u00ebshtu do t\u00eb thirret. Ju e mbuloni at\u00eb me teste dhe nga kjo e kuptoni se si do t\u00eb duken interfaces brenda kodit tuaj. Kjo ka nj\u00eb ndikim t\u00eb madhe n\u00eb arkitektur\u00eb. Kodi juaj automatikisht b\u00ebhet m\u00eb modular, sepse fillimisht p\u00ebrpiqeni t\u00eb kuptoni se si do ta testoni dhe vet\u00ebm at\u00ebher\u00eb e shkruani at\u00eb. <\/p>\n<p><\/p>\n<p>Me TDD m\u00eb ndodhi q\u00eb n\u00eb nj\u00eb moment angazhova nj\u00eb mentor p\u00ebr Ruby, kur isha ende programues n\u00eb Ruby. Ai tha: \u201eLe t\u00eb b\u00ebj TDD.\u201d Dhe un\u00eb mendoj: \u201eO Zot, tani do t\u00eb shkruaj di\u00e7ka shtes\u00eb.\u201d Dhe u dakorduam q\u00eb gjat\u00eb dy jav\u00ebve t\u00eb shkruaj \u00e7do kod funksional n\u00eb Python sipas TDD. Pas dy jav\u00ebsh kuptova se d\u00ebshiroj t\u00eb mos kthehem m\u00eb mbrapa. Pas dy jav\u00ebsh duke p\u00ebrpjekur ta aplikoj kudo, kuptoni se sa \u00ebsht\u00eb b\u00ebr\u00eb m\u00eb e leht\u00eb p\u00ebr ju edhe thjesht t\u00eb mendoni. Por k\u00ebt\u00eb nuk \u00ebsht\u00eb e dukshme, prandaj i 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 ndihmoni k\u00ebt\u00eb p\u00ebr dy jav\u00eb. M\u00eb mjaftoi dy.<\/p>\n<p><\/p>\n<p><em>(Dimitri) Mund te zhvillojm\u00eb k\u00ebt\u00eb mendim nga pik\u00ebpamja e p\u00ebrdorimit t\u00eb infrastruktur\u00ebs. Para se t\u00eb lancojm\u00eb di\u00e7ka t\u00eb re, b\u00ebjm\u00eb monitorim, e pastaj e lancojm\u00eb. N\u00eb k\u00ebt\u00eb rast monitorimi yn\u00eb b\u00ebhet testim normal. Dhe ka zhvillim p\u00ebrmes monitorimit. Por pothuajse t\u00eb gjith\u00eb thon\u00eb se \u00ebsht\u00eb e gjat\u00eb, jam dembel, kam b\u00ebr\u00eb nj\u00eb version t\u00eb p\u00ebrkohsh\u00ebm. N\u00ebse e kemi b\u00ebr\u00eb monitorimin si\u00e7 duhet, ne kuptojm\u00eb gjendjen e sistemit CI. Dhe sistemi CI ka shum\u00eb monitorime. Ne kuptojm\u00eb gjendjen e sistemit, dim\u00eb se \u00e7far\u00eb ka brenda. Dhe gjat\u00eb zhvillimit, ne sakt\u00ebsisht e b\u00ebjm\u00eb sistemin q\u00eb t\u00eb arrij\u00eb n\u00eb gjendjen e duhur.<\/em> <\/p>\n<p><\/p>\n<p><em>K\u00ebto praktika jan\u00eb t\u00eb njohura prej koh\u00ebsh. Ne e kemi diskutuar at\u00eb kat\u00ebr vjet m\u00eb par\u00eb. Por p\u00ebr kat\u00ebr 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 vendosur si element mediatik, por p\u00ebr ndonj\u00eb arsye 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.0.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.0.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\udd47Continuous Integration si praktik\u00eb, jo 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}]}}