黑马程序员技术交流社区

标题: 【黑马程序员杭州】在CenterOS部署Android参数化自动打包(一) [打印本页]

作者: 鱼丸儿    时间: 2018-1-21 10:47
标题: 【黑马程序员杭州】在CenterOS部署Android参数化自动打包(一)
本帖最后由 鱼丸儿 于 2018-4-25 11:41 编辑

前言
  在教程开始前,先说下写这篇文章产出的原因及环境.

  关于Jenkins部署安卓自动打包有很多好处,可以配置参数进行构建,选择打包环境、设置App版本、设置是否加密等.起初,笔者也是参考了一些网上的教程,将自动化打包构建在了自己的windows开发机器上,而将Jenkins自动构建Android部署在服务器上和本机上在环境构建方面略有不同,坑略多.参数化构建的过程却是很便捷,但是部署在本机上自动化打包其实是个会增加打包时长的工作,因为自动化打包会首先去Git(笔者代码管理使用的是Git)拉取代码到本地,然后再去从无到有打包,这个过程会比直接用AS打包慢很多.后来自己提出需求,要将自动化配置到服务器上,于是之前公司运维同事扔了个CenterOS的地址和账号过来就完了.并且上面有配置后台的自动化打包,用的是Jdk1.7和比较旧版本的Jenkins,这下就增加了工作量,于是就有了血与泪的各种尝试及这篇文章的出现

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

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



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



环境搭建

所需环境



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

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

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

[Shell] 纯文本查看 复制代码
tar -zxvf jdk-8u131-linux-x64.tar.gz

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

Jdk环境变量配置(可选)

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

2. Tomcat安装及配置
首先去Tomcat Download选择版本进行下载.这里笔者选择的是apache-tomcat-7.0.79.tar.gz
上传到服务器,进入相关目录解压
[Shell] 纯文本查看 复制代码
tar -zxv -f apache-tomcat-7.0.79.tar.gz

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

进入conf目录下的server.xml修改,此处笔者是用Vim修改.不会用的同学请出门左转度娘

主要修改的是,设置为自定义端口号

b.环境配置

指定Tomcat运行时环境,在bin目录下修改setclasspath.sh 以下是笔者的环境,请自行替换路径



3. Gradle安装及配置

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

上传到指定目录解压

[Shell] 纯文本查看 复制代码
unzip gradle-3.3-all.zip


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

[AppleScript] 纯文本查看 复制代码
export GRADLE_HOME=/home/gradle-3.3/bin


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


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

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

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


a.查看可更新列表

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

b.编辑脚本

[Shell] 纯文本查看 复制代码

#!/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安装及环境变量配置

下载安装并配置环境变量

[Shell] 纯文本查看 复制代码
export GIT_HOME=/usr/android/git-2.12.2/bin


7. Jenkins安装及配置

a. 下载

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

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

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


[Shell] 纯文本查看 复制代码
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版本不同,实际使用中发现缺失不少

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





c. 环境变量配置
环境变量

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



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

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












欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2