一、部署


Server

简单使用(推荐)

$ docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest

从 Docker 镜像安装 SonarQube

  1. 创建以下卷有助于防止在更新到新版本或升级到更高版本时丢失信息:

    • sonarqube_data – 包含数据文件,例如嵌入式 H2 数据库和 Elasticsearch 索引
    • sonarqube_logs – 包含有关访问、Web 进程、CE 进程和 Elasticsearch 的 SonarQube 日志
    • sonarqube_extensions – 将包含您安装的任何插件和必要时的 Oracle JDBC 驱动程序。

    使用以下命令创建卷:

    $> docker volume create --name sonarqube_data
    $> docker volume create --name sonarqube_logs
    $> docker volume create --name sonarqube_extensions
    
  2. 已提供支持的数据库(Oracle 除外)的驱动程序。如果您使用的是 Oracle 数据库,则需要将 JDBC 驱动程序添加到sonar_extensions卷中。去做这个:

    • 使用嵌入式 H2 数据库启动 SonarQube 容器:
    $ docker run --rm \
        -p 9000:9000 \
        -v sonarqube_extensions:/opt/sonarqube/extensions \
        <image_name>
    
    • 一旦 SonarQube 正常启动就退出
    • 将 Oracle JDBC 驱动程序复制到sonarqube_extensions/jdbc-driver/oracle.
  3. 使用使用 -e 环境变量标志定义的数据库属性运行映像:

    $> docker run -d --name sonarqube \
        -p 9000:9000 \
        -e SONAR_JDBC_URL=... \
        -e SONAR_JDBC_USERNAME=... \
        -e SONAR_JDBC_PASSWORD=... \
        -v sonarqube_data:/opt/sonarqube/data \
        -v sonarqube_extensions:/opt/sonarqube/extensions \
        -v sonarqube_logs:/opt/sonarqube/logs \
        <image_name>
    

Docker Compose 配置示例

version: "3"

services:
  sonarqube:
    image: sonarqube:community
    depends_on:
      - db
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
    ports:
      - "9000:9000"
  db:
    image: postgres:12
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data

volumes:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:
  postgresql_data:

Client

目标设备安装 SnoarQube Scanner
访问Scanner官方文档 下载最新版本,并将bin目录添加到PATH环境变量中,即可运行

# https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
# 选择下载类型 Linux
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip

# 解压到指定目录 
unzip sonar-scanner-cli-4.6.2.2472-linux.zip -d /usr/local/

# 重命名文件夹(或 通过Linux软连接映射)
# ln -s [源文件或目录] [目标文件或目录]
mv sonar-scanner-cli-4.6.2.2472-linux sonar-scanner

# 添加环境变量
vi ~/.bashrc
export SONAR_SCANNER_HOME=/usr/local/sonar-scanner                                                           
export PATH=${SONAR_SCANNER_HOME}/bin:${PATH} 

# 应用环境变量 使其生效
source ~/.bashrc

在你的项目根目录中(二选一,运行参数)

  • 配置文件:创建一个名为的配置文件 sonar-project.properties
  • 运行时指定

配置文件或运行时参数需包含以下内容

sonar.projectKey=${项目对应的 Key}
sonar.projectName=${项目对应的 名称}
sonar.projectVersion=${项目对应的 版本} # 1.0
sonar.sources=./
sonar.host.url=${ServerIP} # http://10.200.3.96:9201
sonar.login=${LoginToken for Sonar}

# 选填
sonar.exclusions=**/*.xml,**/*.html # 排除不需要检测的文件,如:xml、html
sonar.language= ${Code 语言} # python java ... 
# 语言不配置则 使用多语言扫描
sonar.sourceEncoding=UTF-8
sonar.java.binaries=. 

二、DevOps 平台集成


集成方式

1. Local 使用

  1. 选择 Local 方式
  2. 创建该项目对应的 新Token 或使用已有的Token (方便扫描目标与项目对应)
  3. 选择目标设备系统类型 下载 SonarScanner
  4. 将bin目录添加到PATH环境变量中
    在这里插入图片描述

执行命令完成扫描(选择系统后 会有需执行命令提示,复制执行就行)

  • Linux

    sonar-scanner \
      -Dsonar.projectKey=test \
      -Dsonar.sources=. \
      -Dsonar.host.url=http://10.200.3.96:9201 \
      -Dsonar.login=f8b69e29396d703eca16928ef614331165e514ae
    
  • Windows

    sonar-scanner.bat -D"sonar.projectKey=test" -D"sonar.sources=." -D"sonar.host.url=http://10.200.3.96:9201" -D"sonar.login=f8b69e29396d703eca16928ef614331165e514ae"
    

2. DevOps 平台集成(常用)

登录Snoar平台,创建项目后,选择对应的集成方式

如选择 Gitlab-CI 会有对应的配置教程
在这里插入图片描述

1. Gitlab-CI

