SonarQube 代码分析平台部署及对接 Jenkins
后知后觉 暂无评论

部署 SonarQube

推荐的部署方式有两种,二进制和容器,推荐使用容器化部署,方便维护和处理,下面将以容器部署为例。

  1. 大部分系统的自带参数并不能满足要求,创建配置文件并重启(容器化);

    # /etc/sysctl.d/99-sonarqube.conf
    vm.max_map_count=524288
    fs.file-max=131072
    # /etc/security/limits.d/99-sonarqube.conf
    sonarqube   -   nofile   131072
    sonarqube   -   nproc    8192
  2. 创建空文件夹并创建 compose.yaml 文件;

    services:
      sonarqube:
        image: sonarqube:lts-community
        depends_on:
          - db
        environment:
          SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
          SONAR_JDBC_USERNAME: sonar
          SONAR_JDBC_PASSWORD: sonar
        restart: unless-stopped
        volumes:
          - sonarqube_data:/opt/sonarqube/data
          - sonarqube_extensions:/opt/sonarqube/extensions
          - sonarqube_logs:/opt/sonarqube/logs
        ports:
          - "0.0.0.0:9000:9000"
      db:
        image: postgres:15-alpine
        environment:
          POSTGRES_DB: sonar
          POSTGRES_USER: sonar
          POSTGRES_PASSWORD: sonar
        restart: unless-stopped
        volumes:
          - postgresql:/var/lib/postgresql
          - postgresql_data:/var/lib/postgresql/data
    volumes:
      sonarqube_data:
      sonarqube_extensions:
      sonarqube_logs:
      postgresql:
      postgresql_data:
    小贴士:其中 PostgreSQL 支持 11/12/13/14/15,可以根据需求更换版本号。
  3. 安装 Docker Engine 及配套插件,安装后执行命令创建容器。

    docker compose up -d

等待容器启动后访问 9000 端口即可看到 WebUI,使用用户名密码登录(默认都是admin)即可,然后会提示修改密码。

主界面

在 Administration -> System 中可以看到系统状态和所有服务的状态


生成访问令牌

外部的服务调用 SonarQube 是需要验证的,但是还不想使用用户密码进行授权,可以使用 Token 进行授权来进行代码检测的工作,可以防止泄漏用户名和密码。

配置令牌

如果准备长期使用的话,第五步需要将其修改为 No expiration(永不过期),创建完成后令牌只会显示一次,注意提前复制备份令牌字符串。


部署 SonarScanner

SonarScanner 官方文档的最上面有二进制包的下载地址:

以当前最新版 4.8 为例 sonar-scanner-cli-4.8.0.2856-linux.zip

sudo unzip sonar-scanner-cli-4.8.0.2856-linux.zip -d /opt/
小贴士:需要注意的是,这个扫描工具需要安装在 Jenkins 的工作节点中,如果主节点没有 executors ,那么需要将 SonarScanner 安装至实际的执行器所在的工作节点主机中。

然后修改配置文件,在 conf/sonar-scanner.properties 中,只需要修改 sonar.host.url 的值,指向正确的地址即可。

#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here

#----- Default SonarQube server
sonar.host.url=http://172.16.16.203:9000

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

配置项目

然后就可以对项目进行配置接入,首先安装 SonarQube Scanner for Jenkins 插件,安装完毕后重启 Jenkins。

然后在 Dashboard -> Manage Jenkins -> System 中配置 SonarQube servers,需要配置的项目有名称、地址、和验证 Token。

配置参数1

根据不同种类的项目,配置的方法也不尽相同:

补充一下其中的参数说明:

参数说明
sonar.projectKey项目 ID,为了区分项目
sonar.projectName项目名称,仅展示用
sonar.projectVersion项目版本,为了区别构建
sonar.java.binaries可执行文件路径,构建后进行测试的可执行文件路径
sonar.login登录验证,直接使用令牌或者用户名、密码形式

如果不配置 sonar.projectVersion 参数,会导致混淆,配置后可以在构建日志中看到每次构建(对应 Jenkins 的构建号 #xx)对应的问题:

参数说明

手动检测

如果某个项目想单独跑一次测试,可以直接在命令行执行命令(注意替换 testProject 名)

/opt/sonar-scanner-4.8.0.2856-linux/bin/sonar-scanner \
                      -Dsonar.projectKey=testProject \
                      -Dsonar.projectName=testProject \
                      -Dsonar.java.binaries=target \
                      -Dsonar.login=squ_d515c5752ba7c7862241c6463600309019981d90

附录

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。