参考文章:
持续集成是什么?
gitlab push代码通过webhooks自动触发jenkins构建设置
CI(Continuous integration)
持续化集成,持续集成是什么?请参考文章持续集成是什么?
就是定时将代码提交然后走一系列验证最终保证代码健壮的思路
以使用cocoapod
管理的iOS
库来说,一个iOS
库从提交代码到验证的流程有一下几步:
pod lib lint
验证podspec
文件unit_test
ui_test
跑单元测试package
打包framework
publish
发布升级版本
现在我们以上为例简单介绍两种iOS
自动化ci
配置流程之所以说两种只是依托平台不同
- 基于
gitlab
- 基于
jenkins
一、基于gitlab
搭建CI
从gitlab 8.0
开始,就已经集成ci
了,整体的工作流程如下:
- 当
git commit
之后首先会判断当前项目是否开启CI
- 开启后会检查本地是否有
.gitlab-ci.yml
文件 - 读取
.gitlab-ci.yml
文件的配置核对触发条件 - 触发条件正确会调用配置的
ci-runner
按照.gitlab-ci.yml
配置执行相应的task
开启CI
Setting
->General
->Permissions
->Pipelines
编辑gitlab-ci.yml
gitlab-runner
通过gitlab-ci.yml
文件管理工程任务。配置文档
简单介绍下几个关键字:
- script执行的
shell
脚本 before_script and after_script
before_script
声明的配置会在所有job
执行之前after_script
声明的配置会在所有job
执行之后
stages定义了整个工程的不同阶段
- 每一个
job
都会有对应的stage
- 相同
stage
的job
是并行的
- 每一个
only and except是描述限制任务执行的规则,也就是触发条件,两者可以同时存在,支持正则Ruby regexp syntax).
tags
推送tag
触发branchs
指定分支触发
tags指定对应的
ci-runner
when指定当前
job
的触发时机
下面是项目中的配置:
|
|
配置CI-Runner
参考文档
- 安装
ci-runner
|
|
- 注册
runner
|
|
- 安装启动
|
|
启动完成会在gitlab
页面看到当前活跃的runner
到现在基本简单流程已经配置完毕,最核心的还是gitlabci.yml
的脚本实现,最终的执行效果可以在gitlab
上看到
二、基于jenkins
搭建CI
对于jenkins
来说CI
执行的流程步骤由Jenkinsfile
控制,Jenkinsfile
支持两种语法声明式 (在流水线 2.5引入)和脚本化流水线,详细看这里
这里只是简单介绍构建pipeline
流程,具体实现根据需求自行处理
创建pipeline
有三种方式,这里介绍第三种:手动编写一个 Jenkinsfile
文件, 然后提交到项目的源代码控制仓库中jenkins
安装好新建任务选择pipeline
任务
先看pipeline
选项看我们选择Pipeline script from SCM
配置完成之后只需要在项目创建Jenkinsfile
就好了,下面简单介绍下pipeline
语法,编写基础的Jenkinsfile
声明式流水线:所有有效的声明式流水线必须包含在一个 pipeline
块中
|
|
列举常用支持的字段:
key | value | desc |
---|---|---|
agent | any | 任何可用节点 |
none | 当在 pipeline 块的顶部没有全局代理, 该参数将会被分配到整个流水线的运行中并且每个 stage 部分都需要包含他自己的agent 部分 |
|
label | 指定标签的节点执行(mac 安装jenkins 文章里添加的多节点对应的标签) |
|
post | always | 任何时候都允许在 post 部分运行该步骤 |
changed | 当前运行状态与之前不同时允许在 post 部分运行该步骤 | |
failure | 失败时允许在 post 部分运行该步骤 | |
success | 成功时允许在 post 部分运行该步骤 | |
unstable | unstable 时允许在 post 部分运行该步骤 | |
aborted | aborted 时允许在 post 部分运行该步骤 | |
stages | 包含一系列一个或多个 stage 指令 | |
stage | stage 指令在 stages 部分进行,应该包含一个 实际上, 流水巷所做的所有实际工作都将封装进一个或多个stage 指令中 |
|
steps | steps 部分在给定的stage 指令中执行的定义了一系列的一个或多个steps。 |
下面看简单的jenkinsfile
:
其中调用shell
脚本的方法sh 'shell语句'
配置完jenkinsfile
之后便可以构建了
我们可以通过git
服务器提供的webhook
来实现自动触发:
目前我们使用gitlab
来做CI
,jenkins
用来打包使用,具体jenkins
的配置可以详细参照jenkins用户手册