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 构建自动化打包

mac下 jenkins 环境搭建

windows环境下jenkins+gradle+Android 自动打包部署

jenkins ios 自动化打包一定要在mac下吗

Mac Jenkins

linux下jenkins打包APK