这里列出使用过程中遇到的问题,并尝试给出解决方案。
前言
关注持续集成、持续部署很久,看到Gitlab9社区版本功越来越完善,所以现在虚拟机是上手一下,玩熟练了推荐给公司的开发小组。
交代一下测试环境:
- gitlab版本 9.0.0
- gitlab-runner版本9.0.0
- OS:CentOS 7
- 项目:maven下的springboot样例程序
- jdk8
在注册runner的时候输入的tag有什么用?
下面是注册runner的交互过程,在操作过程中我对tag的输入一直没理解(问题就出在这里)。
[root@localhost ~]# gitlab-ci-multi-runner register
Running in system-mode.
## gitlab服务器的域名或IP+/ci
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.92.128/ci
## runnerToken,gitlab服务器上获取
Please enter the gitlab-ci token for this runner:
3kjzGzK4PZDA73HYPHrP
## 描述
Please enter the gitlab-ci description for this runner:
[localhost.localdomain]: jdk8·test
##下面的tag输入之后到底有什么用??
Please enter the gitlab-ci tags for this runner (comma separated):
js
Registering runner... succeeded runner=3kjzGzK4
## 执行容器,我用的shell
Please enter the executor: virtualbox, docker-ssh+machine, docker, docker-ssh, parallels, shell, ssh, docker+machine, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
当我注册完runner,满心欢喜推送了一个带有.gitlab-ci.yml
文件的项目上去后,我发现流水线一直是pending
状态,查看job的提示显示作业被卡住。请检查runner、**此作业被卡住,因为没有任何活动的 runner 能运行此构建。 **这样的字样。明明runner注册成功了,在排除了共享runner、独自runner的问题之后,我看到了官方.gitlab-ci.yml
文件中的介绍点击查看官方介绍:tags,
摘入官方资料
tags
is used to select specific Runners from the list of all Runners that are allowed to run this project.
During the registration of a Runner, you can specify the Runner's tags, for example ruby, postgres, development
.
tags
allow you to run jobs with Runners that have the specified tags assigned to them:
job:
tags:
- ruby
- postgres
The specification above, will make sure that job is built by a Runner that has both ruby AND postgres tags defined.
所以,当我把.gitlab-ci.yml
文件中加入tags
标示之后,项目可以顺利的running了。
除此方式外,还可以在runner注册时候将runner选为可以运行没有任何标签的作业 这一项。同样可以解决问题,只不过这种方式在托管的代码环境复杂的时候就不能随性的设置多种runner环境了。
2. 基于maven的Runner环境怎么配置?
基于SpringBoot的样例工程,需要用到maven构建,先看.gitlab-ci.yml
的代码
build:
script:
- 'pwd && mvn test'
tags:
- java
这里就是执行以下mvn test
,因为tags
标示的是java
,结合文章上面一个问题,这里需要使用打了标签为java
的runner进行构建。
而我遇到的问题是,maven 中的setting.xml
文件应该放在哪里?
setting.xml文件有位置的优先级,从低到高依次:基于项目的pom.xml->user文件加下.m2/setting.xml->maven安装目录/conf/setting.xml。
之前我将配置文件放在了root用户的~/.m2/setting.xml,结果Runner执行的时候并没有读取到我的配置,我猜gitlab-runner执行时使用的是gitlab-runner用户,因此直接修改maven安装目录/conf/setting.xml,保存再次执行,搞定。