K8S - 将 SonarQube 集成到KubeSphere流水线

SonarQube 是一种主流的代码质量持续检测工具。您可以将其用于代码库的静态和动态分析。SonarQube 集成到 KubeSphere 流水线后,如果在运行的流水线中检测到问题,您可以直接在仪表板上查看常见代码问题,例如 Bug 和漏洞。

准备工作

您需要先开启KubeSphere的DevOps系统。

  1. 以 admin 身份登录控制台,点击左上角的平台管理,选择集群管理。
  2. 点击自定义资源 CRD,在搜索栏中输入 clusterconfiguration,点击搜索结果查看其详细页面。
  3. 在资源列表中,点击 ks-installer 右侧的按钮,选择编辑配置文件。
  4. 在该 YAML 文件中,搜寻到 devops,将 enabled 的 false 改为 true。完成后,点击右下角的更新,保存配置。
devops:
  enabled: true # 将“false”更改为“true”。
  1. 您可以使用 Web Kubectl 工具执行以下命令来检查安装过程:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f

安装 SonarQube 服务器

要将 SonarQube 集成到您的流水线,必须先安装 SonarQube 服务器。

  1. 请先安装 Helm,以便后续使用该工具安装 SonarQube。例如,运行以下命令安装 Helm 3:
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

查看 Helm 版本。

helm version
   
version.BuildInfo{Version:"v3.4.1", GitCommit:"c4e74854886b2efe3321e185578e6db9be0a6e29", GitTreeState:"clean", GoVersion:"go1.14.11"}
  1. 执行以下命令安装 SonarQube 服务器。
helm upgrade --install sonarqube sonarqube --repo https://charts.kubesphere.io/main -n kubesphere-devops-system  --create-namespace --set service.type=NodePort
  1. 您会获取以下提示内容:
    在这里插入图片描述

获取 SonarQube 控制台地址

  1. 执行以下命令以获取 SonarQube NodePort。
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

  1. 您可以获得如下输出(本示例中端口号为 31377,可能与您的端口号不同):
http://10.77.1.201:31377

配置 SonarQube 服务器

步骤 1:访问 SonarQube 控制台

  1. 执行以下命令查看 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

  1. 在浏览器中访问 SonarQube 控制台 http://{KaTeX parse error: Expected 'EOF', got '}' at position 8: Node IP}̲:{NodePort},您可以看到其主页,如下所示:
    K8S - 将 SonarQube 集成到KubeSphere流水线_第1张图片

  2. 点击右上角的 Log in,然后使用默认帐户 admin/admin 登录。
    K8S - 将 SonarQube 集成到KubeSphere流水线_第2张图片

步骤 2:创建 SonarQube 管理员令牌 (Token)

  1. 点击右上角字母 A,然后从菜单中选择 My Account 以转到 Profile 页面。
    K8S - 将 SonarQube 集成到KubeSphere流水线_第3张图片

  2. 点击 Security 并输入令牌名称,例如 kubesphere。
    K8S - 将 SonarQube 集成到KubeSphere流水线_第4张图片

  3. 点击 Generate 并复制此令牌。
    K8S - 将 SonarQube 集成到KubeSphere流水线_第5张图片

步骤 3:创建 Webhook 服务器

  1. 执行以下命令获取 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/

  1. 预期输出结果:
http://10.77.1.201:30180/sonarqube-webhook/
  1. 依次点击 Administration、Configuration 和 Webhooks 创建一个 Webhook。
    K8S - 将 SonarQube 集成到KubeSphere流水线_第6张图片

  2. 点击 Create。
    K8S - 将 SonarQube 集成到KubeSphere流水线_第7张图片

  3. 在弹出对话框中输入 Name 和 Jenkins Console URL(即 SonarQube Webhook 地址)。点击 Create 完成操作。
    K8S - 将 SonarQube 集成到KubeSphere流水线_第8张图片

步骤 4:将 SonarQube 配置添加到 ks-installer

  1. 执行以下命令编辑 ks-installer。
kubectl edit cc -n kubesphere-system ks-installer
  1. 搜寻至 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.

  1. 完成操作后保存此文件。

步骤 5:将 SonarQube 服务器添加至 Jenkins

  1. 执行以下命令获取 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

  1. 您可以获得以下输出,获取 Jenkins 的端口号。
http://10.77.1.201:30180
  1. 请使用地址 http://{$Public IP}:30180 访问 Jenkins。安装 KubeSphere 时,默认情况下也会安装 Jenkins 仪表板。此外,Jenkins 还配置有 KubeSphere LDAP,这意味着您可以直接使用 KubeSphere 帐户(例如 admin/P@88w0rd)登录 Jenkins。有关配置 Jenkins 的更多信息,请参见 Jenkins 系统设置。
    K8S - 将 SonarQube 集成到KubeSphere流水线_第9张图片

  2. 点击左侧的系统管理。

  3. 向下翻页找到并点击系统配置。

  4. 搜寻到 SonarQube servers,然后点击 Add SonarQube。
    K8S - 将 SonarQube 集成到KubeSphere流水线_第10张图片

  5. 输入 Name 和 Server URL (http://{KaTeX parse error: Expected 'EOF', got '}' at position 8: Node IP}̲:{NodePort})。点击添加,选择 Jenkins,然后在弹出对话框中用 SonarQube 管理员令牌创建凭证(如下方第二张截图所示)。创建凭证后,从 Server authentication token 旁边的下拉列表中选择该凭证。点击应用完成操作。

    K8S - 将 SonarQube 集成到KubeSphere流水线_第11张图片

步骤 6:将 sonarqubeURL 添加到 KubeSphere 控制台

您需要指定 sonarqubeURL,以便可以直接从 KubeSphere 控制台访问 SonarQube。

  1. 执行以下命令:
kubectl edit  cm -n kubesphere-system  ks-console-config
  1. 搜寻到 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.
  1. 保存该文件。

步骤 7:重启服务

执行以下命令。

kubectl -n kubesphere-system rollout restart deploy ks-apiserver

kubectl -n kubesphere-system rollout restart deploy ks-console

你可能感兴趣的:(k8s,kubesphere)