Mac 环境下 Android 使用Jenkins 构建自动化打包
Posted 夏至的稻穗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mac 环境下 Android 使用Jenkins 构建自动化打包相关的知识,希望对你有一定的参考价值。
最近在看使用 jenkins 进行自动化打包,现在记录一下,方便后面查询。
这里的环境为 Mac ,所以window的,可以看后面构建的部分。
一. 下载安装
首先,直接去到官网 下载,选择左边稳定办版
找到你的环境,我这里为 mac,官网推荐的方式是使用 brew
如果你的电脑还未安装 brew ,可以通过这篇文章Mac必备神奇homebrew
下载成功之后,执行 jenkins-lts 就可以启动 jenkins了,接着,在浏览器上输入 localhost:8080,就会出现jenkins 的页面,然后会提示你输入校验码;
接着就是让你安装插件,这边建议使用左边的官方推荐,全部安装,ps:最好你能科学上网。
如果有插件下载失败,就一直 retry 就可以了,一般都能正确下载
二、配置
插件安装成功之后,就可以配置插件了,选择系统管理-全局工具配置
2.1 配置 JDK
配置Java的jdk:
2.2 配置git
选择你git的路径,比如我的
2.3 配置 gradle
最后多配几个,可以选择不同的版本,比如我选择5.4.1和6.1.1
2.4 全局属性配置
接着,最好配置一下 android SDK 的路径,可以在系统配置中设置
设置 android_home 路径
当然全局配置这里很多,你也可以配置邮件通知等
三、自动化打包
接下来,新建一个任务,然后选择自由风格
点击ok,然后渠去到源码配置git
刚开始是没有认证的,点击添加,输入你的账号密码,比如github上的
然后再选择你的凭证即可。
3.1 构建 gradle
然后点击构建,在增加构建步骤那里,选择 Invoke GRadle script 步骤:
然后选择上面配置的 gradle 版本:
执行 clean 和 生成 realse 版本的命令
这样就实现了。
四. 开始构建
点击保存之后,返回项目界面,点击开始构建:
然后就开始构建了,等待一段时间,就会出现任务的执行结果,蓝色表示成功,红色表示失败,
我们可以点击进去,看看任务的执行列表,这样就在 app/build 的outputs 下生成 apk了。
五. 配置参数
上面只是正常的打包,如果我想根据不同参数,去满足一些需求,比如多渠道打包,根据不同参数打包等。
这个时候,就可以使用参数配置了。
jenkins 可以重写 gradle.properties 的一些参数,这样我们在 build.gradle 中就可以跟着这些参数去配置一些客制化的东西了
下面演示一下多渠道打包的过程,配置完成之后,在build 的界面如下:
可以看到,大概需要5个参数,在 Jenkins 的主页上,选择你的项目,选择参数化构建,添加参数
- PRODUCT_FLAVORS : 多渠道
选择参数化构建过程,参数类型选择 选项参数
像 PRODUCT_FLAVORS 是可以选择,所以,参数那里我们选择 选项参数:
-
APP_VWERSION
同理版本好也是一样:
-
BUILD_TYPE
编译类型,可选项选择 release 和debug:
然后是生成时间,使用 Dynamic Parameter
它使用 groovy 语言写的,所以,你需要去下载两个拆建
Dynamic Parameter使用groovy语言,我们可以通过脚本去生成一些数据,比如时间,如果你还未安装 groovy 插件,先安装 scriptler:
安装之后重启一下,这样就可以使用运行时参数了,如下:
接着,弄一个字符参数,判断是否为 Jenkins 的标签:
这样,当我们重新构建的时候,就会出现,出现这个界面了
但一些参数还未完成,你需要在 Android studio 去配置
5.1. Android studio的配置
上面中 有三个参数我们是需要用到的,所以去到你的工程的 gradle.properties 文件,添加以下三个变量
# jenkins 的东西
APP_VERSION=1.0.0
IS_JENKINS=false
BUILD_TIME=''
APP_VERSION 为 jenkins 打包时的参数,IS_JENKINS 用来判断是否为 jenkins 打包,BUILD_TIME 则是打包时间。
但为了 JenKins 的参数能够影响到 Android Studio 的 ,我们还需要在 Jenkins 的 Invoke Gradle script 勾选高级属性的 Pass all job parameters as Project properties ,让这些参数能够影响 Project properties
这样gradle.properties的参数就能被Jenkins 影响了,build.gradle 的配置如下:
android
compileSdkVersion 29
defaultConfig
applicationId "com.zhengsr.nfcdemo"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
flavorDimensions "default"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
//渠道Flavors
productFlavors
wb01
wb02
//manifestPlaceholders 放在这里更简洁
productFlavors.all
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
//修改生成的apk名字及输出文件夹
applicationVariants.all variant ->
variant.outputs.all output ->
//新名字
def newName
//时间戳
def timeNow
//是否为Jenkins打包,输出路径不同
println("iskenkins: "+IS_JENKINS+" "+APP_VERSION)
if ("true" == IS_JENKINS)
//Jenkins打包的时间
timeNow = BUILD_TIME
//名字
newName = 'NfcDemo-v_jenkins_' + APP_VERSION + '-' + variant.productFlavors[0].name + '-' + variant.buildType.name + '.apk'
else
//本机打包的时间
timeNow = getDate()
if ('debug' == variant.buildType.name)
newName = "NfcDemo-v$APP_VERSION-debug.apk"
else
newName = 'NfcDemo-v' + APP_VERSION + '-' + variant.productFlavors[0].name + '-' + variant.buildType.name + '.apk'
println("apk name "+newName)
outputFileName = timeNow+"_"+newName
def getDate()
def date = new Date()
def formattedDate = date.format('yyyy-MM-dd-HH-mm')
return formattedDate
这样,Android Studio 就和 Jenkins 配合起来了,当你编译的时候,就可以根据 jenkins 的参数去自动化配置 studio 的输出了
以上是关于Mac 环境下 Android 使用Jenkins 构建自动化打包的主要内容,如果未能解决你的问题,请参考以下文章
Mac 环境下 Android 使用Jenkins 构建自动化打包