1. 程式人生 > >Android Jenkins+Git+Gradle持續整合

Android Jenkins+Git+Gradle持續整合

首先到Jenkins的官網下載https://jenkins.io,安裝jenkins不再贅述然後是外掛安裝如下注意:列表中為主要外掛,而Jenkins的外掛是有依賴關係的,安裝一個外掛可能要先安裝它依賴的外掛,否則會安裝失敗。在可選外掛勾選列表中的外掛即可,依賴外掛會自動下載,是不是很棒。

Git pluginGradle PluginEmail Extension Plugindescription setter pluginbuild-name-setteruser build vars pluginPost-Build Script Plug-inBranch API PluginSSH pluginScriptlerDynamic Parameter Plug-inGit Parameter Plug-In線上沒有的外掛可以去找離線包

接著安裝打包需要的工具 安卓 sdk gradle git1.下載Android SDKhttp://tools.android-studio.org/index.php/sdk/ 我下載的是:android-sdk_r24.4.1-linux.tgz

2. 解壓Android SDK將android-sdk_r24.4.1-linux.tgz檔案複製到Linux 檔案系統中的某個目錄,我的是目錄是/usr/local/執行命令解壓:tar -zvxf android-sdk_r24.4.1-linux.tgz3.配置環境變數在檔案/etc/profile末端新增如下兩行:export ANDROID_HOME=/usr/local/android-sdk-linuxexport PATH=$ANDROID_HOME/tools:$PATHandroid-sdk-linux是你解壓後的檔名,tools一定要這樣寫,是裡面資料夾的名稱

執行命令檔案立馬生效source /etc/profile4.安裝所有包android update sdk --no-ui或者檢視序列號android list sdk --all結果1- Android SDK Tools, revision 24.1.2 2- Android SDK Platform-tools, revision 22 3- Android SDK Build-tools, revision 22.0.1 4- Android SDK Build-tools, revision 22 (Obsolete) 5- Android SDK Build-tools, revision 21.1.2 6- Android SDK Build-tools, revision 21.1.1 (Obsolete) 7- Android SDK Build-tools, revision 21.1 (Obsolete) 8- Android SDK Build-tools, revision 21.0.2 (Obsolete) 9- Android SDK Build-tools, revision 21.0.1 (Obsolete) 10- Android SDK Build-tools, revision 21 (Obsolete) 11- Android SDK Build-tools, revision 20 12- Android SDK Build-tools, revision 19.1 13- Android SDK Build-tools, revision 19.0.3 (Obsolete) 14- Android SDK Build-tools, revision 19.0.2 (Obsolete) 15- Android SDK Build-tools, revision 19.0.1 (Obsolete) 16- Android SDK Build-tools, revision 19 (Obsolete) 17- Android SDK Build-tools, revision 18.1.1 (Obsolete) 18- Android SDK Build-tools, revision 18.1 (Obsolete) 19- Android SDK Build-tools, revision 18.0.1 (Obsolete) 20- Android SDK Build-tools, revision 17 (Obsolete) 21- Documentation for Android SDK, API 22, revision 1 22- SDK Platform Android 5.1.1, API 22, revision 2 23- SDK Platform Android 5.0.1, API 21, revision 2 24- SDK Platform Android 4.4W.2, API 20, revision 2 25- SDK Platform Android 4.4.2, API 19, revision 4 26- SDK Platform Android 4.3.1, API 18, revision 3 27- SDK Platform Android 4.2.2, API 17, revision 3按序列號安裝

android update sdk -u --all --filter 1,2,3,5,11,12,22,23,24,25,26,27,28,29,88,89後面如果打包報錯再來按序號安裝所需版本

gradle安裝及使用到官網下載 https://gradle.org/install/2、解壓安裝包到目錄

/root/A3、開啟環境檔案

sudo vim /etc/profile4、寫入環境變數:

export GRADLE_HOME=/root/A/gradle-2.0 export PATH=$GRADLE_HOME/bin:$PATH5、環境變數生效

source /etc/profile6、檢查結果

gradle -v出現版本資訊即為正確Gradel的使用:檢視當前工程支援的操作任務

