为什么
Android
程序员常常需要打包给测试进行逻辑和界面测试,在新的项目模块开发中,我司使用了 Scrum敏捷开发;有优点也有缺点,在第一次尝试过程中,发现测试在最后的环节才参与到开发中,导致项目周期延长了几天;最后项目总结,提出测试不能参与到开发环节上的原因主要是 开发无法实时提供测试包
客户端开发总是觉得只有当逻辑和界面开发完成之后才能提供完整的测试包,这样的想法和做法自然是错误的,所以就有了今天的主题 Jenkins 自动化打包 Android
怎么做
当提出一个问题后,应该有大致的解决方法,如果没有,那就 谷歌 吧~
很长一段时间,网上有很多教程说起jenkins多么多么牛,可以释放你的左右手~ 一直没有去尝试,一个是没有时间,另外一个是没有实践的项目
下面开始动手操作吧,需要:
linux服务器一台
Git版本控制
JDK安装
Gradle,并配置环境变量
Android SDK,并配置环境变量
安装、配置Jenkins
2.1. linux 服务器
如果需要梯子,可以买国外的服务器:
不需要可以使用:
等等,当然,如果觉得价格太贵,可以选择配置虚拟机来实现;买好服务器之后,就可以连接了,
值得注意的是, 为了方便后续的操作,需要把服务器的ssh
的端口修改为 22(如果默认端口不是22):
##连接服务器之后输入该命令
vi /etc/ssh/sshd_config
滑动到最后,修改port
为22
2.2.Git 版本控制
yum install git
查看git
版本:
2.3. JDK安装
由于官网的jdk
下载需要接受协议,所以只能下载到本地之后上传到服务器;
scp 本地文件 root@服务器地址:/路径
解压:
tar -zxvf jdk.tar.gz
配置环境变量:
vi /etc/profile
加入如下代码:
export JAVA_HOME=/usr/local/java/jdk1.8.0_201
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile ## 使得更改生效
2.4. Gradle 安装
Gradle
版本尽量和项目中使用的版本一致,不要引起不必要的错误;我项目中使用的版本是4.10.1
,所以下载对应的版本:
wget https://downloads.gradle.org/distributions/gradle-4.10.1-all.zip
这样是直接下载到你当前所在的目录的,可以移动到某一个特定的目录,接下来就是解压:
unzip gradle-5.0-all.zip
如果没有该命令则说明没有安装 zip
unzip
, 使用 yum install zip unzip
安装即可
解压之后打开/etc/profile
文件,配置和jdk
类似的环境变量:
我的gradle放到了
/usr/ellison/
目录下
source /etc/profile ## 使得更改生效
2.5. SDK 安装
将 sdk
下载到本地,使用上面同样的方式上传到服务器,Android SDK 下载地址,选择 Download Options 找到Command line tools only:
然后将文件上传到服务器,这里不再赘述; 接着配置sdk
环境变量
vi /etc/profile
上面我是将文件放到了 /opt/androidSDK
目录下,各位可以随便放到服务器哪个目录都可以,只需配置环境变量 然后使得生效即可:
source /etc/profile
配置好sdk
环境变量之后,输入sdkmanager
命令就可以来获取到sdk
版本以及build-tools
版本了;输入sdkmanager --list
命令来获取所有的信息:
可以看到最新的 build-tools
版本是29.0.0-rc1
, 可以根据项目中使用的build-tools
版本来下载,我这边使用的是28.0.3
; 下载命令为:
sdkmanager "build-tools;28.0.3"
安装好 build-tools
之后,还需要安装必须的sdk
版本,同样的也是根据项目中使用的下载需要的sdk
:
sdkmanaager "system-images;android-28;default;x86_64"
等待下载完成后,sdk
就安装完了; 到此所有的 Android
环境就安装完了。接下来就是jenkins
安装了
3.1. Jenkins 安装
wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.repo
rpm –import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
yum install jenkins
安装的时候在国内会出现公钥未安装的情况,yum install --nogpgcheck
取消验证即可。
安装完之后,还不能启动 jenkins
,因为jenkins
默认的配置并不能找到你本机的jdk
配置,打开jenkins
的配置文件:
vim /etc/init.d/jenkins
找到如下位置之后,修改java
文件的位置,即为本机安装的jdk
环境位置:
接下来就可以启动jenkins
了:
sudo service jenkins start
启动jenkins
sudo service jenkins stop
停止jenkins
3.2. 启动Jenkins 创建新任务
启动jenkins
之后,在浏览器上面输入<ip地址>:8080
就可以打开jenkins
主页,进入第一个页面会让输入初始密码:
cat <浏览器上提示的目录地址>
获取密码之后输入登录创建一个新任务:
输入任务的名称,选择 构建一个自由风格的软件项目 ,点击 确定 即创建了一个新的任务,正常情况下,会选择插件安装,笔者使用国外的服务器安装的时候一路畅通提示安装插件,但是国内的服务器却提示
jenkins
服务器已经离线 ,如果出现这种问题,则需要在浏览器上输入如下地址进行修改:
http://<服务器IP地址>:8080/pluginManager/advanced , 找到 升级站点 ,将url
中的 https
修改为http
, 这样就能正常安装需要的插件了:
3.3. 配置jenkins全局环境
安装完插件之后,就来到了jenkins
主面板
配置环境变量在 系统管理->全局工具配置, 将之前配置的
Git
、 JDK
、Gradle
设置好:3.3. 配置项目
3.3.1 配置 General 构建化参数
添加项目之后,进入项目的系统设置:
首先看到的是 General, 这个是配置我们一些常用见的构建时候配置,多变体打包;多变体打包涉及到资源文件的设置等,这里的设置关系到后面的编译语句,所以要和application
模块中的build.gradle
文件相同,这样才能打出我们需要的版本包;这里给出一个实例:
在上面,我添加了buildType
,这个名称是随便填写的,后面编译语句需要引用这个字段,这个参数我添加了debug
、release
两个打包的版本;然后还添加了一个多变体buildFlavor
参数,选项为xiaomi
、tencent
两个应用市场的包,所以需要在build.gradle
中设置这两个市场的数据,怎么设置请各位自行谷歌~
3.3.2 配置 源码管理
现在项目一般都是由Git
来版本控制,同样的,我们配置源码管理的时候选择用Git
来版本控制:
输入
项目url
,认证则需要点击添加按钮,选择账号密码方式或者ssh秘钥方式
都是可以的:3.3.3 配置 构建名称及构建
当我们构建的时候,jenkins
主面板名称会显示#1
, #2
, #3
,这样的构建名称,显然不是很友好,这里构建环境可以设置构建名称:
配置构建语句:
这里
clean assemble${buildFlavor}${buildType}
这里的buildFlavor
、buildType
就是添加的构建参数。
保存上面的设置之后,进入项目的面板, 选择Build with Parameters
开始构建:
到此,所有的jenkins
配置和构建就结束了。
总结:
- 服务器的配置
- Android环境的配置
- Jenkins的配置