SonarQube 容器化部署

SonarQube是一个开源的代码质量管理系统,可用来快速定位代码中的Bug、漏洞以及不优雅的代码。它支持几乎所有的常见编程语言,例如Java、JavaScript、TypeScript、Kotlin、Ruby、Go, Scala等。并且还有插件机制,利用插件,可以让SonarQube更加强大,例如可以整合Findbugs、PMD、Checkstyle等。可以说,SonarQube是一款提升项目代码质量必备的根据。

系统需求:

  • k8s:1.13.5以上版本
  • pgsql 10及以上

docker-compose

官方提供了docker-compose的文件,把data、log、extensions目录挂载到了本机目录,以便管理文件以及查看日志。

#docker-compose.yml
version: "3"

services:
  sonarqube:
    image: sonarqube:lts-community #8.9.2
    depends_on:
      - db
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://pgsql/sonarqube?currentSchema=my_schema
      SONAR_JDBC_USERNAME: postgres
      SONAR_JDBC_PASSWORD: passwd
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
      #将data、log、extensions目录挂载到本机目录
    ports:
      - "9000:9000"
volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:

kubernetes-yaml

通过kompose将转换为k8s的yaml文件,需要创建三个pv以及pvc,用于挂载文件。

#sonarqube-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert -f docker-compose.yml
    kompose.version: 1.26.0 (40646f47)
  creationTimestamp: null
  labels:
    io.kompose.service: sonarqube
  name: sonarqube
spec:
  replicas: 1
  selector:
    matchLabels:
      io.kompose.service: sonarqube
  strategy:
    type: Recreate
  template:
    metadata:
      annotations:
        kompose.cmd: kompose convert -f docker-compose.yml
        kompose.version: 1.26.0 (40646f47)
      creationTimestamp: null
      labels:
        io.kompose.service: sonarqube
    spec:
      containers:
        - env:
            - name: SONAR_JDBC_PASSWORD
              value: passwd
            - name: SONAR_JDBC_URL
              value: jdbc:postgresql://pgsql/sonarqube?currentSchema=public
            - name: SONAR_JDBC_USERNAME
              value: postgres
          image: sonarqube:lts-community
          name: sonarqube
          ports:
            - containerPort: 9000
          resources: {}
          volumeMounts:
          #将data、log、extensions目录挂载到机器目录
            - mountPath: /opt/sonarqube/data
              name: sonarqube-data
            - mountPath: /opt/sonarqube/extensions
              name: sonarqube-extensions
            - mountPath: /opt/sonarqube/logs
              name: sonarqube-logs
      restartPolicy: Always
      volumes:
        - name: sonarqube-data
          persistentVolumeClaim:
            claimName: sonarqube-data
        - name: sonarqube-extensions
          persistentVolumeClaim:
            claimName: sonarqube-extensions
        - name: sonarqube-logs
          persistentVolumeClaim:
            claimName: sonarqube-logs
status: {}

#sonarqube-service.yaml


apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert -f docker-compose.yml
    kompose.version: 1.26.0 (40646f47)
  creationTimestamp: null
  labels:
    io.kompose.service: sonarqube
  name: sonarqube
spec:
  ports:
    - name: "9000"
      port: 9000
      targetPort: 9000
  selector:
    io.kompose.service: sonarqube
status:
  loadBalancer: {}


# sonarqube-extensions-persistentvolumeclaim.yaml


apiVersion: v1
kind: PersistentVolume
metadata:
  name: sonarqube-extensions
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: sonarqube-extensions
  nfs:
    path: /nfs/sonarqube-extensions
    server: nfs-server-ip
    # nfs路径



kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: sonarqube-extensions
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: sonarqube-extensions
# sonarqube-logs-persistentvolumeclaim.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: sonarqube-logs
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: sonarqube-logs
  nfs:
    path: /nfs/sonarqube-logs
    server: nfs-server-ip
    # nfs路径


kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: sonarqube-logs
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: sonarqube-logs



# sonarqube-data-persistentvolumeclaim.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: sonarqube-data
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: sonarqube-data
  nfs:
    path: /nfs/sonarqube-data
    server: nfs-server-ip
    # nfs路径


kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: sonarqube-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: sonarqube-data

image.png

   
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

    25 引用
  • k8s

    9 引用