使用gitlab进行代码版本管理时,希望能够在将本地代码push到远程分支的时候或者在将远程分支请求合并到master主分支上的时候,为了确保代码的安全性(以防存在编译错误的代码合入版本中),可以自动进行代码的编译。只有编译通过了才允许将代码合入主分支。
下面介绍如何使用gitlab的CI/CD实现上述期望功能。
一、安装并启动gitlab-runner
首先在安装gitlab的服务器上安装gitlab-runner,安装命令如下:
sudo yum install gitlab-runner
安装成功后将gitlab-runner启动起来。 进入安装目录下的bin/下:
gitlab-runner start
二、配置runner
2.1 获取runner配置信息
在gitlab项目页面选择左侧 Settings ——> CI/CD ——> Runner settings ——> Expand
可以看到下面信息:
图中Setup a specific Runner manually
模块下的2和3是下一步注册配置服务器上的runner需要的信息。
2.2 配置runner信息
在安装gitlab-runner的服务器端注册新的runner:
gitlab-runner register
按照提示输入配置信息:
[root@awaken120 bin]# gitlab-runner register
Running in system-mode.
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://1.1.1.1/ #需根据上述页面的配置信息2填写URL
Please enter the gitlab-ci token for this runner:
M************** #需根据上述页面的配置信息3填写token
Please enter the gitlab-ci description for this runner:
[awaken120]: project #描述随便写
Please enter the gitlab-ci tags for this runner (comma separated):
project #tag 后面的项目文件.gitlab-ci.yml中用到
Whether to run untagged builds [true/false]:
[false]: true #是否运行未打标签的项目,选择的true
Whether to lock Runner to current project [true/false]:
[false]: #直接回车,选择false
Registering runner... succeeded runner=M8c-SAdx
Please enter the executor: docker-ssh+machine, kubernetes, parallels, shell, docker+machine, virtualbox, docker, docker-ssh, ssh:
shell #此处选择的shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
2.3 项目中配置.gitlab-ci.yml
在项目根目录下增加.gitlab-ci.yml
文件,内容:
variables:
MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
corresponding plugins.
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version -DinstallAtEnd=true -DdeployAtEnd=true"
stages:
- build
- test
- deploy
cache:
paths:
- .m2/repository
build-job:
stage: build
tags:
- project
only:
- branches
except:
- master@project/project
script:
- 'mvn compile'
# For merge requests do not `deploy` but only run `test`.
# See https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
test-job:
stage: test
tags:
- project
only:
- branches
except:
- master@project/project
script:
- 'mvn test'
再次将本地带有.gitlab-ci.yml文件的分支push到远程分支,gitLab就会自动CI编译了。