跳转至

sonarqube 插件

sonarqube 插件用于部署、管理 SonarQube 应用。

1. 前置要求

  • 有一个可用的 Kubernetes 集群,版本 1.19+。
  • 运行 Sonarqube 小规模服务至少需要 2GB 的 RAM 内存。
  • Sonarqube 官方镜像目前只支持 linux/amd64 架构。
  • 更多硬件配置可参考官方网站

2、部署架构

Sonarqube 内部会使用 Elastcisearch 来做搜索的索引,所以生产环境中需要通过挂载目录的方式持久化数据。 另外 Sonarqube 也需要一个外部数据库来存储数据,目前支持 PostgreSQLOracleMicrosoft SQL Sever,默认使用 PostgreSQL

3、开始部署

下文将介绍如何配置 sonarqube 插件,完成 Sonarqube 应用的部署。

3.1、默认配置

sonarqube 插件的配置项多数都有默认值,具体默认值信息如下表:

配置项 默认值 描述
chart.chartName sonarqube/sonarqube helm chart 包名称
chart.timeout 20m helm install 的超时时间
chart.upgradeCRDs true 是否更新 CRDs(如果有)
chart.releaseName sonarqube helm 发布名称
chart.wait true 是否等待部署完成
chart.namespace sonarqube 部署的命名空间
repo.url https://SonarSource.github.io/helm-chart-sonarqube helm 仓库地址
repo.name sonarqube helm 仓库名

因此完整的配置文件应该是这样:

YAML
tools:
# name of the tool
- name: sonarqube
  # id of the tool instance
  instanceID: default
  # format: name.instanceID; If specified, dtm will make sure the dependency is applied first before handling this tool.
  dependsOn: [ ]
  # options for the plugin
  options:
    # Helm repo information, this section is optional
    repo:
      # name of the Helm repo
      name: sonarqube
      # url of the Helm repo
      url: https://SonarSource.github.io/helm-chart-sonarqube
    # Helm chart information
    chart:
      # name of the chart
      chartName: sonarqube/sonarqube
      # release name of the chart
      releaseName: sonarqube
      # k8s namespace where SonarQube will be installed
      namespace: sonarqube
      # whether to wait for the release to be deployed or not
      wait: true
      # the time to wait for any individual Kubernetes operation (like Jobs for hooks). This defaults to 5m0s
      timeout: 20m
      # whether to perform a CRD upgrade during installation
      upgradeCRDs: true
      # custom configuration (Optional). You can refer to [SonarQube values.yaml](https://github.com/SonarSource/helm-chart-sonarqube/blob/master/charts/sonarqube/values.yaml)
      valuesYaml: |

3.2、测试环境

在测试环境中可以使用如下配置:

YAML
tools:
- name: harbor
  instanceID: default
  dependsOn: [ ]
  options:
    chart:
      valuesYaml: |
        prometheusExporter:
          enabled: false

在该配置下: - sonarqube 存储使用集群默认的 StorageClass。 - 默认使用 PostgreSQL 数据库来存储数据,使用集群默认的 StorageClass。 - 默认使用 NodePort 对外暴露 9000 端口。

3.3、生产环境

3.3.1、证书配置

  • 使用已有证书
  • 在集群中创建 Secret 保存证书信息。
  • valuesYaml 配置项中增加如下证书配置。
YAML
valuesYaml: |
  tls:
  # secret 名称
  - secretName: chart-example-tls
    hosts:
    # 证书对应的域名
    - chart-example.local

3.3.2、存储配置

  • 数据库配置(以 PostgreSQL 为例)
  • 在外部配置高可用数据库。
  • valuesYaml 配置项中增加配置:
YAML
valuesYaml: |
  postgresql:
    enabled: false
  jdbcOverwrite:
    enabled: true
    # PostgreSQL 数据库连接配置
    jdbcUrl: "jdbc:postgresql://myPostgress/myDatabase?socketTimeout=1500"
    jdbcUsername: "sonarUser"
    jdbcPassword: "sonarPass"
  • SonarQube 存储配置
  • 在集群中创建需要的 StorageClass
  • valuesYaml 配置项中增加配置:
YAML
valuesYaml: |
  persistence:
    enabled: true
    # 使用集群中创建的 storageclass 名称
    storageclass: prod-storageclass
    # 使用的磁盘大小
    size: 20g