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 的输出了

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值