用Jenkins+Docker搭建Android持續集成平台

背景描述

隨著公司擴大和測試團隊的引入,原有的本地打包已經無法滿足需求,所以考慮搭建Android持續集成打包平台。因為我司前後端發版是通過Docker+Jenkins,所以就沿用它。

網上對於搭建Jenkins的教程很多,但是基於Docker的很少,同時要考慮伺服器上無法翻牆,所以自己摸索並填了很多坑,因此記錄一下。

建議提前了解一下:

持續集成是什麼?

Jenkins是什麼?

Docker入門gitbook

Android Gradle 使用教程

設計思路

實現目標:可以根據參數打不同flavor/不同運行環境的包;收集打包成功後的成果(Artifact);把api上傳到fir後,在建構列表展示出下載鏈接。

思路:先在本地配置Docker+Jenkins,本地測試打包成功後,再把dockerfile上傳到伺服器。以下配置講的是在本地(mac)搭建一個Docker+Jenkins的持續集成環境。

開始配置

一.配置Docker

  1. 去官網下載最新的Docker,並安裝

因為在docker里下載jenkins速度比較慢,所以建議給docker配置阿里鏡像加速,具體可以網搜一下教程,配置完如下圖

2. 修改Dockerfile文件,添加accept lisence所需的腳本。下載路徑

Docker作用相當於一個虛擬機,你可以在它裡面安裝你需要的環境,但開銷比虛擬機要小。

Dockerfile是構建一個容器的默認的配置文件,我們編寫一個Dockerfile,在這個Docker容器內配置所需要的環境。

3.建構並運行Docker

      1. 命令行進入jenkisn_dockerfile目錄,輸入:docker build -t <tagname> . 將開始執行腳本中的內容,下載安裝所需環境
      2. 再在命令行輸入docker run -p 8080:8080 -p 50000:50000 <tagname>這樣就會開始運行了安裝好所需環境的容器

4.等腳本跑完在瀏覽器輸入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服務

TAG:Android | 持续集成CI | Docker |