Android Gradle JenKins SVN 自動化打包

JenKins 是什么伪朽?

理解:是一個集成各種插件,通過配置汛蝙、管理 的本地Web烈涮,去自動化打包Android朴肺、IOS的工具。

整體流程

插件配置——————》系統(tǒng)設(shè)置 sdk HOME 和路徑 ?坚洽,全局設(shè)置JDK戈稿、GRADLE 、GIT 的本地路徑 交由JenKins 管理(即Jenkins通過上步安裝的插件 配置好 就可以管理本地的gradle了)新建一個任務(wù)————》動態(tài)構(gòu)造自定義本地參數(shù)寫入build讶舰。gradle ——————》配置git 或svn 路徑(下載源碼到j(luò)enkins 好接管編譯)——————————》配置gradle 及task (編譯命令和編譯寫入構(gòu)造好的參數(shù))——》設(shè)置編譯的版本名稱————》構(gòu)建項目 ——————控制臺看log ?——————》自定義的輸出apk路徑 找到打出的apk包

環(huán)境變量配置:其實就是將本地計算機(jī)的配置 在JenKins上面配置一遍鞍盗,Jenkins 通過插件就可以自己去管理了。原本studio 通過gradle 編譯的android 項目在jenkins上處理了跳昼。





注:下面截圖上傳失敗 只能語言表達(dá)了般甲。

step.1

JDK

JDK 7.0+

Gradle

Gradle 中文網(wǎng) 安裝板或解壓版 對應(yīng)目錄下的 gradle.xxx.zip 包

apache 的官網(wǎng) http://tomcat.apache.org/

下載Tomcat9.0.zip

Jenkins的官網(wǎng)下載https://jenkins.io

下載Jenkins.war

step.2

解壓Tomcat9.0.zip

Jenkins.war放到 其解壓后的webapps的目錄下

step.3

解壓后的tomcat的bin目錄下 點擊startup.bat 啟動tomcat (shutdown.bat 停止tomcat)

step.4

打開本地瀏覽器

http://localhost:8080/jenkins/

然后注冊用戶名密碼。

這時候會出現(xiàn) ?一個文件夾路徑 ?拷貝到C盤 打開此文件夾 鹅颊,會出現(xiàn)數(shù)字密碼敷存。將其復(fù)制到 下面密碼框即可。

step.5 插件配置



進(jìn)入系統(tǒng)管理--》插件管理界面

可選插件 安裝如下插件,這些插件之后會用到堪伍。 點擊下載后在安裝锚烦。下載成功后。關(guān)閉tomcat 在打開帝雇。在訪問genkins 同上面step3 和step4. 在次進(jìn)入 已安裝即可查看到挽牢。

1.Branch API Plugin

2.build timeout plugin

3.build-name-setter

4.Credentials Binding Plugin

5.description setter plugin

6.Dynamic Parameter Plug-in

7.Environment Injector Plugin

13.Pipeline: Basic Steps

14.Pipeline: Build Step

15.Pipeline: Input Step

16.Pipeline: Nodes and Processes

17.Pipeline: Stage Step

18.Scriptler

19.Workspace Cleanup Plugin

20.Post-Build Script Plug-in

21.Email Extension Plugin

22.SSH Slaves plugin

23.Timestamper

使用git安裝如下

9.Git plugin

10.GIT server Plugin

11.Gradle Plugin

12.Git Parameter Plug-In

如果你使用的SVN 還需要安裝

Subversion Plug-in

Subversion Release Manager plugin

step.6 設(shè)置全局屬性


系統(tǒng)管理--》進(jìn)入設(shè)置全局屬性


點擊environment variables 選項 配置 SDK

ANDROID_HOME

xx\sdk ? ? -----SDK 具體路徑 (studio 引用的sdk絕對路徑)

step.7 設(shè)置重點屬性(理解就是在本地的名稱 和其絕對路徑)

系統(tǒng)管理--》進(jìn)入Global Tool Configuration

JDK ?、gradle摊求、git 環(huán)境變量配置

JDK 模塊:

name:jdk_1.8

home :復(fù)制jdk 在本地文件夾的絕對路徑 xxx/jdk_1.8

gradle模塊:

注:引用 android studio 安裝板或解壓版 對應(yīng)目錄下的 gradle 即可

name:gradle-2.14.1

home:復(fù)制jdk 在本地文件夾的絕對路徑 xxx/gradle/gradle-2.14.1

git模塊也一樣 ?使用svn 此模塊就默認(rèn)就好禽拔。

