GitLab Runner部分配置

CI是个好东西

本身现在所在的团队使用Git的人不多,所以往GitLab上提交代码的时候往往有一些不合格的代码,后来发现GitLab CI可以完美地解决这个问题。

需求及实现

  1. service目录中不包含platformService目录。
  2. 所有项目中不能包含.properties文件,以.properties.sample文件提供给大家,然后.gitignore目录中也忽略.properties文件
  3. config目录中不包含index.js文件,以index.js.sample文件提供给大家
  4. 所有vue代码中不能包含调试用代码”debugger|console.log”
  5. Java代码能编译通过

只有通过以上5点的代码才能合并到主仓库,避免污染代码库。其实原因很简单,看下面就清楚。

.gitlab-ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
image: 10.17.xx.xx/maven:3-jdk-8-alpine

variables:
MAVEN_OPTS: "-Dmaven.repo.local=/root/.m2/repository -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
MAVEN_CLI_OPTS: "--batch-mode --errors --show-version -Dmaven.test.skip=true -s /root/.m2/settings.xml"

test:validate:
stage: test
script:
- test $(find service -type f -path "*/platformService/*" | wc -l) -eq 0
- test $(find service -name "*.properties" -path "*/properties/*" | wc -l) -eq 0
- test $(find web -name "index.js" -path "*/config/*" | wc -l) -eq 0
- test $(find web -name "*.vue" -type f -exec grep -E 'debugger|console\.log' {} \; | wc -l) -eq 0
tags:
- common

test:compile:
stage: test
before_script:
- wget http://10.17.xx.xx/download/settings.xml -O /root/.m2/settings.xml
script:
- mvn $MAVEN_CLI_OPTS -f service/spdHERPService/pom.xml clean compile
tags:
- common

Docker设置

其中Runner可能会用到Docker私服,现在我们是用Nexus搭建(IP:10.17.xx.xx)的,Docker需要登录才能使用。下面是Docker的配置,外面配置了两个代理,这样下载外面的镜像速度就很快了。

daemon.json
1
2
3
4
5
6
7
{
"registry-mirrors": ["https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn"],
"insecure-registries": ["10.17.xx.xx"],
"disable-legacy-registry": true,
"log-driver": "json-file",
"log-opts": {"max-size": "5m", "max-file": "3"}
}

待Docker配置好后就需要配置Runner了。首先获取Docker登录私服的登录信息,官网有两个方法。一个是
docker login registry.example.com --username my_username --password my_password,然后查看~/.docker/config.json;另外一个是echo -n "my_username:my_password" | base64。然后就是把登录信息加到Runner的配置文件中去。万事OK

config.toml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
concurrent = 10
check_interval = 0

[[runners]]
name = "122-runner"
url = "http://10.17.xx.xx/gitlab/"
token = "xxxtoken"
executor = "docker"
environment = ["DOCKER_AUTH_CONFIG={ \"auths\": { \"10.17.xx.xx\": { \"auth\": \"authtoken\" } } }"]
[runners.docker]
tls_verify = false
image = "alpine:latest"
privileged = false
disable_cache = false
volumes = ["/cache", "/root/.m2"]
shm_size = 0
[runners.cache]