SonarQube整合gitlab
简介
- 实现目标:代码通过
GitLab提交后,SonarQube就会分析该代码质量 - 使用
gitlab-runner进行流水线操作,未阅读过此文章的,点击进入查看 - 流程示意图如下
查看地址和token
- 进入某一个项目
- 设置->CI/CD->Runner->Specific runners
注册gitlab-runner
# 进入容器docker exec -it gitlab-runner /bin/bash# 注册runnergitlab-runner register# gitlab地址Enter the GitLab instance URL (for example, https://gitlab.com/):http://192.168.3.11/# tokenEnter the registration token:XXXXX-XXXXX-XXXXX# 输入runner描述Enter a description for the runner:my-runner# gitlab-runner标签名称tagEnter tags for the runner (comma-separated):sonar# 选择执行gitlab-runner的执行程序。因为我要用docker实现自动部署,所以输入dockerEnter an executor: custom, docker-ssh, parallels, kubernetes, docker, shell, ssh, virtualbox, docker+machine, docker-ssh+machine:docker# 如果选择docker作为执行程序,那要定义一个默认镜像的名称Enter the default Docker image (for example, ruby:2.6):alpine:latest
镜像拉取策略修改
- 镜像拉取有三种策略
Always:总是拉取IfNotPresent:本地有则使用本地镜像, 不拉取Never:只使用本地镜像, 从不拉取
- 为提高效率改为
IfNotPresent模式, 避免重复拉取镜像 - 修改config配置文件,添加
pull_policy = ["if-not-present"]代码段, 示意图如下
执行命令
# 进入容器docker exec -it gitlab-runner /bin/bash# 进入配置文件文件夹cd etc/gitlab-runner/# 修改文件vi config.toml# 保存退出:wq
查看runner
在maven项目下新建gitlab-ci.yml文件
后端项目
image: name: maven:3.6.3-jdk-8 entrypoint: [""]variables: SONAR_PROJECT_KEY: "zenith-xc-devops" SONAR_PROJECT_NAME: "运维工单管理平台后端" SONAR_HOST_URL: "http://192.168.0.108:6004"stages: - testsonar_preview: stage: test script: - rm -f /usr/share/maven/conf/settings.xml - 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 only: - master tags: - sonar
前端项目
image: name: sandemo:5 entrypoint: [""]variables: SONAR_PROJECT_KEY: "zenith-xc-devops-vue" SONAR_PROJECT_NAME: "运维工单管理平台前端"# 开始执行脚本前所需执行脚本stages: - testsonar_preview: stage: test script: - ifconfig - \cp -f /home/eslint.sh /home/.eslintrc.js ./ - 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 - bash eslint.sh - sonar-scanner -Dsonar.projectKey=$SONAR_PROJECT_KEY -Dsonar.projectName=$SONAR_PROJECT_NAME -Dsonar.sources=src -Dsonar.eslint.reportPaths=report.json -Dsonar.language=js only: - master tags: - 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管理后台
