SonarQube整合gitlab

简介

  • 实现目标:代码通过GitLab提交后,SonarQube就会分析该代码质量
  • 使用gitlab-runner进行流水线操作,未阅读过此文章的,点击进入查看
  • 流程示意图如下

image.png

查看地址和token

  • 进入某一个项目
  • 设置->CI/CD->Runner->Specific runners

image.png

注册gitlab-runner

  1. # 进入容器
  2. docker exec -it gitlab-runner /bin/bash
  3. # 注册runner
  4. gitlab-runner register
  5. # gitlab地址
  6. Enter the GitLab instance URL (for example, https://gitlab.com/):
  7. http://192.168.3.11/
  8. # token
  9. Enter the registration token:
  10. XXXXX-XXXXX-XXXXX
  11. # 输入runner描述
  12. Enter a description for the runner:
  13. my-runner
  14. # gitlab-runner标签名称tag
  15. Enter tags for the runner (comma-separated):
  16. sonar
  17. # 选择执行gitlab-runner的执行程序。因为我要用docker实现自动部署,所以输入docker
  18. Enter an executor: custom, docker-ssh, parallels, kubernetes, docker, shell, ssh, virtualbox, docker+machine, docker-ssh+machine:
  19. docker
  20. # 如果选择docker作为执行程序,那要定义一个默认镜像的名称
  21. Enter the default Docker image (for example, ruby:2.6):
  22. alpine:latest

镜像拉取策略修改

  • 镜像拉取有三种策略
    • Always:总是拉取
    • IfNotPresent:本地有则使用本地镜像, 不拉取
    • Never:只使用本地镜像, 从不拉取
  • 为提高效率改为 IfNotPresent模式, 避免重复拉取镜像
  • 修改config配置文件,添加pull_policy = ["if-not-present"]代码段, 示意图如下

image.png

执行命令

  1. # 进入容器
  2. docker exec -it gitlab-runner /bin/bash
  3. # 进入配置文件文件夹
  4. cd etc/gitlab-runner/
  5. # 修改文件
  6. vi config.toml
  7. # 保存退出
  8. :wq

查看runner

image.png

在maven项目下新建gitlab-ci.yml文件

image.png

后端项目

  1. image:
  2. name: maven:3.6.3-jdk-8
  3. entrypoint: [""]
  4. variables:
  5. SONAR_PROJECT_KEY: "zenith-xc-devops"
  6. SONAR_PROJECT_NAME: "运维工单管理平台后端"
  7. SONAR_HOST_URL: "http://192.168.0.108:6004"
  8. stages:
  9. - test
  10. sonar_preview:
  11. stage: test
  12. script:
  13. - rm -f /usr/share/maven/conf/settings.xml
  14. - mvn -s settings-yfzx.xml clean verify sonar:sonar -Dsonar.projectKey=$SONAR_PROJECT_KEY -Dsonar.projectName=$SONAR_PROJECT_NAME -Dsonar.host.url=$SONAR_HOST_URL
  15. only:
  16. - master
  17. tags:
  18. - sonar

前端项目

  1. image:
  2. name: sandemo:5
  3. entrypoint: [""]
  4. variables:
  5. SONAR_PROJECT_KEY: "zenith-xc-devops-vue"
  6. SONAR_PROJECT_NAME: "运维工单管理平台前端"
  7. # 开始执行脚本前所需执行脚本
  8. stages:
  9. - test
  10. sonar_preview:
  11. stage: test
  12. script:
  13. - ifconfig
  14. - \cp -f /home/eslint.sh /home/.eslintrc.js ./
  15. - cnpm install @vue/cli-plugin-eslint@4.0.0 @vue/eslint-config-standard@4.0.0 babel-eslint@10.0.3 eslint@5.16.0 eslint-plugin-vue@5.0.0 --save-dev
  16. - bash eslint.sh
  17. - sonar-scanner -Dsonar.projectKey=$SONAR_PROJECT_KEY -Dsonar.projectName=$SONAR_PROJECT_NAME -Dsonar.sources=src -Dsonar.eslint.reportPaths=report.json -Dsonar.language=js
  18. only:
  19. - master
  20. tags:
  21. - sonar

gitlab-ci.yml使用

  • 将.gitlab-ci.yml文件添加到存储库的根目录,并将GitLab项目配置为使用Runner,则每次提交或推送都会触发CI 管道
  • 参数说明 | 关键字 | 描述 | | —- | —- | | stages | 定义流水线所有的阶段,如果未定义stages,则默认有build、test、deploy三个阶段 | | stage | 定义一个作业阶段(默认值:)test | | script | 必须参数,由runner执行的shell脚本 | | image | 使用Docker image镜像 | | services | 使用Docker services镜像 | | before_script | 执行作业之前执行的一段shell脚本 | | after_script | 执行完作业执行一段的shell脚本 | | only | 限制作业在什么时候创建 | | except | 限制作业在什么时候不创建 | | tags | 作用使用的Runner运行器的标签列表 | | allow_failure | 允许作业失败,失败的作业不影响提交的状态 | | when | 什么时候运行作业 | | environment | 作用部署的环境名称 | | cache | 指定需要在job之间缓存的文件或目录 | | artifacts | 归档文件列表,指定成功后应附加到job的文件和目录的列表 | | dependencies | 当前作业依赖的其他作业,你可以使用依赖作业的归档文件 | | coverage | 作业的代码覆盖率 | | retry | 作业失败时,可以自动执行多少次 | | parallel | 指定并行运行的作业实例 | | trigger | 定义下游流水线的触发器 | | include | 作业加载其他YAML文件 | | extends | 控制实体从哪里继承 | | pages | 上传GitLab Pages的结果 | | retry | 作业失败时,可以自动执行多少次 | | variables | 定义环境变量 |

登录sonar管理后台

image.png