Github: github.com/windinwork/…git
平時測試中發包的時候,筆者在打完包就直接拖到蒲公英上讓它上傳就完事了。不過前兩天的會議上,測試小姐姐提出要在蒲公英上寫明此次的測試包修改了什麼內容。github
筆者一想到上傳完包還要一個個打字說明在這個包我修改了什麼,當即強烈拒絕!可是測試小姐姐再三要求,礙於這確實是個好提議和會上坐着的老大,只好勉爲其難地答應發包時寫上改動內容T_T。可是懶惰如筆者,固然不會每次發包都手動打字啦,最好能打完包後自動把包和修改信息上傳到蒲公英。api
雖然嘴上說着不要不要,但筆者想到寫個自動化腳本仍是很興奮的。原本想看看有沒有現成的蒲公英自動上傳腳本,在網上搜索了一下發現都不是很對胃口,想一想仍是本身寫算了。因此今天花了半天寫了這個腳本,在這裏也分享一下相關的gradle配置,以供參考。bash
向蒲公英這樣的平臺通常提供API用來作一些便利的操做,咱們直接打開蒲公英文檔,能夠看到用於上傳安裝包的API和示例的上傳方法,咱們便採用其中的curl
的方法上傳安裝包。app
上傳接口的參數中,有三個是必填的,分別的uKey
、_api_key
和file
。uKey
和_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
能夠調用啦。進入Terminal
,gradlew clean assembleDebug pgyer
,gradle
腳本便會執行清理、編譯打包、上傳的工做。等命令執行完,咱們便能在蒲公英上看到新鮮出爐的安裝包了。編碼
筆者目前想到自動從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}"
}
複製代碼
最後,爲了保持功能模塊分工清晰和代碼複用,咱們把新建一個pgyer.gradle
的文件,將這個task
單獨存放起來。再在app
的build.gradle
中經過apply from
的方式引入pgyer.gradle
。咱們運行gradlew assembleDebug pgyer -P pgyerDesc="請多多關注"
,就能夠看到想要的效果了。
該腳本是在gradle4.4
的環境下進行,這裏也作了一個Demo
放在Github上了,裏面的一些參數設置可能根據小夥伴本身的需求再作調整。但願各位可以喜歡這篇蒲公英自動上傳腳本的文章。