gitlab-ci

1. 背景

团队开发项目遇到的问题:

  • 版本更新较为频繁的问题。
  • 测试覆盖不到位的问题。

2. Jenkins和Gitlab CI的简单比较

Jenkins是老牌持续集成开源平台:

  • 优点:现在已经发展到2.0,各种功能插件非常丰富,支持groovy编写脚本,尤其支持LDAP等与企业集成的功能,基本上是CI的不二之选。
  • 缺点:界面丑陋,配置相对复杂,一般需要专门的IT运维人员维护,与代码管理平台结合度相对较低,对Docker支持需要安装额外的插件。

Gitlab CI,新锐CI平台:

  • 优点:界面美观,原生支持docker及多种机制,与代码管理工具结合度非常高,配置简单,使用YAML语言,程序员即可编写自动编译脚本。
  • 缺点:控制性不够好,生态还不够齐全,YAML有一定的局限性,复杂任务需要些shell完成。

Jenkins适合复杂集成任务,而Gitlab CI适合相对简单的持续集成。

企业中一般会2个同时使用,而两者的分工可以为:

  • develop环境,直接使用Gitlab CI做持续的编译、测试、开发环境部署、API测试、客户端打包等工作
  • staging和production环境,使用Gitlab CI+Jenkins辅助配合的方式,或者直接由jenkins全包,因为上线会涉及到不同版本的资源更改、根据参数调整编译和打包等相对复杂的任务,这时Gitlab CI就会相形见肘了,虽然可以自己写Shell来支持,但控制性(如鸡肋的trigger)差强人意

3. 项目中的使用

项目中会使用J2EE, 大致阶段分为:代码检视、编译、测试、打包、部署。

dev环境,均使用Gitlab CI,比较简单,可以直接查询Gitlab CI文档,如果用过Travis CI,对于Gitlab CI就更不会有问题了。

staging和production环境,选用Gitlab CI+Jenkins混合的模式,具体阶段分工为:

  • Gitlab CI负责:代码检视、编译、打包、测试
  • Jenkins负责:打包(主要是资源替换)、部署

在gitlab中完成持续集成CI包括两个操作:

  • 配置一个Runner(用来编译、测试、打包的服务器节点)。
  • 在项目根目录增加YAML格式的CI脚本文件.gitlab-ci.yml

3.1 install configue gitlab-ci-multi-runner

  • GitLab 部署 CI 的第一步就是安装 gitlab-ci-multi-runner,你可以把它理解为:跑 CI 的服务。

    将一台mac计算机配置成我们的一个Runner,基本原理就是在Mac上安装一个代理程序gitlab-ci-multi-runner,然后将mac注册到gitlab服务器端,然后这台mac机器就能接收到gitlab服务器下发的CI任务,完成相应的编译、测试、打包等工作,然后将结果反馈给gitlab服务器。

在一台Mac机器上执行如下命令安装gitlab-ci-multi-runner:

1
2
3
sudo curl --output /usr/local/bin/gitlab-ci-multi-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-darwin-amd64
sudo chmod +x /usr/local/bin/gitlab-ci-multi-runner
  • 进入项目的Runner配置页面,如下图所示:

gitlab_config_runner

  • 在Mac机器上执行如下命令,将这台Mac注册到gitlab并绑定到我们示例项目。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
gitlab-ci-multi-runner register
#Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
##输入上图中的URL.
#Please enter the gitlab-ci token for this runner:
##输入上图中的token.
#Please enter the gitlab-ci description for this runner:
##输入一个描述信息,这里我们输入mac_runner
#Please enter the gitlab-ci tags for this runner (comma separated):
##输入一些标签,这里我们输入"mac,xcode7.1"
# Registering runner... succeeded runner=euasz2j9
#Please enter the executor: docker-ssh+machine, docker, docker-ssh, parallels, shell, ssh, virtualbox, docker+machine:
##这里我们输入shell,因为ios项目的编译、测试、打包我们都采用脚本来执行。
#Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
#注册成功,接下来启动它
gitlab-ci-multi-runner install
gitlab-ci-multi-runner start

现在我们的Mac机器就注册为一个Runner了,查看项目的Runner页面,如下图所示:

gitlab_runner_running

我们的Runner就成功注册上了。接下来就可以编写CI的脚本了。

  • 增加CI脚本文件.gitlab-ci.yml

在项目根目录创建.gitlab-ci.yml文件,内容如下:

1
2
3
4
5
6
7
8
9
before_script:
- export JAVA_HOME=/usr/local/jdk1.7.0_79
job:
only:
- master(每一次提交到master分支触发script)
script:
- mvn clean package -Ptest -q -Dmaven.javadoc.skip=true

before_script 部分将在每一个job前被执行。每个job包含的参数,例如script (shell script)、tags (只有运行这个tag/tags才允许选择这个构建),以及onlyexcept 参数来定义允许运行构建的分支名称。only 部分优先于 “except”。参见:Configuration of your builds with .gitlab-ci.yml

参考**

热评文章