Jenkins+Git+Gradle+Android 自动化打包

Jenkins

前言

调研需求:

以前都是通过IDE(Eclipse or Android Studio)手动生成apk通过QQ或者邮件发送给测试人员进行测试,不仅影响平常开发的效率,也给开发带来了很多不必要的痛苦和麻烦,现在要求对项目进行持续集成,也就是说通过某种方式定时(比如每晚凌晨三点)自动将git库中最新的代码pull下来编译打包,测试人员每天早上上班都能拿到最新的代码打包的Apk。

Jenkins介绍

Jenkins是一个开源软件项目,它前身是Hudson,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

功能

Jenkins功能包括:
1、持续的软件版本发布/测试项目。
2、监控外部调用执行的工作。

目的:

基于服务器(Linux)
Jenkins+Git+Gradle+Android 自动化打包

主要流程:
一、Linux环境配制
二、下载Jenkins, 安装,启动。
三、登录Jenkins,安装插件
四、配置系统配置
五、创建任务
六、构建任务
七、拿到apk
八、后续怎么做看个人需要,比如写脚本输入到指定路径,看到有人上传到了蒲公英。。。

准备工作:

Linux环境配制:

1、JDK安装及配置

由于Android开发使用的 Jdk1.8,因此不能复用服务器上现有的JDK;

首先去Oracle Downloads下载 Jdk for Linux.下载jdk-8u131-linux-x64.tar.gz

上传到服务器,进入相关目录解压:

命令:tar -zxvf jdk-8u131-linux-x64.tar.gz

可将目录移至其他目录,其实最好在解压前就将压缩包移至目标目录

JDK环境变量配置(可选)

由于后台使用了JAVA_HOMEJENKINS_HOME等一系列环境变量名,所以服务器上默认调用的会是他们的环境变量,我们开发的一套只能在自己的Tomcat、Jenkins中进行指定,具体下文会进行说明

2、Tomcat安装及配置

首先去Tomcat Download选择版本进行下载,这里选择的是apache-tomcat-7.0.79.tar.gz(根据自己的需求下载)

上传到服务器,进入相关目录解压:
tar -zxv -f apache-tomcat-7.0.79.tar.gz

a.端口修改
由于常规tomcat端口被已有tomcat占用,因此我们需要修改端口

进入conf目录下的server.xml修改,用Vim修改.不会用的同学请出门左转度娘主要修改的是,设置为自定义端口号。

* Tomcat admin port 即文件最上面的端口号
* Http/1.1 port 连接访问的端口号
* AJP/1.3 port

b.环境配置
指定Tomcat运行时环境,在bin目录下修改setclasspath.sh

export JAVA_HOME=/usr/android/java/jdk1.8.0_131
export JRE_HOME=/usr/android/java/jdk1.8.0_131/jre
export JENKINS_HOME=/home/android/jenkins

3、Gradle安装及配置

首先去Gradle Download下载对应Gradle版本,笔者使用到的是gradle-3.3-all.zip

上传到指定目录解压:
unzip gradle-3.3-all.zip

然后添加环境变量vim /etc/profile,在环境变量配置处增加一句

export GRADLE_HOME=/home/gradle-3.3/bin

4、Android Sdk For Linux 安装及更新

这里下载Sdk解压都不是难点.难点在于安装之后更新的问题
用AS或者Eclipse的肯定接触过Sdk Manager,此处选择更新后要手动点Accept License才能启动更新.但是在Linux下没有界面化的勾选可用.

Android SDK 更新

因此需要用脚本来更新.网上有说复制License的方法笔者试了无效,也许是姿势不对吧,此处也是踩了很久的坑才搜出来的解决方法:

更新Sdk方法传送门 这里先感谢下该作者

也可以用脚本更新:就几个步骤

a.查看可更新列表

在Sdk的tools目录使用./android list sdk —all查看远程服务器提供的Sdk包的序号,记录想要更新的Sdk序号

b.编辑脚本

#!/usr/bin/expect
set timeout -1
spawn /usr/local/android-sdk-linux/tools/android update sdk -u -a -t 1,2,3,24,25,26,27,28,30,95,96,102,103,104,105,106,107
expect {
    "Do you accept the license" { exp_send "y\r" ; exp_continue }
    eof
}

