如何为Azure DevOps Pull Request添加Sonar等代码质量指标装饰
解决Sonar社区版代码质量指标同步到Azure DevOps PR页面的方案
SonarQube社区版默认不提供PR装饰的官方功能,你可以通过在流水线中新增自定义步骤实现指标同步,具体操作流程如下:
1. 拉取Sonar分析结果
在流水线的Sonar分析任务执行完成后,新增脚本任务拉取所需指标:
- 调用Sonar Web API获取目标数据,你可以用
curl(Linux代理节点)或者PowerShell的Invoke-RestMethod(Windows代理节点)发起请求,请求地址格式为<你的Sonar服务地址>/api/measures/component?component=<你的Sonar项目Key>&metricKeys=code_smells,bugs,vulnerabilities,duplicated_lines_density,可根据需要调整metricKeys参数拉取指定指标。 - 提前将Sonar访问令牌存储到Azure DevOps流水线的秘密变量中,不要在脚本中明文填写。
- 解析接口返回的JSON结果,将需要展示的指标存储为流水线变量或者临时本地文件备用。
2. 组装PR展示内容
将已有的代码覆盖率数据、Sonar检出的code smell等指标整理为Markdown格式的展示内容:
- 可以用表格规整展示各类指标,异常指标可以用加粗高亮提示。
- 可按需附上对应问题在Sonar平台的查询入口,方便评审人员快速跳转查看详情。
3. 发布内容到PR页面
调用Azure DevOps内置的REST API将组装好的内容发布到PR评论区:
- 利用流水线内置的
System.AccessToken作为授权凭证,调用PR线程接口,地址格式为https://dev.azure.com/<你的组织名>/<你的项目名>/_apis/git/repositories/<你的仓库ID>/pullRequests/$(System.PullRequest.PullRequestId)/threads?api-version=7.1-preview.1 - 请求体中将组装好的Markdown内容填入
comments字段,设置status为active即可直接发布到PR的公开评论区。
4. 可选:配置指标门禁
如果你需要将Sonar核心指标作为PR合入的强制条件,可以额外调用PR状态接口,将指标校验结果同步到PR的状态栏,不符合要求时直接阻止PR合入。
注意:需要提前给流水线对应的构建服务账号开通「贡献到拉请求」的权限,否则调用API发布评论时会返回403错误;Sonar访问令牌仅需开通项目只读权限即可,不要配置更高权限。
内容的提问来源于stack exchange,提问作者Sam S
相关产品推荐
相关产品推荐

