溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

關(guān)于SonarQube社區(qū)版使用問(wèn)題有哪些

發(fā)布時(shí)間:2021-10-20 14:12:09 來(lái)源:億速云 閱讀:135 作者:iii 欄目:web開(kāi)發(fā)

本篇內(nèi)容主要講解“關(guān)于SonarQube社區(qū)版使用問(wèn)題有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“關(guān)于SonarQube社區(qū)版使用問(wèn)題有哪些”吧!

 1 簡(jiǎn)介

在大規(guī)模使用SonarQube平臺(tái)對(duì)代碼進(jìn)行掃描時(shí)可能會(huì)遇到以下幾個(gè)問(wèn)題

  • SonarQube平臺(tái)數(shù)據(jù)問(wèn)題(開(kāi)源版本不支持不同分支)

  • SonarQube掃描規(guī)則問(wèn)題(當(dāng)配置了默認(rèn)規(guī)則后新建項(xiàng)目如何指定新規(guī)則呢?)

  • SonarQube項(xiàng)目授權(quán)問(wèn)題(新生產(chǎn)的項(xiàng)目如何配置權(quán)限?)

2 解決SonarQube平臺(tái)數(shù)據(jù)問(wèn)題

當(dāng)我們?cè)诖笠?guī)模使用SonarQube進(jìn)行代碼質(zhì)量檢查的時(shí)候,我們需要讓開(kāi)發(fā)人員每次都能看到當(dāng)前特性分支的掃描分析數(shù)據(jù),以盡快解決有問(wèn)題的代碼,提高代碼的質(zhì)量。開(kāi)源版本會(huì)帶來(lái)一些問(wèn)題,因?yàn)椴恢С忠粋€(gè)項(xiàng)目多分支的形式,所以我們按照特性分支的名稱來(lái)生成相對(duì)應(yīng)的掃描項(xiàng)目。(會(huì)產(chǎn)生很多Sonarqube項(xiàng)目)

例如: 服務(wù)名稱是 demo-abcd-service

之前我們的做法是不區(qū)分分支,在掃描所有分支的時(shí)候都會(huì)指定同一個(gè)sonar項(xiàng)目。這就是導(dǎo)致SonarQube平臺(tái)此項(xiàng)目數(shù)據(jù)不穩(wěn)定的根本原因。

現(xiàn)在的做法是: 假如這個(gè)項(xiàng)目有F1,F(xiàn)2等特性分支,在每次對(duì)其中特性分支構(gòu)建掃描時(shí)會(huì)配置sonar掃描參數(shù)(projectName)為  “當(dāng)前的服務(wù)名稱_特性分支名稱”,這樣相當(dāng)于每個(gè)特性分支都對(duì)應(yīng)一個(gè)掃描項(xiàng)目,數(shù)據(jù)就不會(huì)出現(xiàn)問(wèn)題了。

雖然解決了數(shù)據(jù)不穩(wěn)定的問(wèn)題,但又間接的帶來(lái)了一些問(wèn)題。

  • 每個(gè)特性分支生成一個(gè)項(xiàng)目,假如特性分支被刪除呢?或者分支很多呢?

  • 對(duì)于SonarQube管理員來(lái)說(shuō)很難管理,增加了任務(wù)負(fù)擔(dān)。

總結(jié)一下如何解決問(wèn)題呢?

  • 從長(zhǎng)遠(yuǎn)角度來(lái)說(shuō)最直接的方式當(dāng)然是購(gòu)買開(kāi)發(fā)版本 。

  • 現(xiàn)在SonarQube已經(jīng)具有多分支插件了,親測(cè)可以使用。

  • 變更代碼掃描的模式,比如將每次特性分支掃描的數(shù)據(jù)關(guān)聯(lián)到提交的commit信息中。

總之,最簡(jiǎn)單的方式就是付費(fèi)購(gòu)買開(kāi)發(fā)版、企業(yè)版。小型團(tuán)隊(duì)也可以使用生成多項(xiàng)目的方式管理。

3 解決SonarQube掃描規(guī)則問(wèn)題

在搭建好SonarQube平臺(tái)后,已經(jīng)配置好了針對(duì)每種語(yǔ)言的"Sonar  Way"質(zhì)量配置。我們?cè)诖笠?guī)模使用中,對(duì)掃描Java項(xiàng)目的規(guī)則做了一些定制,有一些新增的規(guī)則還有一部分棄用的規(guī)則,總之大部分還都是默認(rèn)自帶的java規(guī)則,配置好規(guī)則后并設(shè)置為默認(rèn)的規(guī)則。其中有幾十個(gè)團(tuán)隊(duì)在用默認(rèn)的規(guī)則,后來(lái)個(gè)別團(tuán)隊(duì)因需求要使用新的JAVA項(xiàng)目質(zhì)量。如何為新建的項(xiàng)目自動(dòng)配置好對(duì)應(yīng)的質(zhì)量呢?

