jenkins 系列 -- 参数化打包

概述

这应该是本系列的重点了。参数化打包,打包时注入参数到apk 包中,动态修改相关参数。

添加构建参数

找到相应project点击配置,对工程进行配置。General菜单下勾选This project is parameterized ,就会出现添加参数的下拉按钮。

  • 点击添加参数按钮并选择 Choise Parameter类型参数。命名为BUILD_TYPE,值为Release 和 Debug。注意:首字母大写
    jenkins_9
  • 同样方式添加 PRODUCT_FLAVORS,但注意渠道名称的首字母大写并且和项目中定义的渠道名称一致
    jenkins_10
  • 同样方式定义APP_VERSION_NAME,如下。
    jenkins_11
  • 同样方式定 IS_JENKINS ,用来确定是不是jenkins 打包。从而为jenkins 打包定制一些特殊需求。
    jenkins_12
  • 添加名称为BUILD_TIME类型为Dynamic Parameter的参数。注意只有安装了Dynamic Parameter Plug-in 插件,才会有该类型的参数。
    jenkins_13
  • 添加名称为 GIT_TAG_2类型为Git Parameter的参数。可通过设置项Parameter Type选择参数类型。系统提供了多种参数类型供选择,如 Branch Tag Branch or Tag 。可通过设置项Sort Mode选择排序方式,如我们这里选择 DESCENDING SMART(智能降序)。
    jenkins_14

构建

在gradle命令中使用参数构建

我们已经增加好了参数,下面我们需要在构建的时候使用这些参数。修改 gradle 构建任务为
clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE} --stacktrace --debug

jenkins_24

参数注入到 Android 项目中

勾选 Pass all job parameters as Project properties 参数才能注入到Android项目中。有些博文说的按钮勾选Pass all job parameters as Gradle properties 因为版本不同,所以选项的名称略有不同。我们需要把APP_VERSION_NAMEIS_JENKINSBUILD_TIME 这三个参数注入到项目中。所以我们还需要在Android项目的gradle.properties
中添加这三个参数,打包时注入替换这三个参数的默认值。

# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true

APP_VERSION_NAME=1.0.1
IS_JENKINS=true
BUILD_TIME='1992'
jenkins_15

在Android 项目中使用注入参数

   //修改生成的apk名字及输出文件夹
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            //新名字
            def newName
            //时间戳
            def timeNow
            //输出文件夹
            def outDirectory
            //是否为Jenkins打包,输出路径不同
            if ("true".equals(IS_JENKINS)) {
                //Jenkins打包输出到服务器路径
                timeNow = BUILD_TIME
                //BUILD_PATH为服务器输出路径

                //JenkinsTest-v1.0.1-product-release-2019-10-18 10:35:34.apk
                newName = 'JenkinsTest-v' + APP_VERSION_NAME + '-' + upFirstWorld(variant.productFlavors[0].name) + '-' + upFirstWorld(variant.buildType.name) + '.apk'
            } else {
                //本机打包输出在本机路径
                timeNow = getDate()

                if ('debug'.equals(variant.buildType.name)) {
                    newName = "AutoBuildTest-v${APP_VERSION_NAME}-debug.apk"
                } else {
                    //JenkinsTest-v1.0.1-xiaomi-release.apk
                    newName = 'JenkinsTest-v' + APP_VERSION_NAME + '-' + upFirstWorld(variant.productFlavors[0].name) + '-' + upFirstWorld(variant.buildType.name) + '.apk'
                }
            }
//            打包后放到 app/build/release/时间戳下 包下
            output.outputFileName = new File("../../../release/${timeNow}", newName)
        }
    }

我把APP_VERSION_NAME添加到生成的apk的名称中,把生成的apk 放到不同时间戳文件夹下。完整的参数gradle配置信息见我的github

开始构建

  • 现在我的工程面板变成了这样

jenkins_16

点击 Build with Parameters

  • 现在我们看下我们的构建面板,如下。


  • 选择好参数后就可以构建了。
  • 从构建成功后的包名可以看出我们的参数成功注入到Android项目中了。
    jenkins_18

用于存档的文件

现在每次打包成功,我们都要去工作空间下载打包文件,很麻烦体验也不好。现在我们设置一个用于存档的路径。效果如下,点击apk 文件就能下载,且就在构建面板上,一眼就能看到。

jenkins_20

这是一个构建后操作,我打包后的apk文件存放在app/build/outputs/release/${BUILD_TIME}/* 路径下(BUILD_TIME 是时间戳,这里是动态引用我们前面定义的参数),必须保证这个路径真实存在。
jenkins_19

构建命名

现在构建后命名像这样

jenkins_21

不美观、而且无法看到一些关键信息。我们需要添加一个构建环境信息,如下。

jenkins_22

效果如下


jenkins_23

总结

参数化打包可以根据选择参数不同。动态修改 apk 中的参数。比如不同版本的对应后台接口的ip 不同 。后面我们会继续讨论如何把打包好的安装包通过ssh上传到远程服务器,并提供二维码下载等。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容