将 SonarQube 集成到流水线
SonarQube 是一种流行的代码质量持续监测工具。 您可以将其用于代码库的静态和动态分析。将其集成到 KubeSphere 的流水线中后, 当 SonarQube 在运行的流水线检测到问题时,您可以直接在仪表盘上查看常见的代码问题,比如 bug 和漏洞。
本教程演示了如何将 SonarQube 集成到流水线中。 在使用 Jenkinsfile 创建流水线之前,请先参考以下步骤。
先决条件
安装 SonarQube 服务
- 如果尚未安装,请执行以下命令来安装 SonarQube 服务:
helm upgrade --install sonarqube sonarqube --repo https://charts.kubesphere.io/main -n kubesphere-devops-system --create-namespace --set service.type=NodePort
- 您将得到以下提示:
获取 SonarQube 控制台地址
- 执行以下命令以获取 SonarQube 控制台地址。
export NODE_PORT=$(kubectl get --namespace kubesphere-devops-system -o jsonpath="{.spec.ports[0].nodePort}" services sonarqube-sonarqube)
export NODE_IP=$(kubectl get nodes --namespace kubesphere-devops-system -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
- 您可以得到如下输出 (
31377
是此示例中的端口号,可能与您的端口号不同):
http://10.77.1.201:31377
配置 SonarQube 服务器
步骤 1: 访问 SonarQube 控制台
- 执行以下命令以查看 SonarQube 的状态。 请注意,只有在 SonarQube 启动并运行后才能访问 SonarQube 控制台。
$ kubectl get pod -n kubesphere-devops-system
NAME READY STATUS RESTARTS AGE
ks-jenkins-68b8949bb-7zwg4 1/1 Running 0 84m
s2ioperator-0 1/1 Running 1 84m
sonarqube-postgresql-0 1/1 Running 0 5m31s
sonarqube-sonarqube-bb595d88b-97594 1/1 Running 2 5m31s
uc-jenkins-update-center-8c898f44f-m8dz2 1/1 Running 0 85m
- 在浏览器中访问 SonarQube 控制台
http://10.77.1.201:31377
,您可以看到其主页,如下所示:
- 单击右上角的 Log in,然后使用默认帐户登陆
admin/admin
。
备注
您可能需要设置必要的端口转发规则并打开端口以访问安全组中的 SonarQube ,具体取决于实例的部署位置。
步骤 2: 创建 SonarQube 管理员 Token
- 单击右上角字母 A,然后从菜单中选择 My Account 以转到 Profile 页面。
- 单击 Security 并输入Token 名称,如 kubesphere。
- 单击 Generate 并复制 token。
警告
如提示所示,请确保您确实复制了 token,因为您将无法再次看到此 token。
步骤 3: 创建一个 SonarQube Webhook 服务
- 执行以下命令以获取 SonarQube Webhook 的地址。
export NODE_PORT=$(kubectl get --namespace kubesphere-devops-system -o jsonpath="{.spec.ports[0].nodePort}" services ks-jenkins)
export NODE_IP=$(kubectl get nodes --namespace kubesphere-devops-system -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT/sonarqube-webhook/
- 预期的输出结果:
http://10.77.1.201:30180/sonarqube-webhook/
- 依次单击 Administration, Configuration 和 Webhooks 创建一个 webhook。
- 点击 Create。
- 在出现的对话框中输入Name 和 Jenkins Console URL(即SonarQube Webhook地址)。 单击 Create 完成。
步骤 4: 将 SonarQube 配置添加到 ks-installer
- 执行以下命令编辑
ks-installer
。
kubectl edit cc -n kubesphere-system ks-installer
- 导航至
devops
。 添加字段sonarqube
并在其下指定externalSonarUrl
和externalSonarToken
。
devops:
enabled: true
jenkinsJavaOpts_MaxRAM: 2g
jenkinsJavaOpts_Xms: 512m
jenkinsJavaOpts_Xmx: 512m
jenkinsMemoryLim: 2Gi
jenkinsMemoryReq: 1500Mi
jenkinsVolumeSize: 8Gi
sonarqube: # Add this field manually.
externalSonarUrl: http://10.77.1.201:31377 # The SonarQube IP address.
externalSonarToken: 00ee4c512fc987d3ec3251fdd7493193cdd3b91d # The SonarQube admin token created above.
- 完成后保存文件。
步骤 5: 将 SonarQube Server 添加到 Jenkins
- 执行以下命令获取 Jenkins 的地址。
export NODE_PORT=$(kubectl get --namespace kubesphere-devops-system -o jsonpath="{.spec.ports[0].nodePort}" services ks-jenkins)
export NODE_IP=$(kubectl get nodes --namespace kubesphere-devops-system -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
- 您可以得到以下输出,获取您 Jenkins 的端口号。
http://10.77.1.201:30180
- 使用地址
http://10.77.1.201:30180
访问 Jenkins。安装 KubeSphere 时,默认情况下也会安装 Jenkins 仪表板。 Jenkins 配置了KubeSphere LDAP,这意味着您可以直接使用 KubeSphere 帐户(例如 admin/P@88w0rd)登录 Jenkins。 有关配置 Jenkins 的更多信息,请参阅 Jenkins 系统设置。
备注
您可能需要设置必要的端口转发规则并打开端口 30180
才能访问安全组中的 Jenkins,具体取决于您的实例部署的位置。
- 单击左侧的 Manage Jenkins。
- 向下翻页找到并单击 Configure System。
- 导航到 SonarQube servers,然后单击 Add SonarQube。
- 输入 Name,Server URL (
http://10.77.1.201:31377
)和 Server authentication token(SonarQube 管理管理员 token)。 单击Apply完成。
步骤 6: 将 sonarqubeUrl 添加到 KubeSphere 控制台
您需要指定 sonarqubeURL
,以便可以直接从 KubeSphere 控制台访问 SonarQube。
- 执行以下命令:
kubectl edit cm -n kubesphere-system ks-console-config
- 导航到
client
,添加devops
字段,填写sonarqubeURL
的值。
client:
version:
kubesphere: v3.0.0
kubernetes: v1.17.9
openpitrix: v0.3.5
enableKubeConfig: true
devops: # Add this field manually.
sonarqubeURL: http://10.77.1.201:31377 # The SonarQube IP address.
- 保存文件。
步骤 7: 重新启动服务使所有功能生效
执行以下命令:
kubectl -n kubesphere-system rollout restart deploy ks-apiserver
kubectl -n kubesphere-system rollout restart deploy ks-console
为新项目创建 SonarQube Token
您需要一个 SonarQube Token,以便您的流水线可以在运行时与 SonarQube 通信。
- 在 SonarQube 控制台上,单击 Create new project。
- 输入项目密钥,例如
java-demo
,然后单击 Set Up。
- 输入项目名称,例如
java-sample
,然后单击 Generate。
- 创建令牌后,单击 Continue。
- 分别选择 Java 和 Maven 。 复制下图中的绿色框中的序列号,如果要在流水线中使用,则需要在凭据中添加此序列号。
在 KubeSphere 控制台查看结果
使用图形编辑面板创建流水线或使用 Jenkinsfile 创建流水线之后,您可以查看代码质量分析的结果。 如果 SonarQube 成功运行,您可能会看到以下图片所示结果。
当前内容版权归 KubeSphere 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 KubeSphere .