Android Jenkins參數化配置

本文同步自我的博客Android Jenkins參數化配置android

在咱們的項目組裏,構建Jenkins打包平臺的初衷是讓測試人員用這個打包平臺,開發人員寫完提測郵件以後,測試人員自行去打包,而後進行測試,開發就能夠繼續去開車了。git

Jenkins安裝

本文不打算寫手把手安裝Jenkins教程,若是你還不瞭解怎麼安裝Jenkins,請自行百度,或者查看這裏的官網教程: pkg.jenkins.io/redhat/github

Jenkins參數化配置

Jenkins參數化配置主要有2個步驟:shell

  • gradle.properties中配置須要動態修改的參數,並在build.gradle中使用。
  • 在Jenkins中添加這些參數,進行參數化構建。

通常咱們須要動態修改的參數有versionName、versionCode,是否測試環境等,同時咱們能夠提供一些額外配置,如選擇須要構建的分支,打包的渠道號等,以提升打包靈活性。咱們把須要Jenkins修改的參數放到gradle.properties文件下,如:api

# Jenkins配置
IS_JENKINS=false
VERSION_NAME=3.4
VERSION_CODE=30400002
IS_TEST_ENV=true
複製代碼

接下來就是重點了。咱們在新建任務的時候選擇「構建一個自由風格的軟件項目安全

接下來選擇「參數化構建過程」添加參數配置:服務器

Git服務器

能夠看到在構建分支裏咱們使用了上面的BRANCH參數,這樣咱們就能夠動態的選擇須要構建的分支了。app

Gradle構建

** 這裏最重要的地方就是標記部分,只有勾選該選項,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…

更新Build Name

在構建項目的左下角,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權限控制

如前所述,咱們但願讓測試人員自行打包,可是咱們並不但願測試人員或者其餘對Jenkins不瞭解的人員有過大的權限,避免誤操做,因此咱們限制一下權限,讓他們只能進行構建等簡單操做。

實現權限管理功能咱們使用Role-based Authorization Strategy插件,安裝完插件後進入系統管理->全局安全配置->受權策略中選擇Role-Based Strategy。接下來就能夠配置用戶權限了。

  1. 系統管理->Manage and Assign Roles->Manage Roles

首先咱們建立2個角色:devtest。dev是分配給開發人員,能夠對項目進行配置,test分配給測試人員,只能進行打包等簡單操做。咱們能夠把鼠標光標移到權限名稱上面,會顯示權限描述。這裏就不說明每一個權限的做用了。

  1. 系統管理->Manage and Assign Roles->Assign Roles

爲不一樣用戶分配不一樣的權限。確保該用戶存在,若是用戶還沒建立,能夠在系統管理->管理用戶進行建立。

切換不一樣的用戶,你會發現他們能夠操做的功能不一樣,如測試人員只能進行構建和查看基本的構建信息:

結語

本文截圖比較多,感謝你抽空閱讀,本文主要記錄本身配置Jenkins參數化的過程和一些遇到的問題,但願對你有所幫助。Jenkins能作的事不少,不只僅是用來打包,如爲git服務器添加hook,進行一些規範檢查,代碼檢查等,提高項目質量。但願你們都能用作工程的想法來作項目。

參考

相關文章
相關標籤/搜索