对于程序员来说,遇到项目需要频繁地集成各成员的工作是相当头痛的。因为每次集成都需要进行一系列的质量把控(编译,打包,测试等),以保证各环节尽可能地少出错误。如此反复不仅消耗大量的时间和精力,也消磨着自己的耐心。那么,如何做到持续集成,把一些繁琐且无意义的工作交付给电脑自动完成,这是一个相当有必要去考虑的事情。比较,能提升幸福感的事情,何乐而不为呢。
不重复造轮子
充分借助已有资源,考虑自身实际场景,简单而有效的解决问题才是目标。很多人都推荐使用 Jenkins 来搭建持续化集成平台,这是一个行之有效的解决方案,下面就来看看如何减少集成问题并且快速实现。
一个理念:能让电脑帮忙自动搞定的东西就尽量不要折腾自己
准备工作
本篇文章主要介绍 Android 项目的持续化集成平台基于 Jenkins 的实现,关于 iOS 的持续集成,推荐同事之前写的一篇一步一步构建iOS持续集成:Jenkins+GitLab+蒲公英+FTP这篇文章,内容非常详细。
主要介绍一下搭建Android平台环境时渠道的各种坑
image.png image.png image.png image.pngGradle Path: /Users/baishixian/.gradle/wrapper/dists/gradle-4.0-milestone-1-all/2rnr7rhi2zsmkxo9re7615fy6/gradle-4.0-milestone-1
image.png image.png image.png image.png image.png使用git作为源码仓库这里有坑,使用https的方式行不通,必须用ssh的方式才行,不然一直pull代码到本地不成功。
Jenkins SSH connection to a Git server is not working using username/password image.png image.png image.png
创建ssh 非对称加密 key,我这用的是阿里云code,参考https://code.aliyun.com/help/ssh/README
image.png image.png然后在Jenkins中配置ssh的私钥
image.png image.png image.png image.png image.png对于 Jenkins giving The SDK Directory doesn't exist 或者Jenkins build failed due to missing android SDK的问题,在编译时会造成如下问题:
image.png需要配置ANDROID_HOME
image.png image.png image.png代码仓库配置好了,意味着Jenkins具有了访问GitHub代码仓库的权限,可以成功地拉取代码。
那Jenkins什么时候执行构建呢?
这就需要配置构建触发策略,即构建触发器,配置项位于【Build Triggers】栏目。
触发器支持多种类型,常用的有:
- 定期进行构建(Build periodically)
- 根据提交进行构建(Build when a change is pushed to GitHub)
- 定期检测代码更新,如有更新则进行构建(Poll SCM)
构建触发器的选择为复合选项,若选择多种类型,则任一类型满足构建条件时就会执行构建工作。如果所有类型都不选择,则该Jenkins Job不执行自动构建,但可通过手动点击【Build Now】触发构建。
关于定时器(Schedule)的格式,简述如下:
- 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.
通常情况下需要指定多个值,这时可以采用如下operator(优先级从上到下):
** 适配所有有效的值,若不指定某一项,则以占位;*
** M-N适配值域范围,例如7-9代表7/8/9均满足;**
** M-N/X或/X:以X作为间隔;*
A,B,C:枚举多个值。
另外,为了避免多个任务在同一时刻同时触发构建,在指定时间段时可以配合使用H字符。添加H字符后,Jenkins会在指定时间段内随机选择一个时间点作为起始时刻,然后加上设定的时间间隔,计算得到后续的时间点。直到下一个周期时,Jenkins又会重新随机选择一个时间点作为起始时刻,依次类推。
为了便于理解,列举几个示例:
H/15 * * * *:代表每隔15分钟,并且开始时间不确定,这个小时可能是:07,:22,:37,:52,下一个小时就可能是:03,:18,:33,:48;
H(0-29)/10 * * * *:代表前半小时内每隔10分钟,并且开始时间不确定,这个小时可能是:04,:14,:24,下一个小时就可能是:09,:19,:29;
H 23 * * 1-5:工作日每晚23:00至23:59之间的某一时刻;
网友评论