Linux+Jenkins+Gradle构建Android参数化自动打包(一)

前言

关于Jenkins部署安卓自动打包有很多好处,可以配置参数进行构建,选择打包环境、设置App版本、设置加密开关等.起初,笔者也是参考了一些网上的教程,将自动化打包构建在了自己的windows开发机器上,而将Jenkins自动构建Android部署在服务器上和本机上在环境构建方面略有不同,坑略多.

参数化构建的过程却是很便捷,但是部署在本机上自动化打包其实是个会增加打包时长的工作,因为自动化打包会首先去代码仓库拉取代码到本地,然后再开始打包,这个过程会比直接用AS打包慢很多.后来提出需求,要将自动化打包配置到服务器上.运维就提供了一台Linux服务器,并且上面已配置后台的自动化打包环境,用的是Jdk1.7和比较旧版本的Jenkins,于是我们得另行使用独立的安装的环境.

最终结果

最终我们要实现的是实现Jenkins上面配置应用版本号Git分支应用渠道请求基地址应用环境等参数,进行一键参数化构建打包上传至蒲公英并发送邮件通知给自定义的接收者

最终实现参数化配置大致如下所示:

jenkins_total

发送邮件(邮件内容较长,进行了相应缩小)

jenkins_total

环境搭建

所需环境

  • 新版Jenkins(需能安装参数化构建插件)
  • Tomcat
  • 新版Jenkins
  • Android SDK
  • Android NDK
  • aapt
  • Git
  • Gradle
  • 其它(视自身项目所需)

CenterOS64位已有环境

  • Jdk1.7
  • Tomcat
  • 旧版Jenkins

1. Jdk安装及配置

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

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

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

1
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

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

1
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 以下是笔者的环境,请自行替换路径

1
2
3
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

上传到指定目录解压

1
unzip gradle-3.3-all.zip

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

1
export GRADLE_HOME=/home/gradle-3.3/bin

4. Android Sdk For Linux 安装及更新

这里下载Sdk解压都不是难点.难点在于安装之后更新的问题.

sdk_manager_agree_license

用AS或者Eclipse的同学肯定接触过Sdk Manager,此处选择更新后要手动点Accept License才能启动更新.但是在Linux下没有界面化的勾选可用.因此需要用脚本来更新.网上有说复制License的方法笔者试了无效,也许是姿势不对吧,此处也是踩了很久的坑才搜出来的解决方法:

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

这里也为不愿跳传送门的同学说明一下,就几个步骤.

a.查看可更新列表

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

b.编辑脚本

1
2
3
4
5
6
7
#!/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安装及环境变量配置

下载安装并配置环境变量

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

7. Jenkins安装及配置

a. 下载

下载Jenkins将war包放入Tomcat的webapps目录下,启动tomcat

然后在地址栏输入路径http://localhost:/8777 其中8777为第二步中自定义的端口号

b. 插件安装

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
(不明为什么少8)

因为Jenkins版本不同,实际使用中发现缺失不少

以下附上笔者所安装的所有插件(若无问题的可跳过)

jenkins_plugin_1

jenkins_plugin_2

jenkins_plugin_3

jenkins_plugin_4

jenkins_plugin_5

jenkins_plugin_6

jenkins_plugin_7

jenkins_plugin_8

c. 环境变量配置

环境变量

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

jenkins_plugin_8

其它如邮件相关配置的在下篇会说明

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

0%