forgeqc /
一个简单的用于 Sonarqube 和 sonarcloud.io API 的 PHP 客户端
Requires
- doctrine/cache: ^1.6
- guzzlehttp/guzzle: ^6.3
- kevinrob/guzzle-cache-middleware: ^3.2
Requires (Dev)
- phpunit/phpunit: ^8.1
- vlucas/phpdotenv: ^3.4
This package is auto-updated.
Last update: 2024-09-19 22:25:12 UTC
README
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');
授予用户或组的项目权限。库提供了添加或删除项目权限的函数。codeviewer 和 user 权限不能从公共项目中删除。函数返回 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 不是此项目的一部分。