1. 程式人生 > >整合 Jenkins 自動化打包 Android Apk

整合 Jenkins 自動化打包 Android Apk

在最近的 Android 開發中,每次釋出版本都要手動打包,深感到不便,為了讓測試的人員也可以感受到 Android 打包的樂趣,參考了網上很多 Jenkins 進行 Android 自動打包的文章後,花了一些時間把這個環境搭建起來了。

Jenkins 安裝

Jenkins 的可以單獨執行也可以在 Tomcat 伺服器中執行,不過我這裡是單獨執行的,首先就要到 https://jenkins.io/download/ 下載一個適合自己的電腦環境版本的 Jenkins

這裡寫圖片描述

由於我的電腦就是 Windows ,所以就下載圖片紅色選中的,下載並安裝完成後,就會出現下面的介面,要求你填寫 Jenkins

超級管理員密碼,不過它上面已經提示了密碼存放在什麼地方:

這裡寫圖片描述

填寫完密碼後,將會看到外掛安裝介面:

這裡寫圖片描述

這裡我選擇了第一項,安裝預設的外掛,熟悉後再做修改:

這裡寫圖片描述

等全部外掛都下載完成後,就可以看到下面的使用者名稱設定頁面了:

這裡寫圖片描述

上面每一項設定完成並點選 儲存並完成 後,就是設定進入 Jenkins 管理頁面的 url 了,繼續點選右下角的儲存:
這裡寫圖片描述

現在一切都準備就緒,可以開始執行 Jenkins 了:

這裡寫圖片描述

然後就可以看到下面的頁面了:

這裡寫圖片描述

配置 Jenkins 的環境變數

首先進行系統設定:

這裡寫圖片描述

系統設定 的全域性屬性裡面新增 ANDROID_HOME

,也就是本地的 SDK 的路徑:

這裡寫圖片描述

然後點選下發的應用儲存

這裡寫圖片描述

注意:這裡必須先點選應用再去進行儲存,如果不點應用的話,儲存可能會無效

然後就是 全域性工具配置 了:

這裡寫圖片描述

要在這裡配置 JDK 目錄和 Gradle 目錄:

這裡寫圖片描述

這裡就不要使用自動安裝了,直接依賴本地的就可以了,因為 JDK 的自動安裝需要一個 Oracle 賬號,而 Gradle 的下載網速是出了名的慢。

現在就輪到最後的 專案的 gradle 指令碼配置了,這裡就只需要簡單配置一些打包相關的東西即可:

