sonar-配合gitlab实现提交代码检测


1、下载Sonar GitLab Plugin 4.1.0

  官方地址:https://github.com/gabrie-allaigre/sonar-gitlab-plugin

  直接下载地址:https://links.jianshu.com/go?to=https%3A%2F%2Fgithub.com%2Fgabrie-allaigre%2Fsonar-gitlab-plugin%2Freleases%2Fdownload%2F4.1.0-SNAPSHOT%2Fsonar-gitlab-plugin-4.1.0-SNAPSHOT.jar

??:Only SonarQube < 7.7, because preview mode is removed

  下载完成之后,放到如图所示目录下:

2、下载:SonarQube 7.6

  官方地址:https://github.com/SonarSource/sonarqube

  启动sonarQube:

  默认访问地址:http:localhost:9000

  默认账号密码:admin    admin

3、搭建gitlab 

  - 搭建过程省略

  - 新建一个User Token

      

     - 然后将sonarQube用户,添加到需要检测的项目中,分配"开发者"权限

4、sonarQube 关联gitlab:

    - Gitlab url:填写gitlab访问地址

    - Gitlab User Token: 就是第三步创建完的access token

5、安装gitlab-runner:

  我本地是mac,所以直接执行:brew install gitlab-runner

  如果是linux系统,则按照如下步骤安装:

    - 注册runner:

    注册runner,你需要有一个项目,并且需要至少master权限。
    进入到项目,左侧点击settings->CI/CD页面,选择第二项Runners settings

      

     - 在安装gitlab-runner所在机器上执行如下注册流程:

1、Add GitLab’s official repository: 添加官方仓库
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

2、Install the latest version of GitLab Runner: 安装最新版本 sudo yum install gitlab-runner
3、To install a specific version of GitLab Runner: 安装指定版本 yum list gitlab-runner --showduplicates | sort -r sudo yum install gitlab-runner-10.0.0-1
4、更新gitlab-runner sudo yum update sudo yum install gitlab-runner

5、注册runner:
   [root@s102
/]# gitlab-runner register # 输入 GitLab 地址 Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): http://192.168.0.110/ # 输入 GitLab Token, 此处的token为上图中该项目针对runner的token值 Please enter the gitlab-ci token for this runner: oApF5Y_f1NRfCfeNbE5WRx # 输入 Runner 的说明, 可以为空 Please enter the gitlab-ci description for this runner: gitlab-runner # 设置 Tag,可以用于指定在构建规定的 tag 时触发 ci Please enter the gitlab-ci tags for this runner (comma separated): deploy # 这里选择 true ,可以用于代码上传后直接执行(根据版本,也会没有次选项) Whether to run untagged builds [true/false]: true # 这里选择 false,可以直接回车,默认为 false(根据版本,也会没有次选项) Whether to lock Runner to current project [true/false]: false # 选择 runner 执行器,这里我们选择的是 shell Please enter the executor: virtualbox, docker+machine, parallels, shell, ssh, docker-ssh+machine, kubernetes, docker, docker-ssh: shell


如果是docker安装的,则需要如下:
Please enter the Docker image (eg. ruby:2.1):
alpine:latest

url:私有git的路径
token:项目的token,用于关联runner和项目
name:runner的名字,用于区分runner
tags:用于匹配任务(jobs)和执行任务的设备(runners)
executor:执行环境


备注:当我们完成设置后,可通过vi ~/.gitlab-runner/config.toml打开runner 的配置文件看到之前配置的内容

   官方示例:https://docs.gitlab.com/runner/register/

  启动gitlab-runner: 

cd ~
gitlab-runner install
gitlab-runner start

6、配置maven:

  下载版本:maven:3.6.3-jdk-8

  配置文件:


  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  /usr/share/maven/ref/repository


  
  
    nexus-private
    central
    Nexus osc
    http://127.0.0.1/repository/maven-central/
   

  
    alimaven
    aliyun maven
    http://maven.aliyun.com/nexus/content/groups/public/
    central        
  

