jenkins+gitlab+蒲公英實(shí)現(xiàn)android應(yīng)用自動(dòng)化打包分發(fā)

作為一名高效的開發(fā)者,要盡量避免的重復(fù)勞動(dòng)實(shí)現(xiàn)自動(dòng)化的流程。搭建本地jenkins服務(wù)器,實(shí)現(xiàn)自動(dòng)化打包流程,從此測試包交給測試人員自己去打就好了,集成蒲公英等分發(fā)平臺(tái),實(shí)現(xiàn)二維碼或短鏈接下載,也為運(yùn)營人員提供了便捷。

前期準(zhǔn)備

前往https://jenkins.io/下載對應(yīng)系統(tǒng)版本的jenkins包,本文以windows為例,兩種方式:

  1. 下載windows對應(yīng)的安裝包,安裝后jenkins作為windows服務(wù)占用本地8080端口;在瀏覽器輸入localhost:8080即可訪問。
  2. 下載tomcat服務(wù)器,然后下載jenkins war包,將其部署到tomcat webapps 目錄下,啟動(dòng)tomcat后,在瀏覽器使用localhost:8080/jenkins訪問。

啟動(dòng)后,會(huì)看到j(luò)enkins初始配置頁面,這里需要選擇安裝的插件,例如:我要集成gitlab,所以選擇gitlab的插件,如果你是集成github,則選擇github插件,大體流程相同,插件可以后期根據(jù)需要再安裝。

進(jìn)入主頁后,點(diǎn)擊系統(tǒng)管理->Global Tool Configuration,設(shè)置jdk、git及gradle等。

配置參數(shù)

新建自由風(fēng)格的軟件項(xiàng)目

進(jìn)入配置頁面

配置Gernal模塊。選中參數(shù)化構(gòu)建過程選項(xiàng),配置如下:

配置源碼管理。設(shè)置遠(yuǎn)程倉庫的地址,http方式和ssh方式都是支持的。


ps:如果沒有g(shù)it選項(xiàng),可能git環(huán)境設(shè)置不成功,請去首頁-系統(tǒng)管理-Global Tool Configuration頁,設(shè)置jdk、git及gradle等。

構(gòu)建觸發(fā)器。這里有兩個(gè)選項(xiàng):

  1. Poll SCM:定時(shí)檢查源碼變更(根據(jù)SCM軟件的版本號(hào)),如果有更新就checkout最新code下來,然后執(zhí)行構(gòu)建動(dòng)作。我的配置如下:
    */5 * * * * (每5分鐘檢查一次源碼變化)

  2. Build periodically:周期進(jìn)行項(xiàng)目構(gòu)建(它不care源碼是否發(fā)生變化),我的配置如下:
    0 2 * * * (每天2:00 必須build一次源碼)
    這里只是向大家說明,本案例因?yàn)閍ndroid每次按照版本及渠道發(fā)包,所以不做配置。

構(gòu)建模塊配置


選擇項(xiàng)目所使用gradle版本,gradle任務(wù):

-PIS_JENKINS=${IS_JENKINS} -PAPP_VERSION=${APP_VERSION} -PJENKINS_TIME=${JENKINS_TIME}
assemble${PRODUCT_FLAVOR_BUILD}${ENVIRONMENT}
--stacktrace
--debug
--info

集成到蒲公英。點(diǎn)擊增加構(gòu)建后步驟,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是你在蒲公英平臺(tái)注冊開發(fā)者獲得。文件的地址要跟你在項(xiàng)目build.gradle中配置的一樣。

項(xiàng)目build.gradle配置如下:

android{
...
    defaultConfig {
    ...
        versionName APP_VERSION
        resValue("string", 'app_version', APP_VERSION)
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "common"]
    ...    
    }
     productFlavors {
        commonsoon {    
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "commonsoon"]
        }
        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 ("true".equals(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)

        }
    }
}

開始構(gòu)建任務(wù)

配置完參數(shù),保存后回到主頁,點(diǎn)擊項(xiàng)目后的run圖標(biāo)選擇各項(xiàng)動(dòng)態(tài)參數(shù),開始任務(wù)。

點(diǎn)擊構(gòu)建歷史中當(dāng)前條目,進(jìn)入Console Output,可查看此次構(gòu)建任務(wù)的log信息。如果構(gòu)建失敗,請去查看log信息,根據(jù)錯(cuò)誤信息糾錯(cuò)。

notice: 項(xiàng)目gradle.properties也要添加:

APP_VERSION=2.4.0
IS_JENKINS=false
JENKINS_TIME=''

服務(wù)器上的sdk也要跟本地保持一致。

jenkins最近推出了blue ocean項(xiàng)目,提供了更好的用戶體驗(yàn),具體細(xì)節(jié)在https://jenkins.io/projects/blueocean/,你也可以在可選插件里搜索BlueOcean beta,安裝體驗(yàn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容