我有一个 SonarQube 安装,它托管多个项目,由多个开发团队拥有。 CI/CD 系统已锁定。任何人都可以通过 GitOps 进行更改,但不能通过 UI 进行手动更改。
我们有一套分层的质量门,从最低质量(遗留项目,之前没有进行静态分析)到高质量(80% 代码、5% 重复、“A”可维护性等),这是企业范围内的。不过,我们只使用“声纳方式”质量配置文件。
这是唯一需要手动配置的部分。
有谁知道配置质量配置文件并在每个项目的基础上设置质量门的方法,最好是在项目的代码库中?
以前(当您针对构建说明、
CheckStyle
等每种语言都有一个扫描器时),您可以在代码库上有一个定义要应用的规则的 XML 文件。有谁知道是否有这样配置SQ的方法?
TBF,我可以接受手动设置的质量门,因为这只会改变项目的质量水平,而不是水平的实际设置。
一个更大的问题是,我们希望应用于配置文件的规则在项目之间有所不同。通过阅读文档,这意味着在 SonarQube 中为每个团队创建不同的配置文件,并在项目设置中设置用于项目的配置文件。显然,这意味着我们要么授予团队创建新配置文件的权限,并手动设置要在 SQ UI 中应用的规则,要么让这些团队向具有该访问权限的中央团队发出请求以进行这些更改。这是个问题。授予团队访问权限可能有效,但并不理想,因为不会对更改进行版本控制/审核。但是,我真的想避免由中央团队来管理配置文件,我们正在努力减少或消除交接,而不是添加新的交接。
例如,下面的摘录显示了这一过程的完成。
def qualityGateNameResult =
sh(returnStdout: true,
script: "curl -s -X GET -u ${sonarLogin}: \'${sonarHostUrl}/api//qualitygates/get_by_project?project=${sonarQubeProjectName}\'")
def qualityGateName = new JsonSlurper().parseText(qualityGateNameResult).qualityGate.name
qualityGateNameResult = null
if (qualityGateName != expectedQualityGateName) {
reportWrongSonarQubeQualityGateName(qualityGateName, expectedQualityGateName)
setQualityGateOnProject(sonarHostUrl, sonarLogin, sonarQubeProjectName, branchName, expectedQualityGateName)
}
def setQualityGateOnProject(String sonarHostUrl, String sonarLogin, String sonarQubeProjectName, String branchName, String expectedQualityGateName) {
// Now associate the project with the quality gate.
def selectQualityGateResult =
sh(returnStdout: true,
script: "curl -s -X POST -u ${sonarLogin}: \'${sonarHostUrl}/api/qualitygates/select?gateName=${URLEncoder.encode(expectedQualityGateName)}&projectKey=${sonarQubeProjectName}\'")
}