SonarQube Connector
SonarQube Connector 是一个用于连接任意 SonarQube 实例的连接器。
您可以使用 SonarQube Connector 在 CI/CD 流水线中安全访问 SonarQube,进行代码质量分析、安全扫描和质量门检查。
此外,该连接器支持跨命名空间集中管理 SonarQube 访问配置,避免在每个命名空间中重复配置 SonarQube 令牌。
目录
OverviewIntegration RequirementsCreating a Simple SonarQube ConnectorFields ReferenceCapabilities of SonarQube ConnectorAuthenticationCredential Permissions RequiredSonarQube Connector Proxy and Configuration with sonar-project.properties FileProxy Addresssonar-project.properties Configuration FileUsing sonar-project.properties in PodsHealth ChecksBest PracticesTroubleshootingOverview
本文档涵盖:
- 集成要求:目标 SonarQube 实例的前置条件
- 创建 SonarQube 连接器
- 高级功能:关于 SonarQube 连接器的代理能力和配置能力
Integration Requirements
SonarQube 前置条件
- SonarQube 实例必须能通过 HTTP/HTTPS 访问
- SonarQube 版本应支持连接器使用的 API 端点:
/api/authentication/validate- 用于认证验证/api/system/status- 用于存活检测
Creating a Simple SonarQube Connector
以下是为自托管 SonarQube 实例创建基础 SonarQube Connector 的示例:
Fields Reference
spec.connectorClassName:
sonarqube(常量),指定 SonarQube 集成的 ConnectorClass 名称。
spec.address:
目标 SonarQube 服务器地址,例如:
- 自托管:
https://sonarqube.example.com
spec.auth(可选):
指定 SonarQube 实例的认证方式。
-
spec.auth.name:SonarQube 连接器应为tokenAuth。 -
spec.auth.secretRef:指定包含 SonarQube 实例认证令牌的 Secret。该 Secret 必须创建在与连接器相同的命名空间中。
可选元数据字段:
-
cpaas.io/description:SonarQube 连接器的描述信息,例如:
Capabilities of SonarQube Connector
Authentication
SonarQube 连接器支持以下认证类型:
tokenAuth:基于令牌的认证,对应的 Secret 类型为connectors.cpaas.io/bearer-token
例如:
SonarQube 支持多种令牌类型:
- 用户令牌:个人用户的访问令牌
- 项目分析令牌:针对特定项目的令牌(推荐用于 CI/CD)
- 全局分析令牌:可用于分析任意项目的令牌(请谨慎使用)
生产环境建议使用权限最小的项目分析令牌。
有关完整状态信息,请参见 Connector Status Documentation。
Credential Permissions Required
配置凭证所需权限取决于您在 Pod/流水线中的使用场景。
例如:
- 代码分析:仅需对目标项目拥有“执行分析”权限的令牌。
- 质量门检查:需要对质量门拥有读取权限的令牌。
- 创建项目:分析时若需创建新项目,则需额外权限。
为安全起见,建议创建权限最小的令牌。如需额外权限,请创建权限更高的连接器,并通过命名空间隔离控制用户访问。
SonarQube Connector Proxy and Configuration with sonar-project.properties File
为了让客户端无需直接处理令牌即可访问 SonarQube,SonarQube 连接器提供了一个代理服务器,自动注入认证信息。
客户端可通过该代理服务器访问 SonarQube,无需在客户端配置令牌。
为简化使用,SonarQube 连接器提供了一个 sonar-project.properties 文件,可通过 CSI 挂载到 Pod 中。在 Pod 内执行扫描器操作时,代理服务会自动注入认证信息。
Proxy Address
创建连接器时,系统会自动为目标 SonarQube 实例创建代理服务。
代理端点记录在 status.proxy.httpAddress:
例如:
sonar-project.properties Configuration File
SonarQube 连接器提供如下配置:
sonar-project.properties:
- 提供一个
sonar-project.properties配置文件。该配置文件通过 CSI 挂载到 Pod 中,使得通过代理访问 SonarQube 时无需在客户端配置令牌。
配置文件示例(生成于 ConfigMap):
配置项说明:
sonar.host.url:实际 SonarQube 服务器地址sonar.scanner.proxyHost:代理主机名,用于安全访问sonar.scanner.proxyPort:代理端口(HTTP 为 80,HTTPS 为 443)sonar.scanner.proxyUser:编码后的连接器命名空间和名称sonar.scanner.proxyPassword:认证令牌(自动管理)
Sonar Scanner 8.0+ 默认禁用隧道代理认证。要启用认证代理支持,需在执行时通过 SONAR_SCANNER_OPTS 添加参数 -Djdk.http.auth.tunneling.disabledSchemes=。
Using sonar-project.properties in Pods
连接器通过 CSI 挂载包含代理配置的 sonar-project.properties 配置文件。
在 Pod 中使用示例:
扫描器将使用代理配置安全访问 SonarQube,无需直接访问令牌。
如果 SonarQube 实例使用 HTTPS,需将 CA 证书导入扫描器容器的 Java 信任库:
ca.cert 由连接器自动挂载,包含连接器代理服务器的 CA 证书。详情请参见 Connectors CSI Built-in Configurations。
Health Checks
SonarQube 连接器执行自动健康检查以验证连通性:
存活探针:
- 端点:
/api/system/status - 预期响应:HTTP 200,内容为
{"status": "UP"} - 目的:确保 SonarQube 实例正常运行
认证探针:
- 端点:
/api/authentication/validate - 预期响应:HTTP 200,内容为
{"valid": true} - 目的:验证提供的令牌有效
探针自动运行,结果反映在连接器的状态条件中。
Best Practices
- 命名空间隔离:为不同团队或项目创建独立连接器,利用命名空间隔离
- 令牌轮换:定期轮换认证令牌并更新 Secret
- 监控状态:监控连接器的 Ready 条件,及时发现认证或连通性问题
- 最小权限原则:仅授予特定用例所需的最小权限
Troubleshooting
若连接器显示非 Ready 状态:
- 检查认证:确认 Secret 中的令牌有效且未过期
- 验证连通性:确保 Kubernetes 集群能访问 SonarQube 实例
- 查看日志:检查 connector-proxy-service 日志获取详细错误信息
- 确认地址:确认
spec.address正确且包含协议(https://) - API 访问:确保 SonarQube 实例允许来自集群的 API 访问
更多故障排查指南,请参见 Troubleshooting Guide。