step.8 新建任務(wù)

點擊新建任務(wù)

輸入名稱

Jenkins-》新建-》構(gòu)建一個自由風(fēng)格的軟件項目-》

點擊ok即可

step.9 配置項目

1. 自定義動態(tài)參數(shù)配置



這邊對應(yīng)設(shè)置gradle.properties文件 ,給build.gradle動態(tài)賦值 管理

找到參數(shù)化構(gòu)建過程選項→打勾

選項參數(shù)使用 Choice ?理解為下拉框多選

字符輸入?yún)?shù)使用 String Parameter 理解為一個字符串參數(shù)

時間參數(shù)使用 Dynamic Parameter 理解為一個計算的js腳本

在添加參數(shù)時室叉,配置Name的值必須與.properties文件中定義的參數(shù)名稱相同睹栖。

2. SVN 同步源碼配置



源碼管理:選擇具體的版本控制軟件,并填寫項目URL茧痕,如本人為svn野来,只需在Repository URL填具體項目svn地址,其它為默認(rèn)踪旷。

會自動將svn代碼下到j(luò)enkins 的workspace 目錄下

C:\Users\...\.jenkins\workspace

3. 設(shè)置項目名



進(jìn)入項目配置找到→構(gòu)建環(huán)境→勾選Set build Name 設(shè)置參數(shù)

注意和上面配置參數(shù)名一致如我們使用了BUILD_NUMBER 自帶參數(shù)曼氛,以及 APPNAME、APP_VERSION令野、BUILD_TYPE

${BUILD_NUMBER}${APP_VERSION}

4. gradle 配置

注意和上面配置參數(shù)一致

這邊對應(yīng)設(shè)置gradle.properties文件 舀患,給build.gradle動態(tài)賦值 管理

找到上面我們使用Gradle 插件的 Invoke Gradle script

修改tasks命令,應(yīng)用上面的參數(shù)气破,并勾選Pass job parameters as Gradle properties選項聊浅。

選擇 gradle 上面配置的名稱

task:clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE}

pass job parameters as gradle propertiers ?checbox 打鉤

PRODUCT_FLAVORS和BUILD_TYPE即我們上面配置的參數(shù),務(wù)必保持一致。

點擊保存低匙,回到項目首頁旷痕。

就可以看到,原先的立即構(gòu)建已經(jīng)變成了Build with Parameter

點擊參數(shù)構(gòu)建顽冶,就可以看到如下上面我們配置的參數(shù)欺抗。

等待構(gòu)建完成,前往在.Gradle文件中配置的路徑中即可找到我們配置的命名apk强重。

step.10 構(gòu)建項目

立即構(gòu)建----》Build with Parameter

step.11 控制臺查看log

Console Output

step.12 APK編譯到指定路徑

step.13 source 對應(yīng)

gradle..properties文件

APP_VERSION=2.4.0

APP_VERSION_CODE=2

IS_JENKINS=false

BUILD_TYPE=debug

PRODUCT_FLAVORS=internal

BUILD_PATH_JENKINS=E\:\\AA

BUILD_PATH_LOCAL=D:\\BB\\CC

BUILD_TIME=1970-1-1

APPNAME=JKApp

build.gradle 文件

productFlavors {

// Because Android Meta-data does not support getLong method, NOTIFICATION_PROJECT_NUMBER

// is prefixed with 'L'('L' will be trimed when be used.

internal {

manifestPlaceholders = [BASE_URL: "http://",

HOST: "133.",

PORT: "",

HTTP: "http://",

API_VERSION: "api2",

CONTENT_REFERER_HTML: "http:"]

if("true".equals(IS_JENKINS)){

versionName = "J" + BUILD_TIME+"_internal_api2"

}else{

versionName = "F" + getDate()+"_internal_api2"

}

}

open {

manifestPlaceholders = [BASE_URL: "https:/",

HOST: "pf",

PORT: "",

HTTP: "https://",

API_VERSION: "api",

CONTENT_REFERER_HTML: "https:"]

if("true".equals(IS_JENKINS)){

versionName = "J" + BUILD_TIME+"_public"

}else{

versionName = "F" + getDate()+"_public"

}

}

myTest {

manifestPlaceholders = [BASE_URL: "http:",

HOST: "192.7",

PORT: "8383",

HTTP: "http://",

API_VERSION: "api2",

CONTENT_REFERER_HTML: "http:/"]

if("true".equals(IS_JENKINS)){

versionName = "J" + BUILD_TIME+"_test"

}else{

versionName = "F" + getDate()+"_test"

}

}

}

