CI是个好东西
本身现在所在的团队使用Git的人不多,所以往GitLab上提交代码的时候往往有一些不合格的代码,后来发现GitLab CI可以完美地解决这个问题。
需求及实现
- service目录中不包含platformService目录。
- 所有项目中不能包含.properties文件,以.properties.sample文件提供给大家,然后.gitignore目录中也忽略.properties文件
- config目录中不包含index.js文件,以index.js.sample文件提供给大家
- 所有vue代码中不能包含调试用代码”debugger|console.log”
- Java代码能编译通过
只有通过以上5点的代码才能合并到主仓库,避免污染代码库。其实原因很简单,看下面就清楚。
.gitlab-ci.yml1 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.json1 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.toml1 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]
|