Jenkins 参数化构建(六)


文章目录

参数化构建的意思为 使用Jenkins构建打包的时候动态的修改gradle文件里面的配置

使用动态构建时,我们需要使用到gradle文件和properties文件配置需要使用的自定义属性.properties文件

## Jenkins参数化构建使用的变量
## APP version name
APP_VERSION=4.2.2
# 是否为 Jenkins 编译, 默认是 false
IS_JENKINS=false
# 构建时间
BUILD_TIME=''
# 渠道名称
PRODUCT_FLAVORS=website
# 服务器生构建路径
BUILD_PATH_JENKINS=F:\\DownloadApk
BUILD_PATH_LOCAL=F:\\AS_PROJECT\\TestJenkins
# app名称
APPNAME=cdelphone

.gradle文件

apply plugin: 'com.android.application'


//获取当前时间
def getDate() {
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
}

//打包的一些参数
ext {
    TestVersion = "1.0.0"
    TestVersionCode = "100"
}

android {
    compileSdkVersion 21
    buildToolsVersion '24.0.2'

    defaultConfig {
        applicationId "com.cdel.chinaacc.daytest"
        versionCode 8
        versionName APP_VERSION
        minSdkVersion 15
        targetSdkVersion 16
        multiDexEnabled true
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "web"]
    }

    lintOptions {
        abortOnError false
        checkReleaseBuilds false
        disable 'MissingTranslation' // 防止在发布的时候出现因MissingTranslation导致Build Failed!
    }

    packagingOptions {
        exclude 'AndroidManifest.xml'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'local.properties'
    }
    dexOptions {
        javaMaxHeapSize "4g"
    }

    //签名相关
    signingConfigs {
        myConfig {
            storePassword "***"
            keyAlias "***"
            keyPassword "***"
            //由于本地打包使用的是本机上的KeyStore
            //而Jenkins打包用的是服务器上的KeyStore
            //两个路径不一样
            if ("true".equals(IS_JENKINS)) {
                storeFile file('./keystore/mykey')
            } else {
                storeFile file('./keystore/mykey')
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled true
            zipAlignEnabled true
            shrinkResources true
            signingConfig signingConfigs.myConfig
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
        }
        debug {
            signingConfig signingConfigs.myConfig
//            zipAlignEnabled true
//            minifyEnabled false    // 是否混淆
//            shrinkResources false  // 是否去除无效的资源文件
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    //打包输出apk名称
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def apk = output.outputFile
            if (apk != null && apk.name.endsWith('.apk')) {
                //新名字
                def fileName
                //时间戳
                def timeNow
                //输出文件夹
                def outDirectory
                //是否为Jenkins打包,输出路径不同
                if ("true".equals(IS_JENKINS)) {
                    //时间戳
                    timeNow = BUILD_TIME
                    //输出文件夹 BUILD_PATH 服务器输出路径
                    outDirectory = BUILD_PATH_JENKINS
                    fileName = APPNAME + "_V${variant.versionName}_${variant.buildType.name}_${variant.productFlavors[0].name}.apk"
                    output.outputFile = new File(outDirectory + "/" + timeNow, fileName)
                } else {
                    //时间戳
                    timeNow = getDate()
                    outDirectory = BUILD_PATH_LOCAL
                    fileName = APPNAME + "_V${variant.versionName}_${variant.buildType.name}_${variant.productFlavors[0].name}.apk"
                    output.outputFile = new File(outDirectory + "/" + timeNow, fileName)
                }

            }
        }
    }

    // 渠道列表
    productFlavors {
        m91zhushou {}
        anzhuoshichang {}
        anzhi {}
        tencent {}
        mumayi {}
        wandoujia {}
        m360shouji {}
        baidu {}
        xiaomi {}
        meizu {}
        huawei {}
        web {}
        zonghe {}
    }

    // 指定渠道名
    productFlavors .all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }
}

dependencies {
    compile project(':cdelframelib')
}

}


上面我们配置了、渠道包、签名文件、版本号、apk命名、apk输出文件夹,在.properties文件中需要 一 一 与之对应。下面我们进入到Jenkins对上述参数进行对应配置。

image.png

找到 参数化构建过程选项→打勾

选择→添加参数
选项参数使用 Choice
字符输入参数使用 String Parameter
时间参数使用 Dynamic Parameter在添加参数时,配置Name的值必须与.properties文件中定义的参数名称相同。我们需要用到的仅这三个,具体输入如下图。Choice

Dynamic Parameter


String Parameter


将需要的参数按类别添加即可。
参数引用找到上面我们使用Gradle 插件的 Invoke Gradle script修改tasks命令,应用上面的参数,并勾选Pass job parameters as Gradle properties选项。如下图。


PRODUCT_FLAVORS
和BUILD_TYPE
即我们上面配置的参数,务必保持一致。点击保存,回到项目首页。就可以看到,原先的立即构建已经变成了Build with Parameter点击参数构建,就可以看到如下上面我们配置的参数。等待构建完成,前往在.Gradle文件中配置的路径中即可找到我们配置的命名apk。
另外提一点,更换名称。因为原命名只是构建编号,没有识别度。相信你从无参构建时就想更换了。

进入项目配置找到→构建环境→勾选Set build Name 设置参数


重新打包,如上图我们使用了BUILD_NUMBER 自带参数,以及 APPNAME、APP_VERSION、BUILD_TYPE ,最后效果如下图。


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

推荐阅读更多精彩内容