1. SonarQube 是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味。它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查。
2. SonarQube 分为四个模块:SonarQube Server;SonarQube Database ;SonarQube Plugins;分析项目的工具 scanner。
3. SonarQube 总览如图:
4. SonarQube 安装硬件需要满足:SonarQube 服务小型实例需要 2GB RAM;SonarQube 不能在 32-bit 系统下安装。
5. 两个比较重要的能力:
自定义 Rules;设置 Quality Gates,并能通过官方的 API issues 和 Measures History 获取到本次检查结果以及历史数据的统计,便于完成用户自定义代码质量及审核规则定义。
GET http://sonar-host:9000/api/issues/search?componentKeys=project-nanme-ee&types=BUG,CODE_SMELL,VULNERABILITY
{
"total": 63,
"p": 10,
"ps": 1,
"paging": {
"pageIndex": 10,
"pageSize": 1,
"total": 63
},
"issues": [
{
"key": "AWsBeHwrsdaCQfnpVlqY",
"rule": "javascript:S3531",
"severity": "MAJOR",
"component": "project-nanme-ee:utils/auth.js",
"project": "project-nanme-ee",
"line": 56,
"hash": "ba8f680c2e6e67a758609323f78d6e8e",
"textRange": {
"startLine": 56,
"endLine": 56,
"startOffset": 0,
"endOffset": 38
},
"flows": [],
"status": "OPEN",
"message": "Add a \"yield\" statement to this generator.",
"effort": "5min",
"debt": "5min",
"author": "lizhen@tenxcloud.com",
"tags": [
"api-design",
"es2015"
],
"creationDate": "2018-07-05T09:56:10+0000",
"updateDate": "2019-05-29T02:35:37+0000",
"type": "BUG",
"organization": "default-organization"
}
],
"components": [
{
"organization": "default-organization",
"key": "project-nanme-ee",
"uuid": "AWsBeGQu5qn0Cgv7nKi7",
"enabled": true,
"qualifier": "TRK",
"name": "project",
"longName": "project"
},
{
"organization": "default-organization",
"key": "project-nanme-ee:utils/auth.js",
"uuid": "AWsBeG-SsdaCQfnpVlWw",
"enabled": true,
"qualifier": "FIL",
"name": "auth.js",
"longName": "utils/auth.js",
"path": "utils/auth.js"
}
]
}
GET http://localhost:9000/api/measures/search_history?component=project-nanme-ee&metrics=bugs%2Ccode_smells%2Cvulnerabilities%2Creliability_rating%2Csecurity_rating%2Csqale_rating&ps=1000
{
"paging": {
"pageIndex": 1,
"pageSize": 1000,
"total": 4
},
"measures": [
{
"metric": "bugs",
"history": [
{
"date": "2019-05-29T02:35:37+0000",
"value": "63"
},
{
"date": "2019-05-29T03:18:38+0000",
"value": "63"
},
{
"date": "2019-05-29T03:42:29+0000",
"value": "63"
},
{
"date": "2019-05-29T04:07:34+0000",
"value": "63"
}
]
},
{
"metric": "code_smells",
"history": [
{
"date": "2019-05-29T02:35:37+0000",
"value": "1174"
},
{
"date": "2019-05-29T03:18:38+0000",
"value": "1174"
},
{
"date": "2019-05-29T03:42:29+0000",
"value": "1174"
},
{
"date": "2019-05-29T04:07:34+0000",
"value": "1174"
}
]
},
{
"metric": "reliability_rating",
"history": [
{
"date": "2019-05-29T02:35:37+0000",
"value": "5.0"
},
{
"date": "2019-05-29T03:18:38+0000",
"value": "5.0"
},
{
"date": "2019-05-29T03:42:29+0000",
"value": "5.0"
},
{
"date": "2019-05-29T04:07:34+0000",
"value": "5.0"
}
]
},
{
"metric": "security_rating",
"history": [
{
"date": "2019-05-29T02:35:37+0000",
"value": "4.0"
},
{
"date": "2019-05-29T03:18:38+0000",
"value": "4.0"
},
{
"date": "2019-05-29T03:42:29+0000",
"value": "4.0"
},
{
"date": "2019-05-29T04:07:34+0000",
"value": "4.0"
}
]
},
{
"metric": "sqale_rating",
"history": [
{
"date": "2019-05-29T02:35:37+0000",
"value": "1.0"
},
{
"date": "2019-05-29T03:18:38+0000",
"value": "1.0"
},
{
"date": "2019-05-29T03:42:29+0000",
"value": "1.0"
},
{
"date": "2019-05-29T04:07:34+0000",
"value": "1.0"
}
]
},
{
"metric": "vulnerabilities",
"history": [
{
"date": "2019-05-29T02:35:37+0000",
"value": "18"
},
{
"date": "2019-05-29T03:18:38+0000",
"value": "18"
},
{
"date": "2019-05-29T03:42:29+0000",
"value": "18"
},
{
"date": "2019-05-29T04:07:34+0000",
"value": "18"
}
]
}
]
}