实验环境
- Gitlab 版本:GitLab 社区版 v17.1.2
- GitLab Runner 版本: gitlab/gitlab-runner:alpine3.19-v17.1.2
- SonarQube 版本:Community Editionv9.9.6 (build 92038)
- sonar-scanner 版本:sonar-scanner-cli:4.7
环境部署
- GitLab 部署参考:Linux 环境下安装 GitLab 与配置
- SonarQube 部署参考:Jenkins + SonarQube 代码省察
部署 GitLab Runner
gitlab-ci 是 gitlab 的持续集成服务,gitlab-runner 是用于运行 gitlab-ci 的任务。
gitlab-runner 支持很多中运行任务的方式(称为 Executors),目前支持: SSH、Shell、Parallels、VirtualBox、Docker、Docker Machine(auto-scaling)、kubernetes、Custom。这里选取 Docker 的方式。
拉取镜像到本地镜像仓库(可选)
1
2
3
4
5docker pull gitlab/gitlab-runner:alpine3.19-v17.1.2
docker tag gitlab/gitlab-runner:alpine3.19-v17.1.2 harbor.cs.yubang168.cn/publics/gitlab-runner:alpine3.19-v17.1.2
docker push harbor.cs.yubang168.cn/publics/gitlab-runner:alpine3.19-v17.1.2创建容器
1
2
3
4
5
6docker run -d \
--name gitlab-test-runner \
--restart always \
-v /data/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
harbor.cs.yubang168.cn/publics/gitlab-runner:alpine3.19-v17.1.2
配置 GitLab Runner
登录 Gitlab 查看 runner 信息,点击群组,进入到群组页面,点击左侧
构建
–>Runner
,可以查看到当前群组拥有的 Runner然后点击创建 Runner,如下记录下步骤1里面的
token
以及url
,接下来注册 Runner 需要用到这两个值
注册 Runner
获取到 Runner 的 token 以及 url 之后,回到,之前部署 gitlab-runner 的服务器上,执行以下命令注册 Runner
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25docker exec -it gitlab-test-runner gitlab-runner \
register \
--url http://gitlab.59izt.com \
--token glrt-EDsMzuZuG9rGrkFr-gbV \
--executor docker \
--description "Docker Runner For Java" \
--docker-image "harbor.cs.yubang168.cn/publics/sonar-scanner-cli:4.7" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock
# 命令输出信息如下
Runtime platform arch=amd64 os=linux pid=47 revision=ed1f1a38 version=17.1.2
Running in system-mode.
Enter the GitLab instance URL (for example, https://gitlab.com/):
[http://gitlab.59izt.com]:
Verifying runner... is valid runner=EDsMzuZuG
Enter a name for the runner. This is stored only in the local config.toml file:
[Docker Runner For Java]:
Enter an executor: docker, kubernetes, docker-autoscaler, instance, custom, shell, ssh, parallels, virtualbox, docker-windows, docker+machine:
[docker]:
Enter the default Docker image (for example, ruby:2.7):
[harbor.cs.yubang168.cn/publics/sonar-scanner-cli:4.7]:
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"
配置 Sonarqube
创建访问 Sonarqube 的 Token,登录 Sonarqube,点击用户头像 –> 我的账号,在我的账户界面点击
安全
输入令牌名称,类型选择
全局分析令牌
,过期时间选择永不过期
,然后会生成一个 token,记住这个 Token 的值,后面配置 gitlab-ci 时需要用到。(这个 token 只有现在能看到,后面时看不到的,所以最好找个地方记录下来)
配置 gitlab-ci
在项目根目录创建
.gitlab-ci.yml
文件,文件内容如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17stages:
- scan
sonarqube_scan:
stage: scan
image: harbor.cs.yubang168.cn/publics/sonar-scanner-cli:4.7
script:
- sonar-scanner
-Dsonar.login="$SONAR_TOKEN"
-Dsonar.projectKey=yb-smart-oa
-Dsonar.projectName=yb-smart-oa
-Dsonar.sourceEncoding=UTF-8
-Dsonar.sources=.
tags:
- java
only:
- dev- tags: 匹配 Runner 的标签,指定使用哪个 Runner 执行
- only: 只对 dev 分支进行触发扫描