作為一名高效的開發(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為例,兩種方式:
- 下載windows對應(yīng)的安裝包,安裝后jenkins作為windows服務(wù)占用本地8080端口;在瀏覽器輸入
localhost:8080即可訪問。 - 下載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):
Poll SCM:定時(shí)檢查源碼變更(根據(jù)SCM軟件的版本號(hào)),如果有更新就checkout最新code下來,然后執(zhí)行構(gòu)建動(dòng)作。我的配置如下:
*/5 * * * * (每5分鐘檢查一次源碼變化)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)。