gitlab整合SonarQube进行代码分析

浮生半日闲 发布于 2022-12-10 3 次阅读


1、gitlab和gitlab-runner的安装

首先,需要安装gitlab和gitlab-runner,这样,就可以进行自动化作业任务。安装使用docker-compose进行,docker-compose.yml文件内容如下:

version: '3'

services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    volumes:
      - ./config:/etc/gitlab
      - ./logs:/var/log/gitlab
      - ./data:/var/opt/gitlab
    ports:
      - 8888:80
      - 4443:443
      - "2222:22"
  runner:
    image: gitlab/gitlab-runner:latest
    container_name: gitlab-runner
    restart: always
    links:
      - gitlab
    volumes:
      - ./runner-config:/etc/gitlab-runner
      # - ./runner-config/profile:/etc/profile
      # - /project/soft/jdk-17.0.5:/usr/local/jdk-17.0.5
      # - /project/soft/apache-maven-3.8.6:/usr/local/apache-maven-3.8.6

容器运行成功后,需要对runner的环境变量进行配置,不然在进行检测的时候会提示找不到对应的命令。同时,为了保证变量的可重用性,可以将环境变量配置文件进行本地文件映射,方法如下:

[java@localhost gitlab]$ sudo docker cp gitlab-runner:/etc/profile ./runner-config/

然后修改./runner-config/profile文件,在文件最下方添加如下内容:

# 需要先下载jdk安装包
# 下载地址:https://www.oracle.com/java/technologies/downloads/#java17
export JAVA_HOME=/usr/local/jdk-17.0.5
PATH=$PATH:$JAVA_HOME/bin
export PATH

# maven环境变量,需要先下载maven安装包
# 下载地址:https://archive.apache.org/dist/maven/
MAVEN_HOME=/usr/local/apache-maven-3.8.6
export PATH=${MAVEN_HOME}/bin:${PATH}

设置完成后,修改docker-compose.yml文件,将volumes中的#去掉,然后重新创建容器。

2、创建runner

使用命令创建runner。

java@localhost gitlab]$ sudo docker exec -it gitlab-runner gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=862 revision=133d7e76 version=15.6.1
WARNING: The 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with a 'deploy' command. For more information, see https://gitlab.com/gitlab-org/gitlab/-/issues/380872
Running in system-mode.

Enter the GitLab instance URL (for example, https://gitlab.com/):
填入自己gilab网址
Enter the registration token:
填入项目的token,见上图
Enter a description for the runner:
[b8655c42ba38]: 填入runner的描述
Enter tags for the runner (comma-separated):
runner的tag
Enter optional maintenance note for the runner:
这个可以不管,直接enter
Registering runner... succeeded                     runner=j9bcBHxz
Enter an executor: docker+machine, docker-ssh+machine, kubernetes, custom, docker-ssh, parallels, shell, virtualbox, docker, ssh, instance:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"

创建完成后,属性gitlab页面,可以看到刚才创建的runner:

3、配置SonarQube

安装SonarQube:

version: '3.1'
services:
  postgres:
    image: postgres:14.2
    restart: always
    container_name: postgres
    volumes:
      - /project/docker/data/sonarqube/postgres/postgresql:/var/lib/postgresql
      - /project/docker/data/sonarqube/postgres/data:/var/lib/postgresql/data
    environment:
      TZ: Asia/Shanghai
      POSTGRES_USER: sonarqube
      POSTGRES_PASSWORD: sonarqube
      POSTGRES_DB: sonarqube
  sonarqube:
    image: sonarqube:9.3.0-community
    container_name: sonarqube
    privileged: true
    depends_on:
      - postgres
    volumes:
      - ./extensions:/opt/sonarqube/extensions
      - ./logs:/opt/sonarqube/logs
      - ./data:/opt/sonarqube/data
      - ./conf:/opt/sonarqube/conf
    ports:
      - 9001:9000
    environment:
      SONARQUBE_JDBC_USERNAME: sonarqube
      SONARQUBE_JDBC_PASSWORD: sonarqube
      SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonarqube

等待运行完成后登录,默认用户名和密码都是admin。

3.1 安装汉化补丁

从“Administration -> Marketplace”打开插件界面,搜索指定的插件,点击插件列表右侧的“install”安装插件。

点击install即可。

3.2 安装导出插件

从https://gitee.com/zzulj/sonar-pdf-plugin/tags下载对应版本的jar包,然后将jar包上传到extensions/plugins目录下,然后重启服务器。

重启完成后,对插件进行配置(主要配置登录密码,不然无法使用插件)。

即可在项目的更多内找到下载按钮:

3.3 连接gitlab

进入gitlab个人中心,创建访问令牌:

然后进入sonar配置中心,填写gitlab访问配置:

这样就可以从gitlab中直接导入项目(第一次可能还需要再填一下访问密钥)。

接着,添加一个项目:

然后,按照步骤添加对应的数据:

此图片的alt属性为空;文件名为image-9.png

最后,在git根目录增加 .gitlab-ci.yml文件,填入内容后下面内容:

然后再在文件中添加runner创建时的tag,推送到master分支,即可开始解析。最终配置(根据项目的不同配置内容将会发生变化):

sonarqube-check:
  image: maven:3.6.3-jdk-11
  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: 
    - mvn verify sonar:sonar -Dsonar.projectKey=java_2022-before_appraisal_AYT1eWcCnmTV8TCHuKJu
  allow_failure: true
  only:
    - master # or the name of your main branch
  tags:
    - tag