如何通过 API 从 SonarQube 项目中检索分支信息?

How to retrieve branch information by the API from a SonarQube project?

我正在使用 SonarQube 分支插件 (1.0 (build 507)) 并想从分支检索信息。我的 SonarQube 版本是 6.7。

SonarQube项目(PC_civil-affairs)有三个分支,master(主要),develop,feature_branch。这些都是长寿的分支。

接下来的调用从 master 分支检索信息 https://website.com/sonar/api/project_analyses/search?project=PC_civil-affairs https://website.com/sonar/api/settings/values?component=PC_civil-affairs&keys=sonar.leak.period https://website.com/sonar/api/qualitygates/project_status?projectKey=PC_civil-affairs

我应该如何调整上述调用以从开发和 feature_branch 检索相同的信息?

我在 SonarQube 7.1 上测试了以下解决方案。

project_analyses/search

您必须添加 branch 参数。示例:

https://website.com/sonar/api/project_analyses/search?project=PC_civil-affairs&branch=xyz

settings/values

所有分支机构的设置都相同,因此您的 URL 是正确的:

https://website.com/sonar/api/settings/values?component=PC_civil-affairs&keys=sonar.leak.period

qualitygates/project_status

遗憾的是,我没有找到获得质量门状态的任何方法。

存在 branches list 端点,每个分支都有质量门状态: https://website.com/sonar/api/project_branches/list?project=$项目密钥。它给出了一个响应示例,例如:

  {
    "branches": [
    {
      "name": "feature/foo",
      "isMain": false,
      "type": "SHORT",
      "mergeBranch": "master",
      "status": {
        "qualityGateStatus": "OK",
        "bugs": 1,
        "vulnerabilities": 0,
        "codeSmells": 0
      },
      "analysisDate": "2017-04-03T13:37:00+0100"
    },
    {
      "name": "master",
      "isMain": true,
      "type": "LONG",
      "status": {
        "qualityGateStatus": "ERROR"
      },
      "analysisDate": "2017-04-01T01:15:42+0100"
    }
  ]
}

如果您正在寻找特定分支的状态,您可以将其通过管道传输到类似 jq 的工具中,并使用类似以下内容进行过滤:

| jq '.branches | .[] | {name: .name, status: .status.qualityGateStatus} | select(.name=="master") | .status'

这应该 return "ERROR" 主分支状态。

qualitygates/project_status

当您使用以下 URL 将 MyBranch 替换为您的分支机构名称时,您可以获得分支机构的质量门状态:

https://website.com/sonar/api/qualitygates/project_status?branch=MyBranch&projectKey=PC_civil-affairs