必须安装 Gitlab runner
安装配置在这里插入图片描述

  1. 安装Gitlab runner

    包安装

    # 离线安装
    # ${arch} e.g. amd64, arm, arm64
    curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_${arch}.deb"
    dpkg -i gitlab-runner_<arch>.deb 
    # apt 在线安装
    apt install gitlab-runner
    

    使用二进制文件

    # 1. Linux x86-64 下载二进制文件
    sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64"
    # 2. 赋予其执行权限
    sudo chmod +x /usr/local/bin/gitlab-runner
    # 3. 创建一个 GitLab CI 用户
    sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
    # 4. 安装并作为服务运行
    sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
    # 5. 启动服务 start stop restart
    sudo gitlab-runner start
    

    确保您有/usr/local/bin/$PATH根或者你可能会得到一个command not found错误。或者,您可以安装gitlab-runner在不同的位置,例如/usr/bin/.

  2. 根据提示 使用管理员登录>Settings > CI/CD > Variables 进行相应的设置

    设置GitLab 环境变量
    在这里插入图片描述
    定义 SonarQube Token 环境变量:
    SONAR_TOKEN 值为 $UserToken 取消选中“保护变量” 选中“掩码变量”
    在这里插入图片描述
    定义 SonarQube URL 环境变量
    SONAR_HOST_URL 值为 $UserUrl Sonar 服务器ip
    在这里插入图片描述

  3. Gitlab CI/CD .gitlab-ci.yml配置

    官方

    sonarqube-check:
      image: 
        name: sonarsource/sonar-scanner-cli:latest
        entrypoint: [""]
      variables:
        SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar"  # Defines the location of the analysis task cache
        GIT_DEPTH: "0"  # Tells git to fetch all the branches of the project, required by the analysis task
      cache:
        key: "${CI_JOB_NAME}"
        paths:
          - .sonar/cache
      script: 
        - sonar-scanner
      allow_failure: true
      only:
        - master # or the name of your main branch
    

    CI/CD配置模版

    #定义 stages(阶段),任务根据这里的顺序执行
    stages:
      - begin
      - test
      - done
    
    # 定义job(任务),多个任务分开定义
    begin-job: 
    	#阶段,取自开始的stages
      stage: begin # 流水线 >>>>> 作业开始
      script:
        - echo "开始流水线作业..."
    
    # 流水线开始作业
    sonar-job:   # sonar 检测
      stage: test  
      #定义该job执行的脚本
      #注意-Dsonar.host.url 是sonarqube服务器地址
      #-Dsonar.login 是sonarqube服务器地址账号
      #-Dsonar.password 是sonarqube服务器地址密码
      # login password  可以用 -Dsonar.login 替换
      #-Dsonar.java.binaries=.  # sonar4.12版本之后,分析java代码需要提供该参数
      script:
        - echo "运行 sonar-scanner 检测."
        - sonar-scanner -Dsonar.projectKey=root_test_AX23BxXP5as3koBVETLy -Dsonar.sources=. -Dsonar.host.url=http://10.200.3.96:9201 -Dsonar.login=489e90be98a600b4868dd6072281877344eee348 -Dsonar.java.binaries=.
        - echo "检测完成"
      tags: #标签,只有这个标签的runner才会执行任务;在gilab-runner注册时填写的tag-list
      	# 如果仅用于个人 可以设置Runner的tags为空
        - sonar  
      when: always
      allow_failure: true # 是否允许失败
      only: # 只有指定的分支提交才会执行
        - main # 分支名称 mian/master
        
    done-job:
      stage: done  # 流水线作业 >>>>> 结束
      script:
        - echo "运行完成"
    
    

    在这里插入图片描述

2. Jekins

  • 安装适用于 Jenkins 的 SonarQube 扫描仪插件 - 版本 2.11 或更高版本

    自动安装(推荐)在这里插入图片描述
    手动在Jenkins服务器 通过终端安装(参考Linux 安装)并设置 SONAR_RUNNER_HOME$install_directory

  • 指定 Sonar服务端(系统配置)在这里插入图片描述

  • Jenkins 配置项目
    在这里插入图片描述

    sonar.projectKey=root_test_AX23BxXP5as3koBVETLy
    sonar.projectName=test
    sonar.projectVersion=1.0
    sonar.sources=./
    sonar.host.url=http://10.200.3.96:9201
    sonar.language=python
    sonar.sourceEncoding=UTF-8
    sonar.login=489e90be98a600b4868dd6072281877344eee348
    sonar.java.binaries=.
    

运行成功
在这里插入图片描述

在这里插入图片描述

常见问题

1. Gitlab 流水线一直处于等待状态
重启 Gitlab runner:gitlab-runner restart

注意事项

  • gitlab社区版,只能对main/master分支代码进行分析
  • .gitlab-ci.yml的脚本,要有参数 -Dsonar.java.binaries=.否则报错
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