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接入sonar gitlab runner ssh_git

在服务器上输入命令

gitlab-runner register

需要按照步骤输入:

  1. 输入gitlab的服务URL,(上面获取的url)
  2. 输入gitlab-ci的Toekn,(上面获取的token)
  3. 输入描述(设置页可修改)
  4. 输入标签tag(设置页可修改)
  5. 是否运行在没有tag的build上面。在配置gitlab-ci的时候,会有很多job,每个job可以通过tags属性来选择runner。这里为true表示如果job没有配置tags,也执行(低版本有此步骤)
  6. 是否锁定runner到当前项目(低版本有此步骤)
  7. 选择执行器,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的流水线页查看是否通过

若有问题根据日志解决问题即可,若无日志,请检查前三步