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