Android Git 项目 Jenkins 持续集成 Gradle 自动打包

对于程序员来说,遇到项目需要频繁地集成各成员的工作是相当头痛的。因为每次集成都需要进行一系列的质量把控(编译,打包,测试等),以保证各环节尽可能地少出错误。如此反复不仅消耗大量的时间和精力,也消磨着自己的耐心。那么,如何做到持续集成,把一些繁琐且无意义的工作交付给电脑自动完成,这是一个相当有必要去考虑的事情。比较,能提升幸福感的事情,何乐而不为呢。

不重复造轮子

充分借助已有资源,考虑自身实际场景,简单而有效的解决问题才是目标。很多人都推荐使用 Jenkins 来搭建持续化集成平台,这是一个行之有效的解决方案,下面就来看看如何减少集成问题并且快速实现。

一个理念:能让电脑帮忙自动搞定的东西就尽量不要折腾自己

准备工作

本篇文章主要介绍 Android 项目的持续化集成平台基于 Jenkins 的实现,关于 iOS 的持续集成,推荐同事之前写的一篇一步一步构建iOS持续集成:Jenkins+GitLab+蒲公英+FTP这篇文章,内容非常详细。

主要介绍一下搭建Android平台环境时渠道的各种坑

Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第1张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第2张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第3张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第4张图片
image.png

Gradle Path: /Users/baishixian/.gradle/wrapper/dists/gradle-4.0-milestone-1-all/2rnr7rhi2zsmkxo9re7615fy6/gradle-4.0-milestone-1

Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第5张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第6张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第7张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第8张图片
image.png

Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第9张图片
image.png

使用git作为源码仓库这里有坑,使用https的方式行不通,必须用ssh的方式才行,不然一直pull代码到本地不成功。
Jenkins SSH connection to a Git server is not working using username/password

Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第10张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第11张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第12张图片
image.png

创建ssh 非对称加密 key,我这用的是阿里云code,参考https://code.aliyun.com/help/ssh/README

Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第13张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第14张图片
image.png

然后在Jenkins中配置ssh的私钥

Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第15张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第16张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第17张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第18张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第19张图片
image.png

对于 Jenkins giving The SDK Directory doesn't exist 或者Jenkins build failed due to missing android SDK的问题,在编译时会造成如下问题:

Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第20张图片
image.png

需要配置ANDROID_HOME

Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第21张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第22张图片
image.png
Android Git 项目 Jenkins 持续集成 Gradle 自动打包_第23张图片
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之间的某一时刻;

你可能感兴趣的:(Android Git 项目 Jenkins 持续集成 Gradle 自动打包)