快速开始

本文档将帮助您快速了解如何创建一个 SonarQube connector,以连接到 SonarQube 实例并安全地执行代码质量分析,而无需直接处理认证令牌。

我们将创建一个 SonarQube connector,并使用它执行 sonar-scanner 进行代码分析,而无需在客户端直接处理凭据。

预计阅读时间

15 分钟

前提条件

  • 已安装 Connectors 系统(Operator、ConnectorsCore 和 ConnectorsSonarQube 组件)的 Kubernetes 集群。有关安装这些组件的详细信息,请参阅安装指南
  • SonarQube 实例地址(SonarQube 服务器)和认证令牌
  • 基本的 Kubernetes 和 SonarQube 知识
  • 一个待分析的项目(源代码)

流程概览

步骤操作说明
1创建 Namespace为演示设置专用的命名空间
2配置 SonarQube 令牌和 Connector创建认证 Secret 和 SonarQube connector 资源
3创建执行 Sonar Scanner 的 Job创建一个通过 connector 执行代码分析的 Job

操作步骤

步骤 1:创建 Namespace

为本次演示创建专用的命名空间:

kubectl create ns connectors-sonarqube-demo

步骤 2:创建 SonarQube 令牌和 Connector

创建包含 SonarQube 认证令牌的 Secret 和 SonarQube connector 资源。

有关创建和配置 connector 的详细信息,请参阅Connectors 快速开始指南

cat <<EOF | kubectl apply -n connectors-sonarqube-demo -f -
kind: Secret
apiVersion: v1
metadata:
  name: sonarqube-token-secret
type: connectors.cpaas.io/bearer-token
stringData:
  token: your-sonarqube-token # 替换为您的 SonarQube 用户令牌或项目分析令牌
---
apiVersion: connectors.alauda.io/v1alpha1
kind: Connector
metadata:
  name: sonarqube-connector
spec:
  connectorClassName: sonarqube
  address: https://sonarqube.example.com # 替换为您的 SonarQube 服务器地址(例如 https://sonarqube.example.com)
  auth:
    name: tokenAuth
    secretRef:
      name: sonarqube-token-secret
EOF

确认 connector 处于 “Ready” 状态:

kubectl get connector sonarqube-connector -n connectors-sonarqube-demo

输出应显示:

NAME                   CLASS       ADDRESS                    READY   REASON   AGE
sonarqube-connector    sonarqube   https://sonarqube.example.com      True             10s

步骤 3:创建执行代码分析的 Job

创建一个 Kubernetes Job,使用该 connector 执行 SonarQube 扫描:

cat <<'EOF' | kubectl apply -n connectors-sonarqube-demo -f -
apiVersion: batch/v1
kind: Job
metadata:
  name: sonar-scanner-job
spec:
  backoffLimit: 0
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: sonar-scanner
          image: sonarsource/sonar-scanner-cli:latest
          command:
            - sh
            - -c
            - |
              # 克隆您的项目仓库(请替换为您的仓库)
              # 本演示将创建一个简单的项目结构
              mkdir -p /src/myproject
              cd /src/myproject
              
              # 创建一个简单的源文件用于分析
              cat > hello.js <<'EOJS'
              function hello(name) {
                  console.log("Hello, " + name);
              }
              hello("World");
              EOJS
              
              # 创建 sonar-project.properties
              cat > sonar-project.properties <<'EOPROPS'
              sonar.projectKey=my-project-key
              sonar.sources=.
              EOPROPS
              
              # 如果您的 SonarQube 服务器或代理使用私有 CA,请导入其证书;
              # 对于公开信任的证书,此步骤不需要,且文件可能不存在。
              if [ -f /scanner-config/context.proxy.caCert ]; then
                  keytool -importcert -noprompt \
                      -trustcacerts \
                      -keystore "$JAVA_HOME/lib/security/cacerts" \
                      -storepass changeit \
                      -alias corp-ca \
                      -file /scanner-config/context.proxy.caCert
              fi

              # 合并 connector 配置
              cat /scanner-config/sonar-project.properties >> sonar-project.properties

              # 使用 connector 配置执行 sonar-scanner
              sonar-scanner
          volumeMounts:
            - name: scanner-config
              mountPath: /scanner-config/
      volumes:
        - name: scanner-config
          csi:
            driver: connectors.cpaas.io
            volumeAttributes:
              connectorName: sonarqube-connector
              connectorNamespace: connectors-sonarqube-demo
              configuration.names: "sonar-scanner"
EOF
TIP

该 connector 通过 CSI 挂载了一个包含扫描器配置和代理配置的 sonar-project.properties 文件。配置内容包括:

  • sonar.host.url:SonarQube 服务器地址
  • sonar.scanner.proxyHost:代理主机名,用于安全访问
  • sonar.scanner.proxyPort:代理端口
  • sonar.scanner.proxyUser:代理认证用户名
  • sonar.scanner.proxyPassword:代理认证密码(令牌)

如果您的 sonar-project.properties 文件中已包含 sonar.scanner.proxy*sonar.host.url 属性,请删除它们以避免与 connector 提供的配置冲突。

验证 Job 执行情况:

kubectl get job sonar-scanner-job -n connectors-sonarqube-demo
kubectl logs job/sonar-scanner-job -n connectors-sonarqube-demo

输出应显示分析成功结果:

INFO: Scanner configuration file: /scanner-config/sonar-project.properties
INFO: Project root configuration file: /src/myproject/sonar-project.properties
INFO: Analyzing on SonarQube...
INFO: ANALYSIS SUCCESSFUL

清理

完成演示后,清理相关资源:

kubectl delete ns connectors-sonarqube-demo

后续步骤