上篇,Android之Jenkins自動化打包流程及問題處理(一) 完成Jenkins最基本的自動化國建過程。
但是,我們正式的項目往往需要配置很多的參數,設置等等。所以,最進本的打包,是無法滿足我們的要求的。
這篇文章,就說明下,自動化打包的其他配置,參數化構建,多分支構建等等。
本文內容:
一、參數化構建
在新建的項目裏,點擊左側配置
進入配置頁面,【General】-勾選【參數化構建過程(This project is parameter)】這個選項。
點擊添加參數,可以看到好幾個選項,有boolean類型參數,String類型參數,選擇的參數等等,用哪個類型的參數,需要根據我們的需求來選擇。
現在,我們來模擬2個場景,來看下,這些參數怎麼使用。
配置Gradle打包命令
1,一般的Android項目,都會有測試環境,開發環境,生產環境。
我們會配置productFlavors,如下
Android{
flavorDimensions "env"
productFlavors {
online {
buildConfigField "String", "API_HOST", "\"${cfg["apiUrlRelease"]}\""
dimension "env"
}
//開發版本
dev {
buildConfigField "String", "API_HOST", "\"${cfg["apiUrlDev"]}\""
dimension "env"
}
//測試版(本地)
local {
buildConfigField "String", "API_HOST", "\"${cfg["apiUrlDebug"]}\""
dimension "env"
}
}
}
通常,這樣的情況,我們本地打包的命令是這樣
gradlew assembleOnlineRelease //生產環境
gradlew assembleDevRelease //開發環境
這種情況的話,我們打不同環境的包,就需要 assebleXXXRelease這樣的命令。
這樣,我們就需要添加一個帶選擇的參數(環境就幾個,是固定的)來跟我們的task命令關聯起來,。
說幹就幹。
-
我們添加一個選項參數
這裏的3個選項,對應我們項目裏面的3個測試環境(選項跟build.gradle裏面的環境名字(local,dev,online)需要一樣)。 -
修改構建的task
這裏,我們使用了 ${API_HOST} 替換了打包時候(gradlew assembleXXXRelease),中間的那個環境(XXX)。
這樣的話,在構建項目的時候,就可以通過選項來構建不同環境的包。
配置項目APP的屬性
上面,我們是通過參數來配置打包命令的,並沒有涉及到修改APP裏面的屬性。
這樣,我們強行加戲,再來一個動態添加版本名(versionName),這個屬性。
添加參數,其實,在構建的時候會替換掉項目gradle.properties裏面的相同的參數。所以,我們在Jenkins裏面添加參數後,需要在gradle.properties裏面也添加相應的參數,這樣,我們纔可以使用。
知道了,怎麼替換後,我們的步驟就是:
- 1,在Jenkins裏,添加String參數,在構建的時候寫入進去
- 2,在Android項目的gradle.properties裏添加一個相同的參數
- 3,在build.gradle裏面引用gradle.properties的參數
- 4,這樣能行嗎。。。。
1, 我們先在添加一個String參數的選項了。如下
2,在項目的gradle.properties裏面也添加這個APP_VERSION_NAME參數
gradle.properties
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
APP_VERSION_NAME=2.0.0
3,我們在項目裏面引用這個參數
在app的module裏的build.gradle引用這個版本名
build.gradle
android {
...
defaultConfig {
versionName APP_VERSION_NAME
...
}
...
}
4,這樣能行麼?
事實上,我們做完了上面的3個步驟的話,還是不行的。
我們需要把Jenkins配置的參數,映射到代碼裏。
步驟:
配置 - 構建 - 高級 - 勾選Pass all job parameters as Project properties
如下圖
到這裏就可以構建我們的參數了
最後,回到Jenkins裏我們創建的項目裏。點擊Build with Parameters
點擊完成後,會讓我們配置,我們的參數
當我們配置完成後,就可以開心的構建我們的項目了。
二、多分支構建
在添加完了參數化構建後,項目確實方便了不少。
但是,我們發現,我們的項目有很多分支,難道說,每個分支都要創建一個項目麼,這不科學啊。
後來發現,我們可以通過Git Parameter這個插件,可以實現多個分支的切換。
安裝Git Parameter插件
系統管理 - 插件管理
進去後,點擊可用插件,搜索git parameter
然後,安裝
安裝完成
參數化構建,添加Git Parameter參數
參數化構建 - 添加Git Parameter
看下Git Parameter需要設置哪些參數
Parameter Type 選擇Branch or Tag,這樣,分支跟tag都可以顯示選擇。
默認分支,選擇的還是master
到這裏,參數就填寫完了。
修改源碼管理,默認的master分支
修改我們在設置git地址時候,添加的默認的分支(*/master)
這裏的指定分支用我們剛纔構建 的參數替換(前面要加上‘$’符號)
開始構建
返回,Jenkins的項目裏面,點擊Build with Parameters
我們就看到了,我們遠程的分支就都顯示出來了。
現在,我們就可以自由的選擇分支來打包了。
三、定時構建
1,我們還是進入項目,選擇,左側的配置
2,選擇構建觸發器下面的Build periodically(定時構建)
Build periodically表示週期性的對項目進行構建。到指定的時間,觸發構建任務。
3,填寫定時構建的規則
定時構建規則:
定時構建有5顆星組成。每個星代表不同的含義。
* * * * *
- 第一顆*,表示分鐘,取值範圍0~59
- 第二顆*,表示小時,取值範圍0~23
- 第三顆*,表示一月的第幾天,取值1~31
- 第四顆*,表示第幾個月,取值1~12
- 第五顆*,表示一週的第幾天,取值0~7(0和7都是週日)
1,10分鐘構建一次
H/10 * * * *
2,每2小時構建一次
H H/2 * * *
3,每月的1-10號,每個2天構建一次
H H 1-10/2 * *
4,每週的週一,週五的下午8點,構建一次
H 18 * * 1,5
1,多個指定的時間點,用逗號“,”隔開(比如,H H * * 1,3,5)
2,“/”,表示間隔時間,每隔多長時間,執行一次
3,“1-10”,表示取值返回,連續的日期(分?時?天?)來構建
填寫好構建時間後,下面就會顯示出來優化的規則和執行的時間。
到這裏,這3種構建就說完啦。
Jenkins裏面的功能還有好多好多,push自動構建,構建完成自動上傳到蒲公英,釘釘提示,發郵件等等等等。後面,等嘗試完了,在補充。