gradle tasks清理工程

gradle clean編譯專案debug版本 ,並輸出到output目錄

gradle assembleDebug編譯專案release版本 ,並輸出到output目錄

gradle assembleRelease程式碼檢查及測試

gradle check編譯專案並執行檢查及測試,即assemble + check

gradle build

然後在jenkins上配置工具的路徑1 設定全域性環境變數

主要有三個全域性環境變數,JAVA_HOME,ANDROID_HOME,GRADLE_HOME

點選系統管理-系統設定,找到全域性屬性,勾選enviroment variables,分別新增這三個環境變數。主要新增變數路徑要和你係統的保持一致。

然後是 工具路徑 點選系統管理-Global tool configuration

最後開始打包 打包1.建立專案距離開始打包又近了一步,接下來就開始建立新專案了,點選首頁的新建,進入下圖介面

 

給自己的專案起個名字,然後選擇構建一個自由風格的軟體專案,點選OK按鈕,進入專案的配置介面。

2.專案配置直接選擇原始碼管理tab或者向下滾動找到原始碼管理,如圖;

選中Git選項,會出現上圖的介面,配置Git專案的URL,我測試用的是Github專案,並且傳輸協議選擇的是HTTP,需要選擇Credentials選項,選擇通行證,第一次需要點選Add新增通行證,如圖:

Kind種類選擇預設的Username with password,然後在Username和Pasword處分別輸入Git賬戶的使用者名稱和密碼,然後滾動到下方點選Add,然後在Credentials中選擇我們剛才新增的通行證。接著滾動到構建Tab,點選新增構建步驟,然後選擇Invoke Gradle script,如圖:

然後配置構建時的Gradle版本,和需要執行的任務,如圖:

這個Tasks是先clean工程,然後打包所有渠道的Release版本,這是Gradle的命令,不多說了。然後點選儲存按鈕,馬上就可以打包了。3.開始構建點選左側選單欄的立即構建,開始構建專案,這時候Build History版塊會出現構建任務列表,點選進入可以檢視構建詳情頁

又很多選單可以選擇來檢視狀態,點選Console Output來檢視構建輸出的日誌,所有的資訊都會顯示,日誌最後輸出Finished: SUCCESS即構建成功。

成功之後,返回專案地址就可以點選工作空間,在app的build目錄下面檢視apk生成情況。

以上就是Jenkins打包最簡單的配置,我知道大家想要的不止這些,更精彩的還在後面。

定製想要的功能1.引數化構建在我們打包的時候,我們大多時候不想只是簡簡單單打一個版本的包,我們想通過配置一下引數,來滿足一些需求,比如根據渠道打不同版本的包、根據Tag打不同的包等,下面就來說一下Jenkins引數化構建。

在我們專案中需要配置的選項有:版本(Release 或 Debug),版本號,渠道包,根據Tag打包。另外我們還需要加上打包途徑,AS打包還是Jenkins打的包,還要加一個時間戳。所有的引數列出來了,下面就配置Jenkins的引數化構建吧~

在Jenkins專案主頁選擇配置,進入配置頁,在General tab將引數化構建過程選中,如圖:

接下來就可以新增引數了,下面我先列出引數表格:

引數名 引數型別 引數值列表BUILD_TYPE Choice Release or DebugIS_JENKINS Choice truePRODUCT_FLAVORS Choice Xiaomi 、Wandoujia等BUILD_TIME Dynamic Parameter 2016-12-21-11-11APP_VERSION Choice 1.0.0、1.0.1等GIT_TAG Git Parameter tag1.0.0等下面直接放我的配置截圖:

配置完引數還不算完,我們要在下方構建時候引用,首先找到構建標籤處,將Tasks屬性值修改為:clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE} --stacktrace --debug其中${PRODUCT_FLAVORS}和&{BUILD_TYPE}分別對應上面的引數名。配置如圖:

看了圖大家肯定留意到了紅色框內的選項而且很好奇吧,這個選項是APP_VERSION、IS_JENKINS、BUILD_TIME需要用到的,因為這三個引數需要注入到Android專案中的配置一樣,而紅色框中的這個選項可以幫我們侵入到gradle.properties檔案中替換值,並且build.gradle檔案能夠直接引用gradle.properties檔案中的屬性,所以起到了侵入的效果。下面分別是我的gradle.properties和主專案的build.gradle檔案全程式碼:

//gradle.properties


#sec:decoupled_projects
#org.gradle.parallel=true
APP_VERSION=1.0.1
IS_JENKINS=true
BUILD_TIME=''

//build.gradle

apply plugin: 'com.android.application'
def getDate() { 
def date = new Date() 
def formattedDate = date.format('yyyy-MM-dd-HH-mm') 
return formattedDate
}
def verCode = 14
android { 
compileSdkVersion 25 
buildToolsVersion "25.0.0" 
defaultConfig { 
applicationId "com.zyyoona7.autobuildtest" 
minSdkVersion 15 
targetSdkVersion 23 
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
multiDexEnabled true 
versionCode verCode 
versionName APP_VERSION 
} 
signingConfigs { 
signingConfig { 
//由於本地打包使用的是本機上的KeyStore 
//而Jenkins打包用的是伺服器上的KeyStore 
//兩個路徑不一樣 
if("true".equals(IS_JENKINS)){ 
storeFile file("伺服器上KeyStore的路徑") 
}else { 
storeFile file(STORE_FILE_PATH) 
} 
keyAlias KEY_ALIAS 
keyPassword KEY_PASSWORD 
storePassword STORE_FILE_PASSWORD 
} 
} 
buildTypes { 
release { 
minifyEnabled true 
zipAlignEnabled true 
shrinkResources true 
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
signingConfig signingConfigs.signingConfig 
} 
debug { } 
} 
dexOptions { 
javaMaxHeapSize "2g" 
} 
//渠道Flavors 
productFlavors { 
wandoujia { 
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] 
} 
xiaomi { 
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] 
} 
} 
//修改生成的apk名字及輸出資料夾 
applicationVariants.all { variant -> 
variant.outputs.each { output -> 
//新名字 
def newName 
//時間戳 
def timeNow 
//輸出資料夾 
def outDirectory 
//是否為Jenkins打包,輸出路徑不同 
if ("true".equals(IS_JENKINS)) { 
//Jenkins打包輸出到伺服器路徑 
timeNow = BUILD_TIME 
//BUILD_PATH為伺服器輸出路徑 
outDirectory = BUILD_PATH 
//AutoBuildTest-v1.0.1-xiaomi-release.apk 
newName = 'AutoBuildTest-v' + APP_VERSION + '-' + variant.productFlavors[0].name + '-' + variant.buildType.name + '.apk' 
} else { 
//本機打包輸出在本機路徑 
timeNow = getDate() 
outDirectory = output.outputFile.getParent() 
if ('debug'.equals(variant.buildType.name)) { 
newName = "AutoBuildTest-v${APP_VERSION}-debug.apk" 
} else { 
//AutoBuildTest-v1.0.1-xiaomi-release.apk 
newName = 'AutoBuildTest-v' + APP_VERSION + '-' + variant.productFlavors[0].name + '-' + variant.buildType.name + '.apk' 
} 
} 
output.outputFile = new File(outDirectory+'/'+timeNow, newName) 
} 
}
}

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
exclude group: 'com.android.support', module: 'support-annotations' 
}) 
compile 'com.android.support:appcompat-v7:25.0.0' 
testCompile 'junit:junit:4.12'
}

這樣在Jenkins打包的時候上面三個引數就會隨著選擇變化而變化了。

GIT_TAG引數使用配置,只需在原始碼管理處的Branch引用改為$GIT_TAG引用引數名,如圖:

引數配置完畢,看一下主頁面的效果吧,現在立即構建選項變成了_ Build with Parameters_,完成圖:提示:

如果選中了GIT_TAG中的任意版本都無法取消選中,只能重新整理;構建後操作 

將apk放在nginx的下載目錄下nginx 即開啟 autoindex on 即可

jenkins配置如下

測試人員即可從網址下下載所需apk了

如果沒有伺服器的 給大家福利阿里雲的優惠券

https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=twka3s4r