之前搞iOS自动化回归接触了jenkins,但是被jenkins上一大堆的配置项搞得很烦。最近浏览相关信息,发现GitLab自己出了一套CI,了解了一下发现虽然功能比较简单,但已经够用了。下面我们一步一步来配置GitLab CI。
为什么要用CI?
Continuous integration(CI,中文:持续集成)是软件开发过程中,频繁地(一天多次)将代码集成到主干。可以让产品快速的迭代,同时也能够快速的发现问题。
而GitLab能够很好的支持CI,当我们配置好CI后,我们每次的提交都会触发CI的脚本,然后能够在GitLab上看到脚本执行后的结果。
本文中使用的环境
- GitLab 8.3
- Mac OS X El Capitan
- Xcode 7.3 已安装command-line tools
- iOS 9.3
还有就是已经假设你已经在GitLab上创建了一个Xcode项目。
配置Xcode
Xcode唯一需要配置的就是要将你运行的scheme设置成Shared。
1. 打开Xcode项目
2. 选择Product > Scheme > Manage Schemes
3. 将对应的scheme勾选上Shared
安装配置GitLab Runner
参考官方文档
//下载runner到本地,如果https不行可以改成http试一试
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
//修改runner的权限
sudo chmod +x /usr/local/bin/gitlab-ci-multi-runner
`</pre>
这样就完成了runner的安装,下面就要为工程注册一个runner。首先我们需要知道GitLab的CI地址和项目的token。打开GitLab,进入对应的项目选择`Settings->Runners`,如下图所示,我们可以看到Specific runners的提示。
![](http://7xrr18.com1.z0.glb.clouddn.com/2016-04-21-14612422419143.jpg)
知道这两个值之后就可以注册runner了
<pre>`//运行gitlab-ci-multi-runner register命令
$ gitlab-ci-multi-runner register
WARNING: Running in user-mode.
WARNING: The user-mode requires you to manually start builds processing:
WARNING: $ gitlab-runner run
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...
//输入之前的URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci):
https://xxxx.com/ci
//输入token
Please enter the gitlab-ci token for this runner:
<CI runner token from Project > Settings > Runner>
//描述,这个随意了,一般用默认的就好
Please enter the gitlab-ci description for this runner:
[Your-Mac\'s-Name.local]:
//runner的tag,这个是用于执行脚本时指定runner用的,所以最好起一个比较容易区分的
Please enter the gitlab-ci tags for this runner (comma separated):
test_machine
Registering runner... succeeded runner=724a60b5
//runner的执行器,因为Xcode项目需要用xcodebuild来执行,所以选shell
Please enter the executor: virtualbox, ssh, shell, parallels, docker, docker-ssh:
shell
Runner registered successfully. Feel free to start it, but if it's running
already the config should be automatically reloaded!
`</pre>
这时候刷新GitLab的Runner页面,就会看到刚刚创建好的runner了。
![](http://7xrr18.com1.z0.glb.clouddn.com/2016-04-21-14612423022196.jpg)
本地的话也可以用`gitlab-ci-multi-runner verify`来确认runner的状态
<pre>`$ gitlab-ci-multi-runner verify
WARNING: Running in user-mode.
WARNING: The user-mode requires you to manually start builds processing:
WARNING: $ gitlab-runner run
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...
Veryfing runner... is alive runner=724a60b5
`</pre>
都确认好之后就可以启动runner了:
<pre>`cd ~
gitlab-ci-multi-runner install
gitlab-ci-multi-runner start
`</pre>
## 编写配置文件
环境都准备好了,接下来就可以开始进行配置文件的编写了。下面是一个简单的配置文件:
<pre>`stages:
- build
build_job:
stage: build
script:
- export LC_CTYPE=en_US.UTF-8
- xcodebuild clean -workspace ProjectName.xcworkspace -scheme SchemeName | xcpretty
- pod install
- xcodebuild test -workspace ProjectName.xcworkspace -scheme SchemeName -destination 'platform=iOS Simulator,name=iPhone 6s,OS=9.3' | xcpretty -s
tags:
- test_machine
`</pre>
下面简单说一下配置文件的组成:
stages
用于描述构建的阶段,一般有build,test,deploy等,stages可以在所有的job中使用。build_job
,job名字这个可以随意,后面会跟stage
用于声明执行哪个stage,然后script
用于具体描述执行的内容。tags
用于指定执行的runner,这个就是填之前注册时写的tag。
官方提供了一个检验配置的语法是否有问题的校验工具,在编写之后可以在这里验证一下。还有就是把
ProjectName
和SchemeName
替换成你自己的,因为我用的是workspace所以是-workspace WorkspaceName.xcworkspace
,如果你用的是project,那么就需要相应的替换成-project ProjectName.xcodeproj
。修改好之后将文件命名为
.gitlab-ci.yml
保存在项目git目录的根目录下,注意这里是根目录。然后在提交到git上之前,强烈建议将执行的命令在本地执行一遍,确认没有问题之后再提交。当然这是非常简单的配置了,还有更复杂的配置情况,可以阅读官方文档来了解。
触发CI
剩下的就简单了,只需要有git提交到GitLab上就会触发我们之前配置的构建。构建运行之后可以到GitLab的Builds中查看。
而且这样我们每次提交之后都会看到提交之后构建的结果,这样如果有问题的话就能够很快速的发现并解决。
好了,到这里我们就已经全部配置完成了。可以继续开心的去搬砖了。。。
more
如果想要关闭本地的runner的话,可以这样:
`$ gitlab-ci-multi-runner stop $ gitlab-ci-multi-runner status gitlab-runner: Service is not running. //再次开启的话也很简单 $ gitlab-ci-multi-runner start $ gitlab-ci-multi-runner status gitlab-runner: Service is running!
安装xcpretty,可以看到例子的脚本命令里面有一个xcpretty,这个东东是用于简化xcodebuild的输出。它的说明非常喜欢:It does one thing, and it should do it well. 建议大家可以都装一下,项目安装说明是在这里。