sonarqube基礎:掃描規則:2: Quality Profile的裁剪
關於Sonarqube的掃描規則,在上篇文章中介紹了Java的Sonar Way的詳細資訊,這篇文章來介紹一下如何在Sonar way的基礎上生成定製的Quality Profile以及使用相關的Restapi進行生成。
Quality Profile
從SonarQube中使用back up按鈕匯出來的規則列表的Quality Profile檔案,在對其格式進行整理之後,大體如下所示:
<?xml version='1.0' encoding='UTF-8'?> <profile> <name>Sonar way</name> <language>java</language> <rules> <rule> <repositoryKey>common-java</repositoryKey> <key>DuplicatedBlocks</key> <priority>MAJOR</priority> <parameters/> </rule> ...省略 </rules> </profile>
生成定製的Profile
方法1: 使用頁面進行操作
這裡使用匯出來的Sonarway的檔案作為輸入,只修改Profile的name欄位資訊,修改前
<name>Sonar way</name>
將其進行修改,修改為如下內容
<name>Sonar java profile : all rules by UI operation</name>
生成Profile的方法:
Quality Profiles -> Create -> Restore Profiles
單擊Restore,即可生成了修改了名稱的Java的Sonar的新的Profile
方法2: 使用RestApi生成Profile
事前準備
準備如下定製Profile的xml檔案,包含3條規則,1個bug,2個Code Smell
liumiaocn:Desktop liumiao$ cat sonar-java-test-profile.xml <?xml version='1.0' encoding='UTF-8'?> <profile> <name>sonar-java-test-profile</name> <language>java</language> <rules> <rule> <repositoryKey>common-java</repositoryKey> <key>DuplicatedBlocks</key> <priority>MAJOR</priority> <parameters/> </rule> <rule> <repositoryKey>common-java</repositoryKey> <key>InsufficientBranchCoverage</key> <priority>MAJOR</priority> <parameters> <parameter> <key>minimumBranchCoverageRatio</key> <value>65.0</value> </parameter> </parameters> </rule> <rule> <repositoryKey>squid</repositoryKey> <key>AssignmentInSubExpressionCheck</key> <priority>MAJOR</priority> <parameters/> </rule> </rules> </profile>liumiaocn:Desktop liumiao$
執行命令
curl -X POST -uadmin:admin http://localhost:32003/api/qualityprofiles/restore --form [email protected]
執行命令說明:
- -u指定使用者名稱和密碼
- POST方式使用/api/qualityprofiles/restore
- backup為必須指定內容
- 生成的profile名稱為xml中設定的內容
- 如果當前profile已經存在則會覆蓋生成
執行日誌與結果確認
為了結果容易確認,這裡傳給了jq,沒有安裝的可以忽略
liumiaocn:Desktop liumiao$ curl -X POST -uadmin:admin http://localhost:32003/api/qualityprofiles/restore --form [email protected] |jq .
...省略
{
"profile": {
"key": "java-sonar-java-test-profile-83122",
"name": "sonar-java-test-profile",
"language": "java",
"isDefault": false,
"isInherited": false,
"languageName": "Java"
},
"ruleSuccesses": 3,
"ruleFailures": 0
}
liumiaocn:Desktop liumiao$
從這裡可以看到,生成了language為Java的name名稱為sonar-java-test-profile的Quality Profile,其中成功匯入規則(ruleSuccesses)3條。
使用restapi查詢profile資訊
可以查詢相關profile的資訊,比如C#語言相關的profile資訊
liumiaocn:Desktop liumiao$ curl http://localhost:32003/api/qualityprofiles/search?language='cs' |jq .
...省略
{
"profiles": [
{
"key": "cs-sonar-way-44636",
"name": "Sonar way",
"language": "cs",
"languageName": "C#",
"isInherited": false,
"isDefault": true,
"activeRuleCount": 101,
"rulesUpdatedAt": "2018-08-25T01:12:03+0000"
}
]
}
liumiaocn:Desktop liumiao$
刪除profile
可以用POST的方式呼叫/api/qualityprofiles/delete 進行刪除,但是注意由於在sonar中使用profileKey來唯一確定,為了避免誤刪其他語言中同名的profile,在使用profileName進行刪除的時候需要結合使用language,不然會得到如下的提示:
liumiaocn:Desktop liumiao$ curl -X POST http://localhost:32003/api/qualityprofiles/delete -d "profileName=sonar-java-test-profile" -uadmin:admin
{"errors":[{"msg":"Either profileKey or profileName + language must be set"}]}liumiaocn:Desktop liumiao$
liumiaocn:Desktop liumiao$
加上language即可刪除,當然也可以只指定profileKey來進行刪除
liumiaocn:Desktop liumiao$ curl -X POST http://localhost:32003/api/qualityprofiles/delete -d "profileName=sonar-java-test-profile&language=java" -uadmin:admin
liumiaocn:Desktop liumiao$
總結
使用restapi方式或者直接在頁面進行操作,可以生成定製的Quality Profile,可以根據專案具體情況對Quality Profile進行裁剪和載入使用。