一个简单的用于 Sonarqube 和 sonarcloud.io API 的 PHP 客户端

1.2.0 2019-07-10 19:26 UTC

README

Build Status Sonarcloud Status

PHP 客户端库,用于从 PHP 项目访问 Sonarqube API。该库与 sonarcloud.io 完全兼容,因此已针对 sonarcloud.io 组织进行了广泛的测试。

安装

通过 Composer

composer require forgeqc/sonarqube-api-client

通用 API 使用方法

列出 Sonarqube 实例的所有项目

getprojects() 函数返回一个包含 Sonarqube 实例所有项目的数组。以下示例检索来自 [https://sonarcloud.io](https://sonarcloud.io) 的所有项目。

require '../vendor/autoload.php';

use Forge\SonarqubeApiClient\HttpClient;
use Forge\SonarqubeApiClient\SonarqubeProject;
use Forge\SonarqubeApiClient\SonarqubeInstance;

$api = new HttpClient('https://sonarcloud.io/api/');

$instance = new SonarqubeInstance($api);
$projects = $instance->getProjects();

管理单个 Sonarqube 项目

SonarqubeProject 类允许创建新的 Sonarqube 项目或从现有 Sonarqube 项目提取元数据和度量。

创建 Sonarqube 项目

require '../vendor/autoload.php';

use Forge\SonarqubeApiClient\HttpClient;
use Forge\SonarqubeApiClient\SonarqubeProject;
use Forge\SonarqubeApiClient\SonarqubeInstance;

$api = new HttpClient('https://sonarcloud.io/api/', '<secret token>');

$projectKey = 'testProjectFromApi';
$project = new SonarqubeProject($api, $projectKey);

if (!$project->exists()) {
  $project->create('Test Project From Api', 'public', 'testapi');
}

获取项目度量

获取默认度量列表。如果没有参数,函数返回以下指标键的度量:alert_status,bugs,reliability_rating,vulnerabilities,security_rating,code_smells,sqale_rating,duplicated_lines_density,coverage,ncloc,ncloc_language_distribution,reliability_remediation_effort,security_remediation_effort。指标键列表与 Sonarqube 显示项目仪表板的指标键列表相匹配。

$measures = $project->getMeasures();
$measuresHistory = $project->getMeasuresHistory('2019-06-45');

添加所需指标键的列表以自定义函数返回的度量。

$measures = $project->getMeasures('sqale_index');
$measuresHistory = $project->getMeasuresHistory('2019-06-45', 'sqale_index');

获取多个 Sonarqube 项目的度量

SonarqubeInstance::getMultipleProjectsMeasures 函数检索多个 Sonarqube 项目的度量。项目最大数量为 100。

添加所需指标键的列表以自定义函数返回的度量。

$api = new HttpClient('https://sonarcloud.io/api/');
$instance = new SonarqubeInstance($api);

$measures = $instance->getMultipleProjectsMeasures('Board-Voting,paysuper_paysuper-currencies');

$measures =  $instance->getMultipleProjectsMeasures('Board-Voting,paysuper_paysuper-currencies','sqale_index');

聚合多个 Sonarqube 项目的度量

SonarqubeInstance::aggregateMultipleProjectsMeasures 函数聚合多个 Sonarqube 项目的度量。此函数对于项目组合的度量聚合非常有用。项目最大数量为 100。

函数算法实现了 Sonarqube Enterprise 项目组合度量聚合逻辑,该逻辑在 (https://docs.sonarqube.org/latest/user-guide/portfolios/) 上描述。

$api = new HttpClient('https://sonarcloud.io/api/');
$instance = new SonarqubeInstance($api);

$measures = $instance->aggregateMultipleProjectsMeasures('Board-Voting,paysuper_paysuper-currencies');

管理用户、组和权限

创建或停用 Sonarqube 用户

$api = new HttpClient('https://sonarcloud.io/api/', $sonar_api_key);
$instance = new SonarqubeInstance($api);

//Test if user exists
if($instance->userExists('joe')) {
  //Update user data
  $instance->updateUser('jdoe', 'John DOE', 'john.doe@contoso.com');
}
else {
  //Create user or activate existing deactivated user
  $instance->createUser('jdoe', 'John DOE', 'john.doe@contoso.com');
}

//Deactivate user
 $instance->deactivateUser('jdoe');

创建或删除 Sonarqube 组

$api = new HttpClient('https://sonarcloud.io/api/', $sonar_api_key);
$sonarcloudOrganization = 'testapi';
$instance = new SonarqubeInstance($api, $sonarcloudOrganization);

//Group creation
$group = $instance->createGroup('TestGroup');

//Group deletion
$result = $instance->deleteGroup('TestGroup');

授予用户或组的项目权限。库提供了添加或删除项目权限的函数。codevieweruser 权限不能从公共项目中删除。函数返回 true 如果权限成功授予或删除。

$api = new HttpClient('https://sonarcloud.io/api/', $sonar_api_key);
$sonarcloudOrganization = 'testapi';

//Grant permission on testProjectFromApi project in 'testapi' sonarcloud.io organization
$projectKey = 'testProjectFromApi';
$project = new SonarqubeProject($api, $projectKey, $sonarcloudOrganization);

//Grant project permissions to a group
$testGroup = 'TestGroupPermissions';

$project->addGroupPermission($testGroup, 'admin');
$project->addGroupPermission($testGroup, 'codeviewer');
$project->addGroupPermission($testGroup, 'issueadmin');
$project->addGroupPermission($testGroup, 'securityhotspotadmin');
$project->addGroupPermission($testGroup, 'scan');
$project->addGroupPermission($testGroup, 'user');

$project->removeGroupPermission($testGroup, 'admin');
$project->removeGroupPermission($testGroup, 'issueadmin');
$project->removeGroupPermission($testGroup, 'securityhotspotadmin');
$project->removeGroupPermission($testGroup, 'scan');

//Grant project permissions to a user
$project->addUserPermission($testUser, 'admin');
$project->addUserPermission($testUser, 'codeviewer')
$project->addUserPermission($testUser, 'issueadmin');
$project->addUserPermission($testUser, 'securityhotspotadmin');
$project->addUserPermission($testUser, 'scan');
$project->addUserPermission($testUser, 'user');

$project->removeUserPermission($testUser, 'admin');
$project->removeUserPermission($testUser, 'issueadmin');
$project->removeUserPermission($testUser, 'securityhotspotadmin');
$project->removeUserPermission($testUser, 'scan');

贡献

该项目目前正在开发中。请随意复制此项目,应用修改并发送拉取请求。SonarQube 官方 API 不是此项目的一部分。