分析

  • SonarQube平臺(tái)中的項(xiàng)目不需要單獨(dú)的新建,而是通過(guò)Jenkins構(gòu)建過(guò)程中生成。

  • 當(dāng)我們需要為項(xiàng)目指定新的質(zhì)量配置的時(shí)候,通常在Sonar WebUi中進(jìn)行配置。

  • 無(wú)法通過(guò)"-Dsonar.xxxx"方式指定每次分支時(shí)使用的質(zhì)量名稱。

應(yīng)對(duì)

  • 由于SonarQube項(xiàng)目都是通過(guò)流水線掃描后生成的,于是在流水線中增加步驟。

  • 每次掃描之前先判斷項(xiàng)目是否存在,然后指定新的質(zhì)量,再執(zhí)行代碼掃描。

實(shí)施主要通過(guò)RESTAPI完成

  • 創(chuàng)建項(xiàng)目:api/projects/create

  • 更新質(zhì)量:api/qualityprofiles/add_project

  • 查找項(xiàng)目:api/projects/search

JenkinsFile(ShareLibrary)參考如下:

package com.devops  //Http req  使用Jenkins插件封裝的方法 哈哈哈 def HttpReq(reqType,reqUrl,reqBody){     result = httpRequest authentication: '我的憑據(jù)的ID',                 httpMode: reqType,                  contentType: "APPLICATION_JSON",                 consoleLogResponseBody: true,                 ignoreSslErrors: true,                  requestBody: reqBody,                 //responseHandle: 'NONE',                  url: reqUrl                 //quiet: true          return result }  //查找項(xiàng)目 def SearchProject(projectName){     apiUrl = "http://我的sonar服務(wù)器地址/api/projects/search?projects=${projectName}"     resultInfo = HttpReq("GET",apiUrl,'')      def result = readJSON text: """${resultInfo.content}"""          if (result["paging"]["total"] == 0 ){         return "false"     } else {         return result     } }  //創(chuàng)建項(xiàng)目 def CreateProject(projectName){     apiUrl = "http://我的sonar服務(wù)器地址/api/projects/create?name=${projectName}&project=${projectName}"     resultInfo = HttpReq("POST",apiUrl,'') }  //更新語(yǔ)言規(guī)則集 def UpdateQuality(language,qualityProfile,projectName){     apiUrl = "http://我的sonar服務(wù)器地址/api/qualityprofiles/add_project?language=${language}&qualityProfile=${qualityProfile}&project=${projectName}"     resultInfo = HttpReq("POST",apiUrl,'') }   //項(xiàng)目授權(quán) def ApplyTemplate(projectKey,templateName){     apiUrl = "http://我的sonar服務(wù)器地址/api/permissions/apply_template?projectKey=${projectName}&templateName=${templateName}"     resultInfo = HttpReq("POST",apiUrl,'') }

4 SonarQube項(xiàng)目授權(quán)問(wèn)題

我們?cè)谇懊娼鉀Q了SonarQube掃描前的一些問(wèn)題,現(xiàn)在開(kāi)始解決授權(quán)問(wèn)題。

Sonarqube的授權(quán)配置

  • 用戶首先登陸SonarQube平臺(tái)(我們做了GitlabSSO/LDAP集成)

  • 根據(jù)不同的業(yè)務(wù)組對(duì)應(yīng)創(chuàng)建一個(gè)group

  • 然后將用戶加入到對(duì)應(yīng)的group中

  • 根據(jù)業(yè)務(wù)的簡(jiǎn)稱創(chuàng)建對(duì)應(yīng)的權(quán)限模板

  • 將組和管理員加入權(quán)限模板中

  • 然后將該業(yè)務(wù)的項(xiàng)目批量應(yīng)用權(quán)限模板

親測(cè): 新生成的項(xiàng)目還需要再應(yīng)用權(quán)限模板后才能使對(duì)應(yīng)的項(xiàng)目組成員訪問(wèn)。

解決:在項(xiàng)目掃描后,調(diào)用接口對(duì)當(dāng)前項(xiàng)目應(yīng)用對(duì)應(yīng)的權(quán)限模板。

  • 項(xiàng)目授權(quán)(應(yīng)用權(quán)限模板):api/permissions/apply_template

到此,相信大家對(duì)“關(guān)于SonarQube社區(qū)版使用問(wèn)題有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI