作為一名高效的開發者,要儘量避免的重複勞動實現自動化的流程。搭建本地jenkins伺服器,實現自動化打包流程,從此測試包交給測試人員自己去打就好了,整合蒲公英等分發平臺,實現二維碼或短連結下載,也為運營人員提供了便捷。
前期準備
前往jenkins.io/下載對應系統版本的jenkins包,本文以windows為例,兩種方式:
- 下載windows對應的安裝包,安裝後jenkins作為windows服務佔用本地8080埠;在瀏覽器輸入
localhost:8080
即可訪問。 - 下載tomcat伺服器,然後下載jenkins war包,將其部署到tomcat webapps 目錄下,啟動tomcat後,在瀏覽器使用
localhost:8080/jenkins
訪問。
啟動後,會看到jenkins初始配置頁面,這裡需要選擇安裝的外掛,例如:我要整合gitlab,所以選擇gitlab的外掛,如果你是整合github,則選擇github外掛,大體流程相同,外掛可以後期根據需要再安裝。
進入主頁後,點選系統管理->Global Tool Configuration,設定jdk、git及gradle等。
配置引數
新建自由風格的軟體專案
進入配置頁面
配置Gernal模組。選中引數化構建過程選項,配置如下:
配置原始碼管理。設定遠端倉庫的地址,http方式和ssh方式都是支援的。
ps:如果沒有git選項,可能git環境設定不成功,請去首頁-系統管理-Global Tool Configuration頁,設定jdk、git及gradle等。
構建觸發器。這裡有兩個選項:
-
Poll SCM:定時檢查原始碼變更(根據SCM軟體的版本號),如果有更新就checkout最新code下來,然後執行構建動作。我的配置如下:
/5 * (每5分鐘檢查一次原始碼變化) -
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: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圖示選擇各項動態引數,開始任務。
點選構建歷史中當前條目,進入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,安裝體驗。