【Gradle Task】FIR上传脚本(cURL方式、关联git提交次数、更新日志)

//dependsOn关联打包任务 即执行上传前先打包
task uploadFir(dependsOn: ['assembleDebug']) {
    def fir_api_token = "fir后台的api token"
    doLast {
        println "即将上传到fir..."

        //获取fir上传凭证的各个字段
        def appInfo = ("curl -X POST -d type=android&" +
                //获取app applicationId
                "bundle_id=$project.android.defaultConfig.applicationId&" +
                "api_token=$fir_api_token " +
                "http://api.bq04.com/apps").execute().text

        //json解析对象拿到的是Map, 集合对应的是array, 按照这个规则取出我们需要的数据
        def appInfoBean = new groovy.json.JsonSlurper().parseText(appInfo)
        def key = appInfoBean["cert"]["binary"]["key"]
        def url = appInfoBean["cert"]["binary"]["upload_url"]
        def token = appInfoBean["cert"]["binary"]["token"]

        //执行上传命令 注意apk路径不能包含中文、空格
        //applicationVariants[0]对应的是某个buildType 具体可打印查看 默认0为debug 1为release
        def apkFile = project.android.applicationVariants[0].outputs.first().outputFile
        def upload = ("curl -X POST --form file=@$apkFile" +
                " -F token=$token" +
                " -F key=$key" +
                //git提交次数 作为测试包版本后缀
                " -F x:version=$project.android.defaultConfig.versionName" 
+ "." + ("git rev-list --count HEAD").execute().text +
                " -F x:build=$project.android.defaultConfig.versionCode" +
                " -F \"x:changelog=" + 
(("git log --no-merges --pretty=format:%s_____by__%cn
HEAD -5") .execute().text).replace("\n", "") + "\"" + " $url") println upload upload.execute().text println "上传完成" } }

说明:

1、x:version参数使用了git rev-list --count HEAD获取当前分支提交次数,方便测试人员区分手中已安装的是否为最新包;app内可以通过buildType判断测试环境下拼接此版本号 用于与fir版本对比
2、x:changelog参数使用git log --no-merges --pretty=format:%s_____by__%cn
HEAD -5命令拿到git最新的五次提交日志,具体格式可自定义 参考git log命令(注意该参数必须用“”包裹 否则影响curl参数识别及换行)

注意:

win10自带的curl有中文乱码问题 两种解决方式:

1、修改系统编码(不建议,会导致部分软件乱码)
控制面板->时钟和区域->区域->管理->更改系统区域设置->勾选使用utf-8支持 重启即可

2、官网下载curl 并放置到项目目录中使用(建议)
地址:(https://curl.se/download.html)
注意修改脚本中的curl位置为项目中放置的curl位置 如放置到了项目根目录下lib目录中 则修改为lib/curl 同目录直接引用

效果:

微信截图_20201012182614.png

你可能感兴趣的:(【Gradle Task】FIR上传脚本(cURL方式、关联git提交次数、更新日志))