jenkins 系列 -- 参数化打包

2019-10-30  本文已影响0人  ifjgm

概述

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

添加构建参数

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

构建

在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

用于存档的文件

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

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

构建命名

现在构建后命名像这样

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

效果如下


jenkins_23

总结

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

上一篇 下一篇

猜你喜欢

热点阅读