作為一名高效的開發(fā)者靖诗,要盡量避免的重復勞動實現(xiàn)自動化的流程。搭建本地jenkins服務(wù)器支示,實現(xiàn)自動化打包流程刊橘,從此測試包交給測試人員自己去打就好了,集成蒲公英等分發(fā)平臺颂鸿,實現(xiàn)二維碼或短鏈接下載促绵,也為運營人員提供了便捷。
前期準備
前往https://jenkins.io/下載對應(yīng)系統(tǒng)版本的jenkins包嘴纺,本文以windows為例败晴,兩種方式:
- 下載windows對應(yīng)的安裝包,安裝后jenkins作為windows服務(wù)占用本地8080端口;在瀏覽器輸入
localhost:8080
即可訪問栽渴。 - 下載tomcat服務(wù)器尖坤,然后下載jenkins war包,將其部署到tomcat webapps 目錄下,啟動tomcat后闲擦,在瀏覽器使用
localhost:8080/jenkins
訪問慢味。
啟動后,會看到j(luò)enkins初始配置頁面墅冷,這里需要選擇安裝的插件贮缕,例如:我要集成gitlab,所以選擇gitlab的插件俺榆,如果你是集成github感昼,則選擇github插件,大體流程相同罐脊,插件可以后期根據(jù)需要再安裝定嗓。
進入主頁后,點擊系統(tǒng)管理->Global Tool Configuration萍桌,設(shè)置jdk宵溅、git及gradle等。
配置參數(shù)
新建自由風格的軟件項目
進入配置頁面
配置Gernal模塊上炎。選中參數(shù)化構(gòu)建過程選項恃逻,配置如下:
配置源碼管理雏搂。設(shè)置遠程倉庫的地址,http方式和ssh方式都是支持的寇损。
ps:如果沒有g(shù)it選項凸郑,可能git環(huán)境設(shè)置不成功,請去首頁-系統(tǒng)管理-Global Tool Configuration頁矛市,設(shè)置jdk芙沥、git及gradle等。
構(gòu)建觸發(fā)器浊吏。這里有兩個選項:
Poll SCM:定時檢查源碼變更(根據(jù)SCM軟件的版本號)而昨,如果有更新就checkout最新code下來,然后執(zhí)行構(gòu)建動作找田。我的配置如下:
*/5 * * * * (每5分鐘檢查一次源碼變化)Build periodically:周期進行項目構(gòu)建(它不care源碼是否發(fā)生變化)歌憨,我的配置如下:
0 2 * * * (每天2:00 必須build一次源碼)
這里只是向大家說明,本案例因為android每次按照版本及渠道發(fā)包墩衙,所以不做配置躺孝。
構(gòu)建模塊配置
選擇項目所使用gradle版本,gradle任務(wù):
-PIS_JENKINS=${IS_JENKINS} -PAPP_VERSION=${APP_VERSION} -PJENKINS_TIME=${JENKINS_TIME}
assemble${PRODUCT_FLAVOR_BUILD}${ENVIRONMENT}
--stacktrace
--debug
--info
集成到蒲公英底桂。點擊增加構(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是你在蒲公英平臺注冊開發(fā)者獲得惧眠。文件的地址要跟你在項目build.gradle中配置的一樣籽懦。
項目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ù),保存后回到主頁氛魁,點擊項目后的run圖標選擇各項動態(tài)參數(shù)暮顺,開始任務(wù)。
點擊構(gòu)建歷史中當前條目秀存,進入Console Output捶码,可查看此次構(gòu)建任務(wù)的log信息。如果構(gòu)建失敗或链,請去查看log信息惫恼,根據(jù)錯誤信息糾錯。
notice: 項目gradle.properties也要添加:
APP_VERSION=2.4.0
IS_JENKINS=false
JENKINS_TIME=''
服務(wù)器上的sdk也要跟本地保持一致澳盐。
jenkins最近推出了blue ocean項目祈纯,提供了更好的用戶體驗,具體細節(jié)在https://jenkins.io/projects/blueocean/叼耙,你也可以在可選插件里搜索BlueOcean beta,安裝體驗腕窥。