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

做爲一名高效的開發者,要儘可能避免的重複勞動實現自動化的流程。搭建本地jenkins服務器,實現自動化打包流程,今後測試包交給測試人員本身去打就行了,集成蒲公英等分發平臺,實現二維碼或短連接下載,也爲運營人員提供了便捷。javascript

前期準備

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

  1. 下載windows對應的安裝包,安裝後jenkins做爲windows服務佔用本地8080端口;在瀏覽器輸入localhost:8080便可訪問。
  2. 下載tomcat服務器,而後下載jenkins war包,將其部署到tomcat webapps 目錄下,啓動tomcat後,在瀏覽器使用localhost:8080/jenkins訪問。

啓動後,會看到jenkins初始配置頁面,這裏須要選擇安裝的插件,例如:我要集成gitlab,因此選擇gitlab的插件,若是你是集成github,則選擇github插件,大致流程相同,插件能夠後期根據須要再安裝。android

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

配置參數

新建自由風格的軟件項目github

進入配置頁面web

配置Gernal模塊。選中參數化構建過程選項,配置以下:windows

配置源碼管理。設置遠程倉庫的地址,http方式和ssh方式都是支持的。api


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

構建觸發器。這裏有兩個選項:瀏覽器

  1. Poll SCM:定時檢查源碼變動(根據SCM軟件的版本號),若是有更新就checkout最新code下來,而後執行構建動做。個人配置以下:
    /5 * (每5分鐘檢查一次源碼變化)tomcat

  2. Build periodically:週期進行項目構建(它不care源碼是否發生變化),個人配置以下:
    0 2 * (天天2:00 必須build一次源碼)
    這裏只是向你們說明,本案例由於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:\env\android-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圖標選擇各項動態參數,開始任務。

點擊構建歷史中當前條目,進入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,安裝體驗。

相關文章
相關標籤/搜索