{"id":97620,"date":"2020-10-19T20:42:40","date_gmt":"2020-10-19T18:42:40","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial"},"modified":"2020-10-19T20:42:40","modified_gmt":"2020-10-19T18:42:40","slug":"kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial","title":{"rendered":"Hur vi implementerade SonarQube och ins\u00e5g dess stora potential","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Hur vi implementerade SonarQube och ins\u00e5g dess stora potential\" src=\"\/wp-content\/uploads\/2020\/10\/81a4b69ed09d156ec71603b4bf32d587.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vi vill dela med oss av v\u00e5r erfarenhet av att implementera plattformen f\u00f6r kontinuerlig analys och m\u00e4tning av kodkvalitet SonarQube i de befintliga utvecklingsprocesserna f\u00f6r DPO-systemet (komplettering till dep\u00e5- och clearingredovisningssystemet \"Alameda\") vid den nationella avr\u00e4kningsdeponeringen. <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Den nationella avr\u00e4kningsdeponeringen (gruppen av f\u00f6retag \"Moskva-b\u00f6rsen\") \u00e4r ett av de nyckelf\u00f6retag inom den finansiella infrastrukturen, som f\u00f6rvarar och redovisar v\u00e4rdepapper fr\u00e5n ryska och utl\u00e4ndska utgivare till ett v\u00e4rde av \u00f6ver 50 biljoner rubel. Det v\u00e4xande antalet transaktioner som systemet utf\u00f6r, samt den kontinuerliga utvecklingen av funktionalitet, kr\u00e4ver att vi uppr\u00e4tth\u00e5ller en h\u00f6g kodkvalitet i systemen. Ett av verktygen f\u00f6r att n\u00e5 detta m\u00e5l \u00e4r den statiska kodanalysatorn SonarQube. I denna artikel kommer vi att beskriva v\u00e5r framg\u00e5ngsrika erfarenhet av s\u00f6ml\u00f6s implementering av den statiska analysatorn SonarQube i de befintliga utvecklingsprocesserna i v\u00e5r avdelning. <\/p>\n<p><\/p>\n<h3 id=\"kratko-ob-otdele\">Kort om avdelningen<\/h3>\n<p><\/p>\n<p>V\u00e5ra kompetenser omfattar f\u00f6ljande moduler: utbetalningar till NRD:s kunder, elektronisk dokumenthantering (EDO), behandling av meddelanden fr\u00e5n handelsdepotet (registrering av OTC-transaktioner), elektroniska interaktionskanaler mellan kunder och NRD, och mycket mer. Sammanfattningsvis en stor m\u00e4ngd arbete med den tekniska sidan av den operationella verksamheten. Vi arbetar p\u00e5 beg\u00e4ran. Beg\u00e4rningar fr\u00e5n operat\u00f6rerna behandlas av analytiker: de samlar krav fr\u00e5n kunden och presenterar sin vision f\u00f6r hur detta ska implementeras i programmet. D\u00e4refter f\u00f6ljer en standardprocess: kodutveckling \u2013 testning \u2013 pilotdrift \u2013 leverans av koden till produktionsmilj\u00f6n till den direkta best\u00e4llaren. <\/p>\n<p><\/p>\n<h3 id=\"pochemu-imenno-sonarqube\">Varf\u00f6r just SonarQube?<\/h3>\n<p><\/p>\n<p>Det h\u00e4r \u00e4r v\u00e5r avdelnings f\u00f6rsta erfarenhet av att implementera en plattform f\u00f6r kodkvalitetskontroll \u2013 tidigare gjorde vi detta manuellt genom att enbart g\u00f6ra code review. Men den v\u00e4xande arbetsvolymen kr\u00e4ver automatisering av denna process. Dessutom finns det nyare medarbetare i teamet som inte \u00e4r helt bekanta med interna utvecklingsregler och tenderar att g\u00f6ra fler misstag. F\u00f6r kodkvalitetskontroll har vi beslutat att inf\u00f6ra en statisk analysator. Eftersom SonarQube redan anv\u00e4nts i vissa system inom NDR, var det ingen l\u00e5ng valprocess. Tidigare har kollegor fr\u00e5n andra avdelningar analyserat koden f\u00f6r mikrotj\u00e4nster i systemet \"Alameda\" (NDR:s egen system f\u00f6r deponerings- och clearingredovisning), i CFT (informationssystem f\u00f6r bokf\u00f6ring, balansr\u00e4kning, samt f\u00f6rberedelse av obligatoriska och interna rapporter), och i n\u00e5gra andra system. F\u00f6r experimenten besl\u00f6t vi oss f\u00f6r att b\u00f6rja med den kostnadsfria versionen av SonarQube. L\u00e5t oss nu g\u00e5 vidare till v\u00e5rt fall.<\/p>\n<p><\/p>\n<h2 id=\"process-vnedreniya\">Implementeringsprocess<\/h2>\n<p><\/p>\n<p><strong>Vi har<\/strong>:<\/p>\n<p><\/p>\n<ul>\n<li>automatisk systemuppbyggnad i TeamCity;<\/li>\n<li>processen f\u00f6r att ladda upp kod via MergeRequest fr\u00e5n feature-grenen till master-grenen i GitLab (utvecklingsprocess enligt GitHub Flow) \u00e4r inst\u00e4lld;<\/li>\n<li>SonarQube, konfigurerat f\u00f6r att analysera koden f\u00f6r DPO-systemet enligt schema.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>V\u00e5rt m\u00e5l<\/strong>: inf\u00f6ra automatiserad kodanalys i CI\/CD-processerna f\u00f6r DPO.<\/p>\n<p><\/p>\n<p><strong>Beh\u00f6ver st\u00e4llas in<\/strong>: processen f\u00f6r automatisk kontroll av koden med den statiska analysatorn vid varje MergeRequest i huvudgrenen.<\/p>\n<p><\/p>\n<p>Det vill s\u00e4ga, den \u00f6nskade bilden \u00e4r f\u00f6ljande: s\u00e5 snart en utvecklare laddar upp \u00e4ndringar i feature-grenen, startar en automatisk kontroll f\u00f6r att uppt\u00e4cka nya fel i koden. Om inga fel finns till\u00e5ts godk\u00e4nnande av \u00e4ndringarna, annars m\u00e5ste felen \u00e5tg\u00e4rdas. Redan i det tidiga skedet har vi kunnat identifiera ett visst antal fel i koden. Systemet har mycket flexibla inst\u00e4llningar: det kan anpassas s\u00e5 att det fungerar f\u00f6r specifika uppgifter, f\u00f6r varje system och programmeringsstil. <\/p>\n<p><\/p>\n<h3 id=\"nastroyka-qualitygate-v-sonarqube\">Inst\u00e4llning av QualityGate i SonarQube<\/h3>\n<p><\/p>\n<p>Analys av QualityGate \u00e4r n\u00e5got vi st\u00f6tte p\u00e5 i djupet av internet. Ursprungligen anv\u00e4nde vi en annan, mer komplicerad och p\u00e5 vissa s\u00e4tt felaktig metod. F\u00f6rst k\u00f6rde vi en skanning genom SonarQube tv\u00e5 g\u00e5nger: vi skannade feature-grenen och grenen dit vi planerade att sl\u00e5 samman feature-grenen, och j\u00e4mf\u00f6rde sedan antalet fel. Denna metod var inte stabil och gav inte alltid r\u00e4tt resultat. Sedan fick vi veta att man ist\u00e4llet f\u00f6r att k\u00f6ra SonarQube tv\u00e5 g\u00e5nger kan s\u00e4tta en gr\u00e4ns f\u00f6r antal till\u00e5tna fel (QualityGate) och analysera endast den gren som man laddar upp och j\u00e4mf\u00f6r.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hur vi implementerade SonarQube och ins\u00e5g dess stora potential\" src=\"\/wp-content\/uploads\/2020\/10\/1d1def0ca40039b0c61315d3b3833a33.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00f6r n\u00e4rvarande anv\u00e4nder vi fortfarande en ganska primitiv kodgranskning. Det b\u00f6r noteras att SonarQube inte \u00e4r kompatibelt med vissa programmeringsspr\u00e5k, inklusive Delphi. F\u00f6r n\u00e4rvarande analyserar vi endast PLSql-kod f\u00f6r v\u00e5rt system.<\/p>\n<p><\/p>\n<p>Det fungerar s\u00e5 h\u00e4r:<\/p>\n<p><\/p>\n<ul>\n<li>Vi analyserar endast PL\/SQL-kod f\u00f6r v\u00e5rt projekt.<\/li>\n<li>QualityGate i SonarQube \u00e4r inst\u00e4llt s\u00e5 att antalet fel inte \u00f6kar med varje commit. <\/li>\n<li>Antalet fel vid f\u00f6rsta k\u00f6rningen blev 229. Om antalet fel vid commit \u00f6kar, s\u00e5 till\u00e5ts inte sammanslagning. <\/li>\n<li>Vid \u00e5tg\u00e4rdande av fel kan QualityGate st\u00e4llas om. <\/li>\n<li>Det g\u00e5r ocks\u00e5 att l\u00e4gga till nya punkter f\u00f6r analys, till exempel kodt\u00e4ckning med tester osv.<\/li>\n<\/ul>\n<p><\/p>\n<p>Arbetsfl\u00f6de:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hur vi implementerade SonarQube och ins\u00e5g dess stora potential\" src=\"\/wp-content\/uploads\/2020\/10\/f904169fa87e9cfb75016c1fae4104f1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I kommentarerna fr\u00e5n skriptets arbete syns det att antalet fel i feature-grenen inte har \u00f6kat. S\u00e5 allt \u00e4r bra.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hur vi implementerade SonarQube och ins\u00e5g dess stora potential\" src=\"\/wp-content\/uploads\/2020\/10\/004edf78aa787a2a8f6d376f64049a92.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Knappen Merge blir tillg\u00e4nglig.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hur vi implementerade SonarQube och ins\u00e5g dess stora potential\" src=\"\/wp-content\/uploads\/2020\/10\/7870448b9c13242f8e81f44bfd91d503.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>I kommentarerna fr\u00e5n skriptets arbete syns det att antalet fel i feature-grenen har blivit fler \u00e4n till\u00e5tet. S\u00e5 det \u00e4r d\u00e5ligt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hur vi implementerade SonarQube och ins\u00e5g dess stora potential\" src=\"\/wp-content\/uploads\/2020\/10\/b18eb07b5d46ee4cf0b71b28dfec92cc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Merge-knappen \u00e4r r\u00f6d. F\u00f6r n\u00e4rvarande finns det inget f\u00f6rbud mot att ladda upp \u00e4ndringar med felaktig kod, men det g\u00f6rs p\u00e5 ansvarig utvecklares eget godtycke. I framtiden kan s\u00e5dana commits f\u00f6rbjudas i huvudgrenen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Hur vi implementerade SonarQube och ins\u00e5g dess stora potential\" src=\"\/wp-content\/uploads\/2020\/10\/353f896326bca76c25d72396386cbb13.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"samostoyatelnaya-rabota-nad-oshibkami\">Sj\u00e4lvst\u00e4ndigt arbete med felen<\/h3>\n<p><\/p>\n<p>Det \u00e4r n\u00f6dv\u00e4ndigt att kontrollera alla fel som systemet identifierat, eftersom SonarQube analyserar efter sina strikta standarder. Det som anses vara ett fel av SonarQube, kan i verkligheten i v\u00e5r kod s\u00e5v\u00e4l vara en icke-fr\u00e5ga. D\u00e4rf\u00f6r m\u00e5ste vi kontrollera och notera om detta \u00e4r ett verkligt fel, eller om det som vi har verkar vara i god ordning. P\u00e5 s\u00e5 s\u00e4tt minskar vi antalet fel. Med tiden kommer systemet att l\u00e4ra sig att f\u00f6rst\u00e5 dessa nyanser. <\/p>\n<p><\/p>\n<h2 id=\"k-chemu-my-prishli\">Vad har vi kommit fram till<\/h2>\n<p><\/p>\n<p>V\u00e5rt m\u00e5l var att f\u00f6rst\u00e5 om det var rimligt att automatisera kodgranskning i v\u00e5rt fall. Och resultatet har \u00f6vertr\u00e4ffat f\u00f6rv\u00e4ntningarna. SonarQube l\u00e5ter oss arbeta med de spr\u00e5k vi beh\u00f6ver, g\u00f6r en ganska noggrann analys och har potentialen att l\u00e4ra sig av utvecklarnas tips. Sammanfattningsvis \u00e4r vi n\u00f6jda med v\u00e5r f\u00f6rsta erfarenhet av att anv\u00e4nda SonarQube och planerar att forts\u00e4tta utvecklas inom detta omr\u00e5de. Vi f\u00f6rv\u00e4ntar oss att vi i framtiden kommer att kunna spara mer tid och kraft p\u00e5 kodgranskning och g\u00f6ra den av h\u00f6gre kvalitet genom att eliminera den m\u00e4nskliga faktorn. Kanske kommer vi under processen att uppt\u00e4cka plattformens brister, eller \u00e5 andra sidan, bli \u00f6vertygade om att det verkligen \u00e4r n\u00e5got bra med stor potential. <\/p>\n<p><\/p>\n<p>I denna \u00f6versiktsartikel har vi ber\u00e4ttat om v\u00e5r bekantskap med den statiska analysatorn SonarQube. Om du har n\u00e5gra fr\u00e5gor, skriv g\u00e4rna i kommentarerna. Om du \u00e4r intresserad av detta \u00e4mne, kommer vi i en ny publikation att mer detaljerat beskriva hur man korrekt st\u00e4ller in allt och skriver kod f\u00f6r att g\u00f6ra en s\u00e5dan kontroll. <\/p>\n<p><\/p>\n<p>Textens f\u00f6rfattare: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/atanya\/\" class=\"user_link\">atanya<\/a><\/noindex><\/p>\n<p>K\u00e4lla: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/nsd\/blog\/523732\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u043b\u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 SonarQube \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0414\u041f\u041e (\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u043d\u043e-\u043a\u043b\u0438\u0440\u0438\u043d\u0433\u043e\u0432\u043e\u0433\u043e \u0443\u0447\u0435\u0442\u0430 \u00ab\u0410\u043b\u0430\u043c\u0435\u0434\u0430\u00bb) \u041d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u043e\u0433\u043e \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u044f. \u041d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0441\u0447\u0435\u0442\u043d\u044b\u0439 \u0434\u0435\u043f\u043e\u0437\u0438\u0442\u0430\u0440\u0438\u0439 (\u0433\u0440\u0443\u043f\u043f\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u00ab\u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u0430\u044f \u0431\u0438\u0440\u0436\u0430\u00bb) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0445\u0440\u0430\u043d\u0438\u0442 \u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0446\u0435\u043d\u043d\u044b\u0435 \u0431\u0443\u043c\u0430\u0433\u0438 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u0438 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0445 \u044d\u043c\u0438\u0442\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u0441\u0443\u043c\u043c\u0443 \u0431\u043e\u043b\u0435\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":97621,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-97620","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.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f.\" \/>\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\/sv\/blog\/administrirovanie\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\udd47\u041a\u0430\u043a \u043c\u044b \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0438 SonarQube \u0438 \u043e\u0441\u043e\u0437\u043d\u0430\u043b\u0438 \u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial\" \/>\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-10-19T18:42:40+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-10-19T18:42:40+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\udd47Hur vi implementerade SonarQube och ins\u00e5g dess stora potential | ProHoster","description":"Vi vill dela med oss.","canonical_url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sv_SE","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\udd47\u041a\u0430\u043a \u043c\u044b \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0438 SonarQube \u0438 \u043e\u0441\u043e\u0437\u043d\u0430\u043b\u0438 \u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b | ProHoster","og:description":"\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f.","og:url":"https:\/\/prohoster.info\/sv\/blog\/administrirovanie\/kak-my-vnedrili-sonarqube-i-osoznali-ego-bolshoj-potenczial","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-10-19T18:42:40+00:00","article:modified_time":"2020-10-19T18:42:40+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"97620","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 10:16:26","updated":"2022-09-28 13:56:02","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/97620","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=97620"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/97620\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/97621"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=97620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=97620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=97620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}