apply plugin: 'com.android.application'
android { compileSdkVersion 1 buildToolsVersion 1.0.0 defaultConfig { applicationId "xxx.xxxx.xxxxx" minSdkVersion 16 targetSdkVersion 27 versionCode 1 versionName 1.0 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } //這個是必須有的 signingConfigs { config { keyAlias 'fritz' keyPassword '123456' storeFile file('keystores\\fritz.jks') storePassword '123456' } } buildTypes { release { minifyEnabled false //去掉沒有使用過的資原始檔,請慎重使用 //因為圖片資源如果在程式碼裡面沒有id引用,一樣會移除 //無法確保全部圖片資源都有id引用的話,不要使用這個屬性 shrinkResources = true signingConfig signingConfigs.config proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' //這裡修改apk檔名 android.applicationVariants.all { variant -> variant.outputs.all { outputFileName = "fritz.apk" } } } } } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'com.android.support.constraint:constraint-layout:1.1.2' testImplementation 'junit:junit:4.12' implementation "com.android.support:appcompat-v7:27.1.1" implementation "com.android.support:support-v4:27.1.1" implementation "com.android.support:design:27.1.1" implementation "com.android.support.constraint:constraint-layout:1.1.2" androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }

建立打包任務

現在就來建立我們的打包任務吧:

這裡寫圖片描述

給我們的打包任務一個名字,按照下圖中去配置即可:

這裡寫圖片描述

點選確認後就可以看到下面的六個配置:

這裡寫圖片描述

這些配置全部都有作用,不過這裡我先針對一部分來講解。

原始碼管理

這裡我使用了 Git 來進行原始碼的管理:

這裡寫圖片描述

Repository URL 中新增專案的 Git 路徑,然後在下面的 add 按鈕裡面新增 Git 的使用者憑證:

這裡寫圖片描述

我們可以在 Branch Specifier 切換到我們想打包的分支,由於這個是剛建立的測試專案,暫時就只有 master 而已。

構建

這裡寫圖片描述

這裡選中第一個 Invoke GradleGradle Version 就用我們之前配置的 GRADLE_HOME 就可以了,而需要執行的 Task 則就是:

app:clean     
app:assembleRelease

接著我們點開右下角的 高階配置按鈕 ,把下面的兩個選擇給勾上:

這裡寫圖片描述

這個是用來傳遞一些自定義引數到 gradle 腳本里面的,暫時用不上,不過可以先開啟。

這裡寫圖片描述

這個就比較重要了,它是專案依賴的support包或第三方庫原始碼下載到 Jenkins 的伺服器中,以便順利完成打包,因此這個是必須開啟的。

這樣子,基本配置就已經完成,這時候點選下面的應用並儲存吧:

這裡寫圖片描述

執行構建任務

在點選儲存之後,就會看到下面的介面,點選立即構建就會開始執行打包任務了:

這裡寫圖片描述

這時候就會看到下面的構建過程了:

這裡寫圖片描述

藍色表示成功,紅色表示失敗,我們點選構建任務來看控制檯的輸出:

這裡寫圖片描述

而且從控制檯的輸出,可以看到它下載了不少第三方庫到本地 Jenkins 伺服器上面:

這裡寫圖片描述

我們到安裝 Jenkins 的資料夾裡面的 workspace ,可以看到下載到本地的專案檔案多了幾個新的資料夾,其中就有下面的快取資料夾:

這裡寫圖片描述

這裡點選進去 caches 進去到 caches\transforms-1\files-1.1 裡面,就可以看到相關的依賴下載了:

這裡寫圖片描述

因此這裡再提醒一次,請務必任務配置裡面把下面這勾給勾上了

這裡寫圖片描述

而任務打包出來的 apk 所在路徑為 app\build\outputs\apk\release

這裡寫圖片描述

上傳 apk 到 fir.im

目前已經順利把 apk 打包出來了,但是目前打包出來是存放在 Jenkins 的本地伺服器上面,還是不太方便提供給測試人員,因此最好就是把伺服器打包出來的 apk 上傳到一個託管釋出測試的平臺,這裡我就選擇了 fir.im 作為測試 apk 釋出平臺。

在登入後 fir 官網的個人資料中有一個 API token

這裡寫圖片描述

這裡寫圖片描述

先把這個記下來,然後到 http://blog.fir.im/jenkins/ 下載 Jenkins 的 fir.im的外掛,下載完成後就到 系統管理 -> 外掛管理->高階 裡面來安裝這個本地外掛:

這裡寫圖片描述

選中剛才下載的外掛後,上傳即可。

這裡寫圖片描述

安裝完成後,再一次開啟我們剛才構建的任務的配置,到 構建後操作 裡面,這時可以看到新的元素了:

這裡寫圖片描述

選中後,填好下面配置即可:

這裡寫圖片描述

然後點選 應用並儲存 。然後再一次構建專案,構建成功後我們會在控制檯輸出看到下面的列印:

這裡寫圖片描述

說明已經上傳到 fir.im 了,現在到 fir.im 裡面可以看到下面的資訊:

這裡寫圖片描述

這時候,測試人員就只需要通過 fir.im 下載連結即可下載最新的測試 apk 了。

從此開發人員就只需要上傳程式碼,然後幫測試人員那邊安裝好環境,以後就可以讓測試人員慢慢享受打包的樂趣了。