使用Gradle編寫蒲公英自動上傳安裝包和更新說明腳本

Github: github.com/windinwork/…git

平時測試中發包的時候,筆者在打完包就直接拖到蒲公英上讓它上傳就完事了。不過前兩天的會議上,測試小姐姐提出要在蒲公英上寫明此次的測試包修改了什麼內容。github

筆者一想到上傳完包還要一個個打字說明在這個包我修改了什麼,當即強烈拒絕!可是測試小姐姐再三要求,礙於這確實是個好提議和會上坐着的老大,只好勉爲其難地答應發包時寫上改動內容T_T。可是懶惰如筆者,固然不會每次發包都手動打字啦,最好能打完包後自動把包和修改信息上傳到蒲公英。api

雖然嘴上說着不要不要,但筆者想到寫個自動化腳本仍是很興奮的。原本想看看有沒有現成的蒲公英自動上傳腳本,在網上搜索了一下發現都不是很對胃口,想一想仍是本身寫算了。因此今天花了半天寫了這個腳本,在這裏也分享一下相關的gradle配置,以供參考。bash

1、 自動上傳蒲公英

向蒲公英這樣的平臺通常提供API用來作一些便利的操做,咱們直接打開蒲公英文檔,能夠看到用於上傳安裝包的API和示例的上傳方法,咱們便採用其中的curl的方法上傳安裝包。app

上傳接口的參數中,有三個是必填的,分別的uKey_api_keyfileuKey_api_key咱們在本身的蒲公英賬號上能夠查看到,而file參數須要咱們提供apk文件的路徑,因此咱們先想辦法拿到路徑。curl

這裏咱們定義一個方法:getApkPath(),經過buildDir + 固定的outputs/apk/${buildType}/app-${buildType}.apk地址來獲取apk路徑。測試

def getApkPath() {
    String buildType = getBuildType().toLowerCase()
    return new File(buildDir, "outputs/apk/${buildType}/app-${buildType}.apk").absolutePath
}
複製代碼

getApkPath()中咱們須要知道編譯打包和用的buildType,這裏定義一個方法getBuildType()進行獲取。本人對gradle腳本不太熟悉,暫時經過打包參數來獲取相應的buildType,足以應付通常場景。gradle

def getBuildType() {
    Gradle gradle = getGradle()
    String args = gradle.getStartParameter().getTaskRequests().toString()
    if (args.contains("assembleRelease")) {
        return "Release"
    } else if (args.contains("assembleDebug")) {
        return "Debug"
    }
    return "Debug"
}
複製代碼

而後咱們把上傳命令封裝在一個task裏:ui

task pgyer(type: Exec) {

    String apiKey = "6767f341ee7ed1f9fd4699e6ed71e773" // todo 這裏替換爲本身的蒲公英的apiKey
    String userKey = "0cf7164e5158effc01cc24c0667266c4" // todo 這裏替換爲本身的蒲公英的userKey

    commandLine 'curl'
    args '-k', 'http://www.pgyer.com/apiv1/app/upload',
            '-F', "uKey=${userKey}",
            '-F', "_api_key=${apiKey}",
            '-F', "file=@${getApkPath()}"
}
複製代碼

這樣咱們就在一個task能夠調用啦。進入Terminalgradlew clean assembleDebug pgyergradle腳本便會執行清理、編譯打包、上傳的工做。等命令執行完,咱們便能在蒲公英上看到新鮮出爐的安裝包了。編碼

2、自動添加日誌

筆者目前想到自動從git記錄中讀取近期的log,進行必定格式化後上傳到蒲公英。

首先咱們來讀取git的記錄:

def getGitLog() {
    return 'git log --pretty=format:"%s___in___%ad___by___%an" -10 --date=format:%c'.execute().text
}
複製代碼

其中%s__in__%ad__by__%an表示內容+日期+做者,-10表示顯示最近10條log,--date=format:%c表示輸出本地的日期時間。這裏發現執行命令時若有空格不能輸出git log,因此使用___來代替空格。

有時咱們會想添加自定義的信息進去,因此須要一個參數用於傳遞自定義的信息,這裏將參數定義爲pgyerDesc,而後在gradle中獲取pgyerDesc

if (project.hasProperty("pgyerDesc")) {
    desc = pgyerDesc + "\n" + desc
}
複製代碼

對於傳入的參數pgyerDesc,在Windows中,輸入中文會出現亂碼,應該是編碼格式的問題。筆者用的是Ubuntu系統,因此不會有這個問題的出現。因此這個亂碼的狀況就交給Windows的同窗本身去解決啦。

好了,整合起來,蒲公英自動上傳安裝包和日誌的gradle腳本就實現了。

task pgyer(type: Exec) {

    String apiKey = "6767f341ee7ed1f9fd4699e6ed71e773" // todo 這裏替換爲本身的蒲公英的apiKey
    String userKey = "0cf7164e5158effc01cc24c0667266c4" // todo 這裏替換爲本身的蒲公英的userKey
    String desc = getGitLog()

    if (project.hasProperty("pgyerDesc")) {
        desc = pgyerDesc + "\n" + desc
    }
    if (desc == null || desc.isEmpty()) {
        desc = "保持沉默"
    }

    commandLine 'curl'
    args '-k', 'http://www.pgyer.com/apiv1/app/upload',
            '-F', "uKey=${userKey}",
            '-F', "_api_key=${apiKey}",
            '-F', "file=@${getApkPath()}",
            '-F', "updateDescription=${desc}"
}
複製代碼

3、總結

最後,爲了保持功能模塊分工清晰和代碼複用,咱們把新建一個pgyer.gradle的文件,將這個task單獨存放起來。再在appbuild.gradle中經過apply from的方式引入pgyer.gradle。咱們運行gradlew assembleDebug pgyer -P pgyerDesc="請多多關注",就能夠看到想要的效果了。

該腳本是在gradle4.4的環境下進行,這裏也作了一個Demo放在Github上了,裏面的一些參數設置可能根據小夥伴本身的需求再作調整。但願各位可以喜歡這篇蒲公英自動上傳腳本的文章。

相關文章
相關標籤/搜索