用Jenkins+Docker搭建Android持續集成平台
背景描述
隨著公司擴大和測試團隊的引入,原有的本地打包已經無法滿足需求,所以考慮搭建Android持續集成打包平台。因為我司前後端發版是通過Docker+Jenkins,所以就沿用它。
網上對於搭建Jenkins的教程很多,但是基於Docker的很少,同時要考慮伺服器上無法翻牆,所以自己摸索並填了很多坑,因此記錄一下。
建議提前了解一下:
持續集成是什麼?
Jenkins是什麼?
Docker入門gitbook
Android Gradle 使用教程
設計思路
實現目標:可以根據參數打不同flavor/不同運行環境的包;收集打包成功後的成果(Artifact);把api上傳到fir後,在建構列表展示出下載鏈接。
思路:先在本地配置Docker+Jenkins,本地測試打包成功後,再把dockerfile上傳到伺服器。以下配置講的是在本地(mac)搭建一個Docker+Jenkins的持續集成環境。
開始配置
一.配置Docker
- 去官網下載最新的Docker,並安裝
因為在docker里下載jenkins速度比較慢,所以建議給docker配置阿里鏡像加速,具體可以網搜一下教程,配置完如下圖
2. 修改Dockerfile文件,添加accept lisence所需的腳本。下載路徑
Docker作用相當於一個虛擬機,你可以在它裡面安裝你需要的環境,但開銷比虛擬機要小。
Dockerfile是構建一個容器的默認的配置文件,我們編寫一個Dockerfile,在這個Docker容器內配置所需要的環境。
3.建構並運行Docker
- 命令行進入jenkisn_dockerfile目錄,輸入:
docker build -t <tagname> .
將開始執行腳本中的內容,下載安裝所需環境 - 再在命令行輸入
docker run -p 8080:8080 -p 50000:50000 <tagname>
這樣就會開始運行了安裝好所需環境的容器
4.等腳本跑完在瀏覽器輸入http://localhost:8080/ 進入jenkins登錄界面
如果是第一次運行jenkins,需要輸入密鑰,這個在跑docker run -p 8080:8080 -p 50000:50000 <tagname>
時會輸出到命令行,注意查看一下。
二.改造Android項目
1.在項目根目錄新建 gradle.properties 文件,在這裡指定默認的api運行環境
API_URL_TYPE=test1 n
2.在一個安全的目錄下存放storeFile,並新建keystore.properties文件,注意此文件的私密性
storePassword=xxxnkeyPassword=xxnkeyAlias=xxxnstoreFile=file/director/storefile # 這個是key文件相對於module的路徑n
3.修改module下的build.gradle文件
android{n defaultConfig{n // 自定義配置變數n buildConfigField String, API_URL, API_URLn }nn signingConfigs {n release {n // Load keystoren if(rootProject.file("keystore.properties").exists()){n def keystoreProperties = new Properties()n def keystorePropertiesFile = rootProject.file("keystore.properties")n keystoreProperties.load(new FileInputStream(keystorePropertiesFile))n storeFile file(keystoreProperties[storeFile])n storePassword keystoreProperties[storePassword]n keyAlias keystoreProperties[keyAlias]n keyPassword keystoreProperties[keyPassword]n }n }n }nn // 指定release包的簽名配置n buildTypes{n release{n signingConfig signingConfigs.releasen }n} n
三.創建Jenkins打包項目
1.創建一個項目
2.General-參數化建構過程-添加參數-Choice Parameter
3.源碼管理添加Repo URL和許可權認證Credentials
4.建構
5.建構後操作
(1)收集建構成果,比如apk,mapping文件
(2)上傳apk到fir
(3)把上傳到fir的短鏈接展示到建構列表中。
i.你需要安裝一個插件:description setter plugin
ii.在建構後操作添加set build description
如下。它會通過正則表達式匹配建構的輸出,匹配到字元串可以用n
獲取。比如下面的1
會獲取第一個匹配到的字元串
iii.此時在建構列表裡它會顯示為如下。我們要去系統管理-全局安全配置-Markup Formatter選擇SafeHtml
<a href="http://fir.im/xxx">http://fir.im/xxx</a>n
最後效果
參考文檔
使用Jenkins搭建iOS/Android持續集成打包平台 在mac osx 下使用 Jenkins對Android 進行持續集成 基於Docker容器搭建Android SDK環境 github添加DeployKey Dockerfile的常用指令
Demo鏈接
JenkinsDemo
原文鏈接 作者 @ke ji
本文版權屬於再惠研發團隊,歡迎轉載,轉載請保留出處。
推薦閱讀:
※把docker鏡像當作桌面系統來用
※Hyper:一款新推出的免費容器(類vps)
※Docker學習資源匯總
※Docker中使用Dockerfile生成ssh服務