本文同步自我的博客Android Jenkins參數化配置android
在咱們的項目組裏,構建Jenkins打包平臺的初衷是讓測試人員用這個打包平臺,開發人員寫完提測郵件以後,測試人員自行去打包,而後進行測試,開發就能夠繼續去開車了。git
本文不打算寫手把手安裝Jenkins教程,若是你還不瞭解怎麼安裝Jenkins,請自行百度,或者查看這裏的官網教程: pkg.jenkins.io/redhat/。github
Jenkins參數化配置主要有2個步驟:shell
gradle.properties
中配置須要動態修改的參數,並在build.gradle
中使用。通常咱們須要動態修改的參數有versionName、versionCode,是否測試環境等,同時咱們能夠提供一些額外配置,如選擇須要構建的分支,打包的渠道號等,以提升打包靈活性。咱們把須要Jenkins修改的參數放到gradle.properties
文件下,如:api
# Jenkins配置
IS_JENKINS=false
VERSION_NAME=3.4
VERSION_CODE=30400002
IS_TEST_ENV=true
複製代碼
接下來就是重點了。咱們在新建任務的時候選擇「構建一個自由風格的軟件項目」 安全
接下來選擇「參數化構建過程」添加參數配置:服務器
能夠看到在構建分支裏咱們使用了上面的BRANCH
參數,這樣咱們就能夠動態的選擇須要構建的分支了。app
** 這裏最重要的地方就是標記部分,只有勾選該選項,gradle.properties
的參數才能被Jenkins修改。**curl
若是你在github上下載過Android代碼,你會發現通常項目中都會保留gradle wrapper
文件夾,這樣作的好處是升級gradle版本的時候不須要更新ci,這裏咱們也同樣,勾選「Use Gradle Wrapper」,而後添加你須要的tasks,這裏須要說明一下的是assemble'${PRODUCT_FLAVORS}''${BUILD_TYPES}'
,若是你平時打包的時候有留意過gradle執行的task的時候你會發現gradle爲每一個productFlavors
建立2個task,一個是debug版本的,一個是release版本的。利用這個規則咱們就可使用參數動態改變task了。這裏有一個取巧的地方,細心的你會發現PRODUCT_FLAVORS
第一個選項是空的,當選擇該選項時,task的名稱就變成assemblerelease
或者assembledebug
了,這種狀況下就會打全渠道包,注意這裏不能把空放在最後一個選項,放在最後的話會變成一個空格,致使task名稱錯誤。測試
到這裏Jenkins參數化構建的配置就已經完成了,可是我知道你確定不會只知足於此。
在構建框的底部咱們選擇增長構建步驟->Execute shell,使用蒲公英的Api來上傳apk。
curl -F "file=@${WORKSPACE}/app/build/outputs/apk/${PRODUCT_FLAVORS}/${BUILD_TYPES}/gg-${BUILD_TYPES}-${PRODUCT_FLAVORS}-${VERSION_NAME}-${VERSION_CODE}.apk" -F "_api_key=${PGYER_API_KEY}" https://www.pgyer.com/apiv2/app/upload -F 'buildInstallType=2' -F "buildPassword=${PGYER_APK_PASSWORD}"
複製代碼
注意這裏apk的名稱的規則須要與項目生成的apk的名稱規則一致,不然會找不到apk。另外,當咱們打全渠道包的時候不上傳到蒲公英,咱們能夠編寫簡單的shell腳本,判斷是否PRODUCT_FLAVORS
是否爲空,若是空就是打多渠道包,不上傳蒲公英。
if [-n "${PRODUCT_FLAVORS}"]
then
curl -F "file=@${WORKSPACE}/app/build/outputs/apk/${PRODUCT_FLAVORS}/${BUILD_TYPES}/gg-${BUILD_TYPES}-${PRODUCT_FLAVORS}-${VERSION_NAME}-${VERSION_CODE}.apk" -F "_api_key=${PGYER_API_KEY}" https://www.pgyer.com/apiv2/app/upload -F 'buildInstallType=2' -F "buildPassword=${PGYER_APK_PASSWORD}"
fi
複製代碼
WORKSPACE
是Jenkins內置的環境變量,想查看更多內置環境變量可查看:wiki.jenkins.io/display/JEN…
在構建項目的左下角,Jenkins會爲咱們列出構建歷史,默認以#${BUILD_NUMBER}
的形式展現的,因此咱們會看到#1,#2,#3這樣的名稱,爲了瘋狂暗示,咱們能夠修改這個構建名稱,咱們須要先下載build-name-setter
插件,而後選擇增長構建步驟->Update build name進行配置。
構建完成後的效果以下:
BUILD_NUMBER
是Jenkins內置的環境變量,想查看更多內置環境變量可查看:wiki.jenkins.io/display/JEN…
在構建項目的首頁會列出咱們構建後的成果(apk),可是這須要咱們配置一下成果的路徑。
選擇增長構建後操做步驟->Archive the artifacts來進行配置:
若是你沒有多渠道包的須要,建議你使用完整的路徑:
app/build/outputs/apk/${PRODUCT_FLAVORS}/${BUILD_TYPES}/*.apk
複製代碼
爲了收集全渠道包因此這裏直接使用**/*.apk
來匹配/apk
文件夾下的全部.apk
文件。
Jenkins默認會保留全部構建,能夠在構建歷史裏查看,當咱們構建次數多了以後,硬盤就會慢慢被塞滿,這時候咱們能夠刪除一些比較舊的構建,構建的目錄在/var/lib/jenkins/jobs/構建項目名稱/builds/構建序號
,你能夠手動進行刪除,也可使用插件。接下來咱們就說下如何使用插件來自動刪除舊的構建。這裏咱們須要藉助Discard Old Build
插件。安裝插件後選擇增長構建後操做步驟->Discard Old Builds來進行配置:
這裏我選擇了保留7天內的構建。詳細可查看插件說明:Discard Old Build
如前所述,咱們但願讓測試人員自行打包,可是咱們並不但願測試人員或者其餘對Jenkins不瞭解的人員有過大的權限,避免誤操做,因此咱們限制一下權限,讓他們只能進行構建等簡單操做。
實現權限管理功能咱們使用Role-based Authorization Strategy
插件,安裝完插件後進入系統管理->全局安全配置->受權策略中選擇Role-Based Strategy。接下來就能夠配置用戶權限了。
首先咱們建立2個角色:dev
,test
。dev是分配給開發人員,能夠對項目進行配置,test分配給測試人員,只能進行打包等簡單操做。咱們能夠把鼠標光標移到權限名稱上面,會顯示權限描述。這裏就不說明每一個權限的做用了。
爲不一樣用戶分配不一樣的權限。確保該用戶存在,若是用戶還沒建立,能夠在系統管理->管理用戶進行建立。
切換不一樣的用戶,你會發現他們能夠操做的功能不一樣,如測試人員只能進行構建和查看基本的構建信息:
本文截圖比較多,感謝你抽空閱讀,本文主要記錄本身配置Jenkins參數化的過程和一些遇到的問題,但願對你有所幫助。Jenkins能作的事不少,不只僅是用來打包,如爲git服務器添加hook,進行一些規範檢查,代碼檢查等,提高項目質量。但願你們都能用作工程的想法來作項目。