此处1,2,3,…为需要下载的SDK序号

c.运行脚本

待脚本跑完,sdk就更新完毕了!

注意:此处脚本用到了expect,需要在服务器上安装,此处提供expect安装传送门

*5、NDK for Linux安装(可选)
安装较简单,后续需配置Jenkins系统变量,下文会进行说明:
项目因用到了JNI,需要安装NDK,可是后期发现在项目里每次均去编译jni导致项目的compile sdk不能使用高于23的,致使Instant Run等功能使用,很影响开发效率.后期改在项目外编译好了静态库然后放入项目中,这样不会限制项目自身的SDK版本,因此若未使用JNI的项目,则可跳过此步骤

6、Git安装及环境变量配置
下载安装并配置环境变量

export GIT_HOME=/usr/android/git-2-2.12.2/bin

7、 Jenkins安装及配置

a.下载 点击跳转下载地址

下载Jenkinswar包放入Tomcatwebapps目录下,启动tomcat
然后在地址栏输入路径http://localhost:/8777 其中8777为第二步中自定义的端口号

b. 插件安装
然后安装插件(基本参考网上的)

1.Branch API Plugin
2.build timeout plugin
3.build-name-setter
4.Credentials Binding Plugin
5.description setter plugin
6.Dynamic Parameter Plug-in
7.Environment Injector Plugin
9.Git plugin
10.GIT server Plugin
11.Gradle Plugin
12.Git Parameter Plug-In
13.Pipeline: Basic Steps
14.Pipeline: Build Step
15.Pipeline: Input Step
16.Pipeline: Nodes and Processes
17.Pipeline: Stage Step
18.Scriptler
19.Workspace Cleanup Plugin
20.Post-Build Script Plug-in
21.Email Extension Plugin
22.SSH Slaves plugin
23.Timestamper

因为Jenkins版本不同,实际使用中发现缺失不少!(下面是随便贴几个)


Jenkins 插件

c. 环境变量配置

环境变量

首先点击系统管理->系统设置配置Jdk、Android Sdk、Gradle、Android Ndk环境变量(此处也可配置Git目录,笔者是将Git目录配置在Linux环境变量中了)

环境变量

至此环境大体上配置已经完成,即可进入项目相关配置。。。

Jenkins项目配置

首先创建一个项目,将构建保持的天数和个数进行限制:
注意:此处感谢后台同事提示,因为Android SDK NDK 就特别占空间了,如果构建缓存不进行限制,则很快服务器空间就会不足

创建工程

参数构建配置

择择构建平台:


择择构建平台

选择打包环境:


选择打包环境

是否由Jenkins构建:


是否Jenkins 构建

APP版本号:


APP 版本控制

自定义时间:


自定义时间

构建者信息:

构建者信息

注意:因为的公司对打包的Apk名以及测试版本号时间戳显示的要求,因此需要使用动态参数!(还有其他参数均与以上类似,可自行配置)

!!! 记住尤为重要的是这些参数都是Jenkins上配置的Gradle属性,得传递到App的Gradle中!

源码管理:
在源码管理处配置Git账号

配制源码地址

Gradle构建脚本(增加构建动作)


构建脚本

配置输出命令:

clean
assemble'${PRODUCT_FLAVOR_BUILD}${ENVIRONMENT_BUILD}'
--stacktrace
—debug
这段动态脚本相当于 clean assembleXiaomiRelease

构建后操作:(比如可以上传到第三方平台,服务器等。)


构建后操作

准备构建项目:

构建项目

选择好需要构建的参数,选择开始构建,每一次构建都会自动从git拉取最新的代码.第一次构建Jenkins需要下载相应的jar包,耗时会比较久(如果构建失败,请继续阅读接下步骤)

构建完成:

构建完成

总结:

以上是Jenkins+Git+Gradle+Android 自动化打包及自动化构建过程,CI可以自己随时打包,从此不再麻烦开发人员。
相关难点:

  • Linux 服务器环境的配制
  • JobProject相关的配制
  • Gradle 动态脚本编写
  • 处理好多渠道问题
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容