文章目錄
- Jenkins 介紹(一)
- Jenkins 下載安裝(二)
- Jenkins 系統(tǒng)配置(三)
- Jenkins 用戶權(quán)限問題(四)
- Jenkins 項(xiàng)目配置(五)
- Jenkins 參數(shù)化構(gòu)建(六)
參數(shù)化構(gòu)建的意思為 使用Jenkins構(gòu)建打包的時候動態(tài)的修改gradle文件里面的配置
使用動態(tài)構(gòu)建時,我們需要使用到gradle文件和properties文件配置需要使用的自定義屬性.properties文件
## Jenkins參數(shù)化構(gòu)建使用的變量
## APP version name
APP_VERSION=4.2.2
# 是否為 Jenkins 編譯, 默認(rèn)是 false
IS_JENKINS=false
# 構(gòu)建時間
BUILD_TIME=''
# 渠道名稱
PRODUCT_FLAVORS=website
# 服務(wù)器生構(gòu)建路徑
BUILD_PATH_JENKINS=F:\\DownloadApk
BUILD_PATH_LOCAL=F:\\AS_PROJECT\\TestJenkins
# app名稱
APPNAME=cdelphone
.gradle文件
apply plugin: 'com.android.application'
//獲取當(dāng)前時間
def getDate() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
}
//打包的一些參數(shù)
ext {
TestVersion = "1.0.0"
TestVersionCode = "100"
}
android {
compileSdkVersion 21
buildToolsVersion '24.0.2'
defaultConfig {
applicationId "com.cdel.chinaacc.daytest"
versionCode 8
versionName APP_VERSION
minSdkVersion 15
targetSdkVersion 16
multiDexEnabled true
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "web"]
}
lintOptions {
abortOnError false
checkReleaseBuilds false
disable 'MissingTranslation' // 防止在發(fā)布的時候出現(xiàn)因MissingTranslation導(dǎo)致Build Failed!
}
packagingOptions {
exclude 'AndroidManifest.xml'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'local.properties'
}
dexOptions {
javaMaxHeapSize "4g"
}
//簽名相關(guān)
signingConfigs {
myConfig {
storePassword "***"
keyAlias "***"
keyPassword "***"
//由于本地打包使用的是本機(jī)上的KeyStore
//而Jenkins打包用的是服務(wù)器上的KeyStore
//兩個路徑不一樣
if ("true".equals(IS_JENKINS)) {
storeFile file('./keystore/mykey')
} else {
storeFile file('./keystore/mykey')
}
}
}
buildTypes {
release {
minifyEnabled true
zipAlignEnabled true
shrinkResources true
signingConfig signingConfigs.myConfig
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
debug {
signingConfig signingConfigs.myConfig
// zipAlignEnabled true
// minifyEnabled false // 是否混淆
// shrinkResources false // 是否去除無效的資源文件
// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//打包輸出apk名稱
applicationVariants.all { variant ->
variant.outputs.each { output ->
def apk = output.outputFile
if (apk != null && apk.name.endsWith('.apk')) {
//新名字
def fileName
//時間戳
def timeNow
//輸出文件夾
def outDirectory
//是否為Jenkins打包,輸出路徑不同
if ("true".equals(IS_JENKINS)) {
//時間戳
timeNow = BUILD_TIME
//輸出文件夾 BUILD_PATH 服務(wù)器輸出路徑
outDirectory = BUILD_PATH_JENKINS
fileName = APPNAME + "_V${variant.versionName}_${variant.buildType.name}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outDirectory + "/" + timeNow, fileName)
} else {
//時間戳
timeNow = getDate()
outDirectory = BUILD_PATH_LOCAL
fileName = APPNAME + "_V${variant.versionName}_${variant.buildType.name}_${variant.productFlavors[0].name}.apk"
output.outputFile = new File(outDirectory + "/" + timeNow, fileName)
}
}
}
}
// 渠道列表
productFlavors {
m91zhushou {}
anzhuoshichang {}
anzhi {}
tencent {}
mumayi {}
wandoujia {}
m360shouji {}
baidu {}
xiaomi {}
meizu {}
huawei {}
web {}
zonghe {}
}
// 指定渠道名
productFlavors .all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
dependencies {
compile project(':cdelframelib')
}
}
上面我們配置了、渠道包、簽名文件、版本號、apk命名、apk輸出文件夾,在.properties文件中需要 一 一 與之對應(yīng)。下面我們進(jìn)入到Jenkins對上述參數(shù)進(jìn)行對應(yīng)配置。
找到 參數(shù)化構(gòu)建過程選項(xiàng)→打勾
選擇→添加參數(shù)
選項(xiàng)參數(shù)使用 Choice
字符輸入?yún)?shù)使用 String Parameter
時間參數(shù)使用 Dynamic Parameter在添加參數(shù)時,配置Name的值必須與.properties文件中定義的參數(shù)名稱相同。我們需要用到的僅這三個,具體輸入如下圖。Choice
Dynamic Parameter
String Parameter
將需要的參數(shù)按類別添加即可。
參數(shù)引用找到上面我們使用Gradle 插件的 Invoke Gradle script修改tasks命令,應(yīng)用上面的參數(shù),并勾選Pass job parameters as Gradle properties選項(xiàng)。如下圖。
PRODUCT_FLAVORS
和BUILD_TYPE
即我們上面配置的參數(shù),務(wù)必保持一致。點(diǎn)擊保存,回到項(xiàng)目首頁。就可以看到,原先的立即構(gòu)建已經(jīng)變成了Build with Parameter點(diǎn)擊參數(shù)構(gòu)建,就可以看到如下上面我們配置的參數(shù)。等待構(gòu)建完成,前往在.Gradle文件中配置的路徑中即可找到我們配置的命名apk。
另外提一點(diǎn),更換名稱。因?yàn)樵皇菢?gòu)建編號,沒有識別度。相信你從無參構(gòu)建時就想更換了。
進(jìn)入項(xiàng)目配置找到→構(gòu)建環(huán)境→勾選Set build Name 設(shè)置參數(shù)
重新打包,如上圖我們使用了BUILD_NUMBER 自帶參數(shù),以及 APPNAME、APP_VERSION、BUILD_TYPE ,最后效果如下圖。