applicationVariants.all { variant ->

variant.outputs.each { output ->

output.outputFile = new File(

output.outputFile.parent,

//? ? ? ? ? ? ? ? ? ? buildOutputDir,

"${variant.versionName}.apk")

}

}

AndroidManifest.xml ?文件

android:value="${BASE_URL}"/>

android:value="${HOST}"/>

android:value="${PORT}"/>

android:value="${HTTP}"/>

android:value="${API_VERSION}"/>

Application 文件

@Override

public void onCreate() {

super.onCreate();

instance = this;

readMetaDataFromApplication();

}

private voidreadMetaDataFromApplication() {

try{

ApplicationInfo appInfo =this.getPackageManager()

.getApplicationInfo(getPackageName(),

PackageManager.GET_META_DATA);

String BASE_URL = appInfo.metaData.getString("BASE_URL");

String HOST = appInfo.metaData.getString("HOST");

String PORT = appInfo.metaData.getString("PORT");

String HTTP = appInfo.metaData.getString("HTTP");

String API_VERSION = appInfo.metaData.getString("API_VERSION");

String CONTENT_REFERER_HTML = appInfo.metaData.getString("CONTENT_REFERER_HTML");

Constants.BASE_URL= BASE_URL;

Constants.HOST= HOST;

Constants.PORT= PORT;

Constants.HTTP= HTTP;

Constants.API_VERSION= API_VERSION;

Constants.CONTENT_REFERER_HTML= CONTENT_REFERER_HTML;

}catch(PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

}


本文源碼鏈接下載:

http://download.csdn.net/detail/jxmy_1989/9756479

GIT 及證書簽名請 參考以下鏈接:

http://www.reibang.com/p/915c1ae69144

http://www.open-open.com/lib/view/open1482371829772.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末佩迟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子竿屹,更是在濱河造成了極大的恐慌,老刑警劉巖灸姊,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拱燃,死亡現(xiàn)場離奇詭異,居然都是意外死亡力惯,警方通過查閱死者的電腦和手機(jī)碗誉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來父晶,“玉大人哮缺,你說我怎么就攤上這事〖缀龋” “怎么了尝苇?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長埠胖。 經(jīng)常有香客問我糠溜,道長,這世上最難降的妖魔是什么直撤? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任非竿,我火速辦了婚禮,結(jié)果婚禮上谋竖,老公的妹妹穿的比我還像新娘红柱。我一直安慰自己,他們只是感情好蓖乘,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布锤悄。 她就那樣靜靜地躺著,像睡著了一般嘉抒。 火紅的嫁衣襯著肌膚如雪铁蹈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機(jī)與錄音握牧,去河邊找鬼容诬。 笑死,一個胖子當(dāng)著我的面吹牛沿腰,可吹牛的內(nèi)容都是我干的览徒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颂龙,長吁一口氣:“原來是場噩夢啊……” “哼习蓬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起措嵌,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤躲叼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后企巢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枫慷,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年浪规,在試婚紗的時候發(fā)現(xiàn)自己被綠了或听。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡笋婿,死狀恐怖誉裆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缸濒,我是刑警寧澤足丢,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站庇配,受9級特大地震影響霎桅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讨永,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一滔驶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卿闹,春花似錦揭糕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旋恼,卻和暖如春吏口,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工产徊, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留昂勒,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓舟铜,卻偏偏與公主長得像戈盈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谆刨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 如果你并不急于放到服務(wù)器上塘娶,只是想玩玩這個東西。你可以先下載好這兩個下文用到的包痊夭。下載Tomcat9.0.zip下...
    橘子周二閱讀 30,358評論 58 70
  • 作為一名Android程序猿刁岸,能偷懶時是一定要偷懶的。大家在開發(fā)中一定遇到過:測試說:幫我打個包吧她我,產(chǎn)品說:幫我打...
    小朱v閱讀 6,951評論 3 14
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理虹曙,服務(wù)發(fā)現(xiàn),斷路器鸦难,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 之前App在提交測試和最終部署的過程中App打包一直是由開發(fā)人員來完成的,由于項目比較大员淫, 再加上Android打...
    南若水閱讀 6,143評論 1 16
  • 軟件的持續(xù)集成工具之一合蔽,易上手,功能強(qiáng)大介返,話不多說拴事,干貨奉上。我的博客地址:http://blog.lzoro.c...
    格子Lin閱讀 12,226評論 10 41