jenkins+gitlab + 蒲公英實現 android 應用自動化打包分發

ietf發表於2019-03-04

作為一名高效的開發者,要儘量避免的重複勞動實現自動化的流程。搭建本地jenkins伺服器,實現自動化打包流程,從此測試包交給測試人員自己去打就好了,整合蒲公英等分發平臺,實現二維碼或短連結下載,也為運營人員提供了便捷。

前期準備

前往jenkins.io/下載對應系統版本的jenkins包,本文以windows為例,兩種方式:

  1. 下載windows對應的安裝包,安裝後jenkins作為windows服務佔用本地8080埠;在瀏覽器輸入localhost:8080即可訪問。
  2. 下載tomcat伺服器,然後下載jenkins war包,將其部署到tomcat webapps 目錄下,啟動tomcat後,在瀏覽器使用localhost:8080/jenkins訪問。

啟動後,會看到jenkins初始配置頁面,這裡需要選擇安裝的外掛,例如:我要整合gitlab,所以選擇gitlab的外掛,如果你是整合github,則選擇github外掛,大體流程相同,外掛可以後期根據需要再安裝。

jenkins+gitlab + 蒲公英實現 android 應用自動化打包分發

進入主頁後,點選系統管理->Global Tool Configuration,設定jdk、git及gradle等。

配置引數

新建自由風格的軟體專案

jenkins+gitlab + 蒲公英實現 android 應用自動化打包分發

進入配置頁面

jenkins+gitlab + 蒲公英實現 android 應用自動化打包分發

配置Gernal模組。選中引數化構建過程選項,配置如下:

jenkins+gitlab + 蒲公英實現 android 應用自動化打包分發

配置原始碼管理。設定遠端倉庫的地址,http方式和ssh方式都是支援的。

jenkins+gitlab + 蒲公英實現 android 應用自動化打包分發

ps:如果沒有git選項,可能git環境設定不成功,請去首頁-系統管理-Global Tool Configuration頁,設定jdk、git及gradle等。

構建觸發器。這裡有兩個選項:

  1. Poll SCM:定時檢查原始碼變更(根據SCM軟體的版本號),如果有更新就checkout最新code下來,然後執行構建動作。我的配置如下:
    /5 * (每5分鐘檢查一次原始碼變化)

  2. Build periodically:週期進行專案構建(它不care原始碼是否發生變化),我的配置如下:
    0 2 * (每天2:00 必須build一次原始碼)
    這裡只是向大家說明,本案例因為android每次按照版本及渠道發包,所以不做配置。

構建模組配置

jenkins+gitlab + 蒲公英實現 android 應用自動化打包分發

選擇專案所使用gradle版本,gradle任務:

-PIS_JENKINS=${IS_JENKINS} -PAPP_VERSION=${APP_VERSION} -PJENKINS_TIME=${JENKINS_TIME}
assemble${PRODUCT_FLAVOR_BUILD}${ENVIRONMENT}
--stacktrace
--debug
--info複製程式碼

整合到蒲公英。點選增加構建後步驟,windows選擇execute Windows batch command,新增命令:
curl -k -F "file=@D:envandroid-v%APP_VERSION%-%PRODUCT_FLAVOR_BUILD%-%JENKINS_TIME%-%ENVIRONMENT%.apk" -F "uKey=your ukey" -F "_api_key=your api key" https://www.pgyer.com/apiv1/app/upload
這裡的u key和api key是你在蒲公英平臺註冊開發者獲得。檔案的地址要跟你在專案build.gradle中配置的一樣。

專案build.gradle配置如下:

android{
...
    defaultConfig {
    ...
        versionName APP_VERSION
        resValue("string", `app_version`, APP_VERSION)
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "common"]
    ...    
    }
     productFlavors {
        huawei {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
        }
        xiaomi {
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        ...
    }
    //修改生成的apk名字及輸出目錄
     applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def newName
            def timeNow
            def oldFile = output.outputFile
            def outDirectory = oldFile.parent

            if (IS_JENKINS) {
                timeNow = JENKINS_TIME
                outDirectory = `D:/env`
                newName = `android-v` +
                        APP_VERSION + `-` + variant.productFlavors[0].name + `-`+ timeNow + `-` + variant.buildType.name + `.apk`
            } else {
                timeNow = getDate()
                if (variant.buildType.name.equals(`debug`)) {
                    newName = "android-v${APP_VERSION}-debug.apk"
                } else {
                    newName = `android-v` +
                            APP_VERSION + `-` + variant.productFlavors[0].name + `-`+timeNow + `-` + variant.buildType.name + `.apk`
                }
            }

            output.outputFile = new File(outDirectory, newName)

        }
    }
}複製程式碼

開始構建任務

配置完引數,儲存後回到主頁,點選專案後的run圖示選擇各項動態引數,開始任務。

jenkins+gitlab + 蒲公英實現 android 應用自動化打包分發

jenkins+gitlab + 蒲公英實現 android 應用自動化打包分發

點選構建歷史中當前條目,進入Console Output,可檢視此次構建任務的log資訊。如果構建失敗,請去檢視log資訊,根據錯誤資訊糾錯。

notice: 專案gradle.properties也要新增:

APP_VERSION=2.4.0
IS_JENKINS=false
JENKINS_TIME=``複製程式碼

伺服器上的sdk也要跟本地保持一致。

jenkins最近推出了blue ocean專案,提供了更好的使用者體驗,具體細節在jenkins.io/projects/bl…,你也可以在可選外掛裡搜尋BlueOcean beta,安裝體驗。

相關文章