随着业务需求的演进,工程的复杂度会逐渐增加,自动化的践行日益强烈。事实上,工程的自动化一直是我们努力的目标,能有效提高我们的生产效率,最大化减少人为出错的概率,实现一些复杂的业务需求应变。
场景如下,公司现在的测试人员每次需要测试新版本,都需要开发人员打包,放到ftp,测试人员然后从ftp上拷贝到本地(或者用手机的ES文件管理器),再安装。尤其临近发版的一周,几乎每天都要新版本。这样的话,有两方面的影响:第一,打断了开发人员的开发进度;第二,开发人员打包效率低下,尤其是ios,不顺的话,总是打的不对(可能是证书的问题)。
要解决这个问题,必须实现移动端应用的自动化构建。具体说来就是,使用持续集成(CI)系统jenkins,自动检测并拉取最新代码,自动打包Android的apk和ios的ipa,自动上传到内测分发平台蒲公英上。(接下来,测试人员只要打开一个(或多个)固定的网址,扫描一下二维码,就能下载最新的版本了…)
因为要编译ios,所以选择Mac OSX 10.11.1。
无论是哪个操作系统,jenkins的配置是一样的。
2
3
4 // 使用brew安装
brew install jenkins
// 启动,直接运行jenkins即可启动服务
jenkins
默认访问:8080/, 可进入jenkins配置页面。
安装Jenkins相关插件点击系统管理>管理插件>可选插件,可搜索以下插件安装
git插件(GIT plugin)
ssh插件(SSH Credentials Plugin)
Gradle插件(Gradle plugin) - android专用
Xcode插件(Xcode integration) - ios专用
主页面,新建 -> 构建一个自由风格的软件项目即可。
对于类似的项目,可以选择 -> 复制已有的Item,要复制的任务名称里输入其他job的首字符会有智能提示。
如果安装了git插件,在源码管理会出现Git,选中之后:
Repositories -> https://github.com/openproject/ganchai, 如果是ssh还要配置Credentials。
Branch -> */master,选定一个要编译的分支代码。
如下:
如果是私有的仓库(比如git://xxxxx.git),点击Credentials - Add,弹出对话框,配置sshkey最简单了:
在构建触发器中,有两种自动拉取代码并编译的策略:
设置Poll SCM,设置定时器,定时检查代码更新,有更新则编译,否则不编译(我暂时用的是这个)。
也可以设置Build periodically,周期性的执行编译任务。
关于定时器的格式,我只能从网上摘抄一段稍微靠谱一点的说明:
This field follows the syntax of cron (with minor differences). Specifically, each line consists of 5 fields separated by TAB or whitespace: MINUTE HOUR DOM MONTH DOW MINUTE Minutes within the hour (0-59) HOUR The hour of the day (0-23) DOM The day of the month (1-31) MONTH The month (1-12) DOW The day of the week (0-7) where 0 and 7 are Sunday. To specify multiple values for one field, the following operators are available. In the order of precedence, * '*' can be used to specify all valid values. * 'M-N' can be used to specify a range, such as "1-5" * 'M-N/X' or '*/X' can be used to specify skips of X''s value through the range, such as "*/15" in the MINUTE field for "0,15,30,45" and "1-6/2" for "1,3,5" * 'A,B,...,Z' can be used to specify multiple values, such as "0,30" or "1,3,5" Empty lines and lines that start with '#' will be ignored as comments. In addition, @yearly, @annually, @monthly, @weekly, @daily, @midnight, @hourly are supported.