7、开启gitlab CI

  在项目根目录下添加文件:.gitlab-ci.yml

stages:
  - scan

sonar-check:
  stage: scan
  tags:
    - code-check
  script:
    - mvn clean verify -Dmaven.test.skip=true
    - mvn -e -X --batch-mode sonar:sonar
        -Dsonar.host.url=http://127.0.0.1:7777
        -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA
        -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME
        -Dsonar.gitlab.project_id=$CI_PROJECT_ID
        -Dsonar.issuesReport.html.enable=true
        -Dsonar.analysis.mode=preview #设置后,sonar不创建项目,只做分析

提交后,在gitlab项目界面,查看流水线即可查看执行状态。

静态分析:

mvn --batch-mode sonar:sonar \
    -Dsonar.host.url=http://10.236.65.36:9000 \
    -Dsonar.login=wanyang3 \
    -Dsonar.password=****** \
    -Dsonar.issuesReport.html.enable=true \
    -Dsonar.analysis.mode=preview \
    -Dsonar.preview.excludePlugins=issueassign,scmstats
mvn --batch-mode verify sonar:sonar \
    -Dsonar.host.url=http://10.236.65.36:9000 \
    -Dsonar.login=wanyang3 \
    -Dsonar.password=****** \
    -Dsonar.analysis.mode=preview \
    -Dsonar.gitlab.project_id=$CI_PROJECT_ID \
    -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA \
    -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME

  说明:sonar.gitlab.* 参数为插件可使用变量,每个变量有不同的用处,具体可参考 Sonar Gitlab Plugins properties,$CI_PROJECT_ID,$CI_COMMIT_SHA,$CI_COMMIT_REF_NAME 等变量为 GitLab CI 变量,可以在 CI 流程中直接使用这些变量

  具体可参考 GitLab CI Variables:https://docs.gitlab.com/ce/ci/variables

8、Issues Report Plugins

  Issues Report Plugins 介绍

使用 Issues Report Plugins 插件可以为我们生成一份 HTML 格式的问题报告,对于开发人员来说是很有好处的,我们可以在改动代码后 Push 代码到仓库前,检测一下代码质量,生成问题报告,提醒自己避免提交有明显问题的代码到仓库中,当然也可以去 SonarQube Web 上查看详细情况。

  Issues Report Plugins 使用

  Issues Report Plugins 插件的使用很简单,只需要 Maven 命令行指定参数执行即可。注意:SonarQube > 5.1 版本,该插件已经过时了,不过我们还是直接可以使用,免安装。5.1 版本以后由 SonarLint 替代该插件。

mvn sonar:sonar 
    -Dsonar.analysis.mode=preview  # 设置 mode,默认为preview
    -Dsonar.issuesReport.lightModeOnly=true # 设置是否只生成新增问题的报告
    -Dsonar.issuesReport.html.enable=true # 设置生成 HTML 格式的报告
    -Dsonar.issuesReport.html.name=xxxx # 设置生成 HTML 报告的文件名字
    -Dsonar.issuesReport.html.location=/xx/xx # 设置生成 HTML 报告的文件存储路径
    -Dsonar.issuesReport.console.enable=true # 设置报告输出到控制台

  当设置-Dsonar.issuesReport.html.enable=true时,该插件默认会生成两份 HTML 报告,一份是包含所有问题的报告 ,一份为只包含新增问题的报告 ,除非设置了-Dsonar.issuesReport.lightModeOnly=true,则只生成包含新问题的报告。

  默认生成报告的路径为/target/sonar/issues-report/,使用-Dsonar.issuesReport.html.location 可修改生成路径。

  报告默认文件名为 issues-report.html (全部问题报告),issues-report-light.html(新增问题报告),使用-Dsonar.issuesReport.html.name=xxxx 可修改生成的文件名称。

  当设置-Dsonar.issuesReport.console.enable=true时,则不会生成HTML文件报告,会将检测结果打印到控制台输出。

参考其他:

  GitLab-CI与GitLab-Runner:https://www.cnblogs.com/cnundefined/p/7095368.html