GitLab Runner&shell方式实现代码门禁
一、准备工作
1.一台linux服务器
2.安装maven(尽量安装高版本以减少不必要的麻烦)
3.安装git (尽量安装高版本以减少不必要的麻烦)
4.已经安装好环境的话,不同项目直接在上面注册属于自己的runner即可,从第三步开始看就行
二、安装gitlab-runner
一定要安装 GitLab Runner 10及其以上版本,亲测低版本有问题,还不报错
高版本安装命令如下
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
apt-get install gitlab-runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
注意:gitlab-runner的默认user用户是gitlab-runner,需要改成root,否则无法执行mvn
三、注册runner
在gitlab平台,你项目(需要你有管理权限)中的【设置】-【CI/CD】-【Runner】-【指定Runner】-【手动设置specic Runner】中获取URL和token。
在服务器上输入命令
gitlab-runner register
需要按照步骤输入:
- 输入gitlab的服务URL,(上面获取的url)
- 输入gitlab-ci的Toekn,(上面获取的token)
- 输入描述(设置页可修改)
- 输入标签tag(设置页可修改)
- 是否运行在没有tag的build上面。在配置gitlab-ci的时候,会有很多job,每个job可以通过tags属性来选择runner。这里为true表示如果job没有配置tags,也执行(低版本有此步骤)
- 是否锁定runner到当前项目(低版本有此步骤)
- 选择执行器,gitlab-runner实现了很多执行器,可用在不同场景中运行构建,这里选用Shell模式
注册成功后在项目设置页会出现该runner
四、项目添加配置文件
(1)配置项目sonar参数
在项目的git根目录下创建sonar.properties文件
# 该配置文件用于代码质量管理
# 项目在sonarqube中的ID,不同项目如果配置了相同的ID,会导致推送到同一个sonar中
# 可以在项目的sonar地址中提取,如http://172.18.11.11:9000/dashboard?id=xxx,xxx为ID
sonar.projectKey=xxx
# 项目在sonarqube中的显示名称,需要使用Unicode进行编码
sonar.projectName=xxx
# 项目在sonarqube中的版本
sonar.projectVersion=0.0.1-SNAPSHOT
# 项目在sonarqube中待分析的文件夹
sonar.sources=xxx/src
# 项目使用的编码
sonar.sourceEncoding=UTF-8
# 项目class文件路径,用于静态分析
sonar.java.binaries=xxx/target/classes
# 项目引用的jar包路径,用于静态分析,一些代码检查需要进入到引用的jar包中
sonar.java.libraries=xxx/target/lib
# 项目使用的jdk版本
sonar.java.source=1.8
# 项目需要排除到分析之外的路径
sonar.exclusions=src/main/resources/**
(2)配置gitlab-ci
在项目的git根目录下创建**.gitlab-ci.yml**文件(注意缩进)
stages:
- test
job_code_review:
stage: test
only:
refs:
- /^feature.*$/
- /^release_.*$/
script:
- mvn --batch-mode clean compile sonar:sonar
-Dproject.settings=sonar.properties
-Dsonar.host.url=http://172.18.11.11:9000/
-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
-Dsonar.gitlab.max_blocker_issues_gate=0
-Dsonar.gitlab.max_critical_issues_gate=0
-Dsonar.gitlab.max_major_issues_gate=0
-Dsonar.gitlab.max_minor_issues_gate=5
# -Dsonar.gitlab.ping_user=true
上面的这个配置项,粗略说明:
- 使用sonar.properties配置文件
- 指定了sonarqube地址为http://172.18.11.11:9000/,请根据实际情况修改为自己使用的sonarqube server
- 阻断问题不能多于0个,严重问题不能多于0个,主要问题不能多于0个,次要问题不能多于5个(根据各项目实际情况配置)
各配置具体含义:
stages:定义 stages(阶段)。对应下方job中的stage,可以有多个任务,任务将按此中定义的顺序执行。
job_code_review:自定义的job(任务)名称。
tags:可以设置标签,只有标签为XX的runner才会执行这个任务。
五、测试
任意提交一个文件,在gitlab-ci的流水线页查看是否通过
若有问题根据日志解决问题即可,若无日志,请检查前三步