Centos上使用Jenkins配合Gradle进行Android APK构建和分发
Centos上使用Jenkins配合Gradle进行Android APK构建和分发
很多时候,测试人员和后台人员需要我们将各个环境APK包发给他们进行测试和调试,但是呢,我们不是时时都能响应他们的需求。此篇博客的目的就是为了解决这种情况,将复杂麻烦的打包简单化,让每个人都能轻松的打出各个环境,各个版本的包。
一 工具安装
JDK安装
Jdk的安装非常重要,Jenkins的安装和Android打包都需要用到。检查是否安装Jdk:java -version,如果已经安装,跳过此步骤。
- 在官网下载Jdk文件:jdk-8u131-linux-x64.tar.gz,使用Xftp上传至 /usr/local 目录
- 使用XShell 打开 /usr/local 目录,执行解压命令
tar -zxvf jdk-8u131-linux-x64.tar.gz
- 使用Xftp打开 /etc/profile 文件,在profile文件最下方追加代码:
JAVA_HOME=/usr/local/jdk1.8.0_131
JRE_HOME=/usr/local/jdk1.8.0_131/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME
export JAVA_HOME
export JRE_HOME
export PATH
然后保存。 - java -version 检查是否安装成功
Jenkins 安装
-
下载源
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
-
yum安装
yum install jenkins
-
配置Jenkins的Java运行环境
使用 Xftp打开 /etc/init.d/jenkins 找到/usr/bin/java那一行,在底下加入如下代码:/usr/local/jdk1.8.0_131/bin/java
-
修改端口
Jenkins的默认端口为8080,而Tomcat的默认端口也是8080,所以我们需要修改Jenkins的端口,使用 Xftp打开 /etc/sysconfig/jenkins 文件,找到 JENKINS_PORT=“8080” 修改为 JENKINS_PORT=“9000”。 -
启动Jenkisn
service jenkins start
-
测试Jenkins
在浏览器中输入:服务器地址+:9000/,会出现Jenkins的初始页面。 -
修改Jenkins工作空间参考
https://blog.****.net/u014221090/article/details/80566434
Android SDK 安装
- 下载sdk-tools-linux-4333796.zip
用Xshell打开你想存放sdk的目录,执行代码:wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
- 解压sdk-tools-linux-4333796.zip
在上个步骤的目录,执行代码:unzip sdk-tools-linux-4333796.zip
- 配置android环境变量
使用 Xftp打开 /etc/profile 文件,在最后添加代码:export ANDROID_HOME="/opt/frank/android/android-sdk-linux"
export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_HOME/platform-tools:$PATH"
然后保存。 - 查看已安装工具和可安装工具
执行代码:sdkmanager --list
- 使用sdkmanager相关命令安装build-tools, platforms, build-tools
执行代码:sdkmanager "platforms;android-25" "build-tools;25.0.2"
其他版本类似。
Git安装
- 查看是否安装git,执行代码:
git --version
- 出现git版本信息,执行代码:
whereis git
,查看安装目录 - 未出现git版本信息,执行命令:
yum install git
- 执行命令:
git --version
查看是否安装成功 - 执行命令:
whereis git
查看安装目录
Gradle安装
- 下载你想要的Gradle版本代替4.1
用Xshell打开你想存放Gradle的目录,执行命令:wget https://downloads.gradle.org/distributions/gradle-4.1-all.zip
- 解压Gradle
在上述存放目录,执行命令:unzip gradle-4.1-all.zip
- 配置Gradle环境变量
使用 Xftp打开 /etc/profile 文件,在最后添加如下代码,然后保存。export GRADLE_HOME=/usr/local/gradle-4.1
export PATH=$GRADLE_HOME/bin:$PATH
- 检验是否配置成功
执行命令:gradle -version
二 全局配置
Jenkins配置
初始化
- 在浏览器输入你的服务器地址和加端口号,会出现下图Jenkins的初始页面:
- 按照提示使用 Xftp 打开相应文件(路径地址可能不一样,和Jenkins安装位置有关)复制密码,输入密码,出现如下页面:
- 选择左侧建议安装的插件,出现如下页面:
- 下一步,进入如下创建Admin用户界面:
- 保存后,进入如下页面,点击 Start using Jenkins,Jenkins初始化完成。
Android打包配置
- 插件配置
点击系统管理,点击插件管理,点击Available,如下图:
搜索插件:Git,Git Parameter,Gradle,Branch API,SSH,build-name-setter,description setter,user build vars,OWASP Markup Formatter ,Email Extension。点击 install without restart 依次安装。
点击系统管理,点击全局安全配置,如下图配置: - 全局环境配置
点击系统管理,点击全局工具配置(Global Tool Configuration),如下图:
点击ADD JDK(不要勾选自动安装),Name自定义,JAVA_HOME配置服务器的Jdk路径。按此步骤依次配置Git,Gradle,我的配置如下: - Android环境配置
点击系统管理,点击系统设置,点击 Global properties,如下图:
勾选环境变量,Name填入 ANDROID_HOME,Value填入 服务器AndroidSDK位置。
三 项目配置
构建项目
新建项目
点击系统管理,点击 New 任务,进入如下页面:
选择 构建一个自由风格的软件项目 ,然后点击OK。
参数化构建配置
-
构建参数配置
-
源码地址配置
这里需要注意的是 最好采用 https的URL方式 ,点击Add如下图添加验证,username 和 password 就是代码保管网站的账号和密码,例如我用的是 coding。 -
Gradle配置
-
Android项目配置:
gradle.properties 配置如下:
build.gradle文件配置如下
apply plugin: 'com.android.application'
apply plugin: 'com.jakewharton.butterknife'
static def getDate() {
def date = new Date()
def formattedDate = date.format('yyyy-MM-dd-HH-mm')
return formattedDate
}
android {
defaultConfig {
applicationId "com.doutu.tutuenglish"
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode 2
versionName APP_VERSION
/**
* 启用multiDex支持 解决方法数 超过 64k 的问题
*/
multiDexEnabled true
/**
* 支持背景模糊
*/
renderscriptTargetApi 25
renderscriptSupportModeEnabled true
ndk {
//设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "arm64-v8a", "x86_64"
}
}
signingConfigs {//签名的配置
sign {
storeFile file('../tutu.jks')
storePassword STORE_PASSWORD
keyAlias 'tutuenglish'
keyPassword ALIAS_PASSWORD
}
}
buildTypes {
debug {
/***
* 自定义字段【true:测试地址 false:线上地址】
*/
buildConfigField "boolean", "IS_TEST", "true"
/***
* 自定义字段【true: Jenkins 打包 false: AS 打包】
*/
buildConfigField "boolean", "IS_JENKINS", "${IS_JENKINS}"
minifyEnabled false
signingConfig signingConfigs.sign
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
release {
/***
* 自定义字段【true:测试地址 false:线上地址】
*/
buildConfigField "boolean", "IS_TEST", "false"
/***
* 自定义字段【true: Jenkins 打包 false: AS 打包】
*/
buildConfigField "boolean", "IS_JENKINS", "${IS_JENKINS}"
/***
* 代码混淆
*/
minifyEnabled false
/***
* zipalign优化
*/
zipAlignEnabled true
/**
* 移除无用的resource文件
*/
shrinkResources false
signingConfig signingConfigs.sign
/*加载默认混淆配置文件*/
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
/*修改生成的apk名字*/
android.applicationVariants.all { variant ->
variant.outputs.all { output ->
def newName
def timeNow = getDate().substring(5) // 去掉年
if ("true" == IS_JENKINS) {
if (variant.buildType.name == 'debug') {
newName = "tutuenglish-v${APP_VERSION}-debug.apk"
} else {
newName = "tutuenglish-v${APP_VERSION}-release.apk"
}
} else {
newName = "tutuenglish-v${APP_VERSION}-${timeNow}-" + variant.buildType.name + ".apk"
}
// jenkins打包时修改输出路径保存所有打包记录
if ("true" == IS_JENKINS) {
// 修改输出路径
if ('debug' == variant.buildType.name) {
variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apk/debug/")
} else {
variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/apk/release/")
}
}
outputFileName = newName
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
lintOptions {
abortOnError false
checkReleaseBuilds false
}
compileSdkVersion 27
}
四 项目构建
打包
完成上面的配置后,我们就可以使用基本的动态入参打包了。点击 Build with Parameters 选项,页面如下:
这里的每个选项都对应了开始的构建参数配置,很简单,我就不解释了。点击 Build 开始构建。
构建历史会出现下图:
点击进度条,进入下图页面:
然后点击 Console Output 进入控制台:
到这里已经成功的构建了。
五 构建名称修改和项目分发
修改构建成功后的名称
项目配置中添加以下内容。
效果展示:
构建历史中添加 apk 的下载地址
这个需要和蒲公英配合使用,将应用上传到蒲公英,然后返回应用下载二维码的地址。教程点我。
Jenkins配置如下:
效果展示:
上传:
构建记录:
将构建结果通过邮件进行分发
如果你是土豪,可以不用看这一步,上一步中,上传的蒲公英,蒲公英有自己的应用更新通知方法。花钱就可以享受。因为我是个技术男,所以我拒绝花钱(因为我穷)。所以我使用Jenkins的邮件功能进行结果分发。Jenkins原本的邮件不支持内容的多样性。所以我们需要使用插件Email Extension。
点击系统管理,点击系统设置,找到下图位置:
接上图:
Default Content 模板:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0"
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>(本邮件是程序自动下发的,请勿回复!)</td>
</tr>
<tr>
<td><h2>
<font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
</h2></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>触发原因:${CAUSE}</li>
<li>应用名称:${appName}</li>
<li>应用包名:${appIdentifier}</li>
<li>版 本 号:${appVersion}</li>
<li>文件大小:${appFileSize}</li>
<li>更新内容:${UPDATE_DESCRIBE}</li>
<li>下载地址:<a href="${appPgyerURL}">${appPgyerURL}</a></li>
<li>扫码下载:</li><br>
<img src="${appQRCodeURL}" width="118" height="118"/>
</ul>
</td>
</tr>
</table>
</body>
</html>
Jenkins 自带邮件分发功能设置和测试:
如果失败,请检查smtp是否打开和授权是否正确。
项目邮件分发配置:
点击高级,接上图
效果展示:
六 结束
结束语
到这里Jenkins一系列的打包分发已经全部完毕,如果遇到问题,请加我qq 839539179 我为你解答。