Jenkins+gradle+git實(shí)現(xiàn)Android的自動化構(gòu)建

前言

最近公司需求缰贝,需要部署jenkins方便運(yùn)營自己打包不同渠道的apk去發(fā)布肥印,我自己是在網(wǎng)上找了很多博客瘩绒,最終發(fā)現(xiàn)他們的博客有些寫的不是很全或者說現(xiàn)在插件都更新了列牺,不適用以前的老辦法了困肩,所以我在這里重新寫一篇博客方便Android開發(fā)者部署jenkins以方便運(yùn)營可以不依靠技術(shù)自主的去編譯apk去發(fā)布划纽,當(dāng)然,學(xué)會jenkins也會給你的簡歷上加分哦

1僻弹、Tomacat

Tomcat下載去下載Tomcat阿浓,下載解壓后進(jìn)入bin目錄啟動startup.bat文件就可以啟動tomcat了

2、Jenkins

Jenkins下載去下載Jenkins蹋绽,有兩種選擇芭毙,一種是 Long-term Support (LTS) 還有一種是Weekly,前者是穩(wěn)定版本卸耘,后者則是更新比較頻繁的版本退敦,這里我們選擇LTS就好,下載后的安裝包解壓安裝蚣抗,安裝完成之后找到tomcat目錄下的webapps下創(chuàng)建一個文件夾命名為jenkins侈百,然后去jenkins安裝目錄下的war文件夾里的內(nèi)容全部copy至剛剛創(chuàng)建的jenkins文件內(nèi),這個時候打開在瀏覽器打開http://localhost:8080/就可以進(jìn)入到j(luò)enkins頁面了翰铡,會讓你輸入密碼钝域,你根據(jù)他生成的文件路徑去打開這個密碼文件把密碼輸入進(jìn)去就會進(jìn)入到這個界面


可能是英文的也可能是中文的,不管是什么語言锭魔,點(diǎn)擊左邊例证,安裝一些jenkins推薦的插件,這些插件安裝失敗可以重試迷捧,如果重試了一兩次之后還是失敗就不用管了直接進(jìn)入下一步創(chuàng)建用戶织咧,也可以使用admin,不過還是推薦自己創(chuàng)建用戶漠秋,后期權(quán)限管理方便一些

3笙蒙、安裝插件

如果某些插件找不到或者下載不了可以在這里下載,如果沒有積分可以私信我郵箱庆锦,我會發(fā)給你捅位,csdn強(qiáng)制要求最低2積分,無法設(shè)置為免費(fèi),我也沒辦法绿渣,本地下載的插件可以通過系統(tǒng)管理>管理插件>高級>上傳插件來離線安裝插件

4朝群、配置環(huán)境

需要額外配置gradle環(huán)境當(dāng)然java環(huán)境和android sdk的環(huán)境也要配置,然后進(jìn)入jenkins主界面

進(jìn)入系統(tǒng)管理>全局工具配置>找到j(luò)dk中符、gradle姜胖、和git
  • 別名可以隨意,地址就是你的jdk絕對路徑


  • git的name可以隨你的心意去命名路徑就寫你git.exe的絕對路徑


  • gradle的name也是隨意的淀散,推薦配置多個版本的gradle右莱,gradle默認(rèn)路徑就在C:\Users(用戶名).gradle\wrapper\dists\下


    cccc.png
然后回到主頁面>系統(tǒng)管理>系統(tǒng)設(shè)置

找到全局屬性設(shè)置勾選環(huán)境變量設(shè)置android sdk


開始創(chuàng)建項(xiàng)目

  • 主頁面新建任務(wù),輸入項(xiàng)目名稱档插,然后選擇構(gòu)建一個自由風(fēng)格的軟件項(xiàng)目后點(diǎn)確定


  • 然后點(diǎn)擊源碼管理選擇git慢蜓,svn也大同小異,先點(diǎn)擊add添加賬號密碼郭膛,然后再輸入你的項(xiàng)目地址

在kind項(xiàng)下你也可以選擇SSH Username with private key晨抡,選擇enter directly填入你的私鑰
#cat ~/.ssh/id_rsa.pub 是公鑰,#cat ~/.ssh/id_rsa是私鑰

填好之后就是這樣则剃,下面的Branches to build 填你分支的名字

然后就點(diǎn)擊保存耘柱,回到項(xiàng)目主頁點(diǎn)擊Build with Parameters或是立即構(gòu)建按鈕開始構(gòu)建,構(gòu)建成功后在



可以看到棍现,你們的可能是#1调煎,然后回到j(luò)enkins的根目錄找到workspace目錄然后找到你的項(xiàng)目名字的文件夾不帶@tmp的文件夾,進(jìn)去看看你們的代碼有沒有被拉下來己肮,如果沒有或者配置失敗則檢查你的源碼配置或路徑

自定義參數(shù)

111.png
33333.png
4444444.png
6666666.png
77777777.png
555555555.png
2222222222.png

然后是構(gòu)建>增加構(gòu)建步驟>invoke gradle script

先解釋一下被紅色條遮住的內(nèi)容士袄,這個內(nèi)容就是你新建項(xiàng)目的任務(wù)名稱其他的都一樣就行
${JENKINS_HOME}/workspace/替換為為你的任務(wù)名稱
${JENKINS_HOME}/workspace/替換為你的任務(wù)名稱/app/build.gradle
你也可以使用${JOB_NAME}自動去獲取任務(wù)名稱
${JENKINS_HOME}/workspace/${JOB_NAME}
${JENKINS_HOME}/workspace/${JOB_NAME}/app/build.gradle

下面解釋紅色箭頭和Tasks里的的內(nèi)容,然后打開你的AndroidStudio谎僻,打開你的項(xiàng)目娄柳,找到屬于Project properties的gradle.properties文件,打開它艘绍,然后增加如下參數(shù)

APP_VERSION = 1.0 //對應(yīng)你jenkins的選項(xiàng)參數(shù)APP_VERSION
IS_JENKINS = false //對應(yīng)你jenkins的選項(xiàng)參數(shù)IS_JENKINS
BUILD_TYPE = debug //與上方一一對應(yīng)
PRODUCT_FLAVORS = 你的渠道
CHANNEL=你的渠道
BUILD_PATH_JENKINS = F:\jenkins\workspace\你的項(xiàng)目名\jenkinsapk //你jenkins編譯后的路徑
BUILD_PATH_LOCAL = F:\jenkins\workspace\你的項(xiàng)目名\jenkinsapk\testjenkins //非jenkins編譯后的apk
BUILD_TIME= 2018-4-24 //對應(yīng)上方的BUILD_TIME選項(xiàng)參數(shù)
APPNAME = hbw //對應(yīng)上方的文本輸入?yún)?shù)
android.buildCacheDir=F:/AndroidStudio/build-cache-cache //可以不添加西土,如果編譯報錯需要添加這行,具體作用可以自己去stackoverflow上找

現(xiàn)在可以開始解釋紅色箭頭的作用了鞍盗,它的作用就是把你jenkins填寫的內(nèi)容覆蓋到你的gradle.properties內(nèi),上面的NAME必須與gradle.properties內(nèi)的命名對應(yīng)跳昼,你們可以隨意發(fā)揮想象般甲,比如,因?yàn)槲夜镜奶厥庑远旒眨覀兊那啦皇侵傅母鞔骯pp store而是指的和我們公司合作的各大公司敷存,所以我定義了一個Name為CHANNEL的文本參數(shù),這樣,運(yùn)營就可以在jenkins上隨意輸入內(nèi)容锚烦,這樣他生成的APK的CHANNEL則會把我gradle.properties里的CHANNEL的內(nèi)容覆蓋掉觅闽,這樣我在我app的build.gradle里就可以這樣聲明


這樣我就可以在代碼內(nèi)部在BuildConfig類中取出這個自定義的渠道名稱,上面其他的APP_VERSION涮俄,APP_NAME之類的你們也可以隨意發(fā)揮想象蛉拙,gradle本身就是一個框架,你們可以盡情發(fā)揮想象力去完成你們各自公司的不同的功能彻亲,不僅僅只是渠道孕锄,但是你們現(xiàn)在可能發(fā)現(xiàn)了,那上面的PRODUCT_VLAVORS和BUILD_TYPE參數(shù)和Invoke Gradle script下的Tasks里的clean assemble${PRODUCT_VLAVORS}${BUILD_TYPE}是什么意思啊苞尝,說這個意思之前得先普及一點(diǎn) Gradle命令的知識
assemble命令用于打包畸肆,比如assembleDebug就可以編譯打一個debug包,assembleRelease就可以編譯出一個release包宙址,除此之外轴脐,assemble還可以搭配productFlavors使用,比如你在gradle里設(shè)置設(shè)置了一個騰訊應(yīng)用寶

那么就可以通過assemble+你的渠道名字抡砂,如我們上面寫的應(yīng)用寶assembleyingyongbao或者assemble+你的渠道名+Release或Debug大咱,也就是assembleyingyongbaoReleaseassembleyingyongbaoDebug,當(dāng)然assemble的作用遠(yuǎn)不于此舀患,更多的你們自己去發(fā)現(xiàn)

講完了這些知識有些人可能已經(jīng)懂了assemble${PRODUCT_VLAVORS}${BUILD_TYPE}是什么意思了徽级,沒錯,就是${PRODUCT_VLAVORS}會獲得上面所選擇的你設(shè)置的渠道${BUILD_TYPE}則會獲得你上面選擇的Release或Debug聊浅,這樣就拼接成了assemble+渠道名+Release或Debug餐抢,這一點(diǎn)很多博客都沒有講清楚,還有一點(diǎn)需要注意低匙,你PRODUCT_VLAVORS參數(shù)下的選項(xiàng)必須是你在app下的build.gradle腳本的productFlavors方法里聲明的渠道旷痕,比如我只聲明了yingyongbao,那么我的選項(xiàng)只能是有yingyongbao顽冶,因?yàn)閍ssemble+你的渠道這條命令會去找這個task欺抗,如果沒有,則會報錯强重,到這里相信沒接觸過Jenkins的人都應(yīng)該對jenkins有一個大概的了解了绞呈,基本上這樣就會編譯出apk,如果你想控制編譯后的apk名字,則可以在app的build.gradle腳本內(nèi)這樣寫

因?yàn)槲蚁M沙鰜淼腶pk名字為jenkins內(nèi)輸入的APP_NAME+_+jenkins內(nèi)輸入的CHANNEL间景,但是我還有個功能是生成apk后上傳到后臺的ftp服務(wù)器上佃声,而服務(wù)器上是不能存在中文的,會不兼容倘要,所以我首先判斷了一下是否為中文圾亏,如果是中文則把中文轉(zhuǎn)換成拼音,這個isChinese()和getChinesetoPinyin()方法是在android接口之上聲明的


大家看到了吧,所以志鹃,gradle可以讓你的構(gòu)建過程通過代碼來控制夭问,所以推薦大家去學(xué)習(xí)一下gradle和groovy,為什么我要把大家都說的什么什么節(jié)點(diǎn)之下稱之為方法呢曹铃,原因就是你們可以ctrl+左鍵點(diǎn)擊android節(jié)點(diǎn),productFlavors節(jié)點(diǎn)缰趋,compileSdkVersion、buildToolsVersion铛只、defaultConfig埠胖、applicationId等等等等,實(shí)際上都是調(diào)用的gradle提供的api淳玩,如果你gradle聲明的參數(shù)有疑問直撤,那么點(diǎn)進(jìn)去,看看他的需要的參數(shù)要求蜕着,你就解決問題起來就會方便很多谋竖,基本上就是這些,剩下的就留給各位開發(fā)者自己想象承匣。

構(gòu)建出apk后上傳到后臺的ftp或者sftp服務(wù)器

如果后臺是ftp服務(wù)器蓖乘,則導(dǎo)入| publish-over-ftp/ |插件,具體的用法可以百度這個插件如何使用韧骗,因?yàn)槲夜臼莝ftp服務(wù)器嘉抒,所以這里我拿publish-over-ssh/插件來演示

  • 回到j(luò)enkins主頁面,系統(tǒng)管理>系統(tǒng)設(shè)置>Publish over SSH
  • Name可以隨意填寫
  • Hostname填寫需要連接ssh的主機(jī)名或ip地址袍暴,此處填寫應(yīng)用服務(wù)器IP(建議ip)
  • Username填寫進(jìn)入這個服務(wù)器的用戶名
  • Remote Directory:遠(yuǎn)程目錄(根據(jù)需要填寫文件傳到此目錄下)
  • 然后點(diǎn)擊高級勾選Use password authentication,or use a different key
  • Passphrase / Password填寫訪問服務(wù)器的密碼
  • port填寫22些侍,一般ftp端口是21,sftp服務(wù)器端口是22
  • Timeout (ms)填寫超時
  • 然后保存>回到主頁面>進(jìn)入你的項(xiàng)目>配置>點(diǎn)擊構(gòu)建后操作


name選擇你剛才在系統(tǒng)設(shè)置里填的name政模,source files則填寫你apk生成的相對路徑岗宣,相對于jenkins的workspace里你的項(xiàng)目下,這樣我們后臺的sftp服務(wù)器的路徑(在系統(tǒng)設(shè)置里的Remote Directory)下會多出一個jenkinsapk文件夾淋样,這個文件夾下會出現(xiàn)你生成的apk

  • Remove prefix和Remote directory的作用分別是刪除本地的的和服務(wù)器的目錄耗式,可以不填寫,Exec command可以不填寫趁猴,這個警告不會影響編譯刊咳,然后我們就回到項(xiàng)目主頁點(diǎn)擊Build with Parameters或是立即構(gòu)建按鈕開始構(gòu)建


看到結(jié)尾的SUCCESS就代表我們就編譯并且上傳成功了

后言

jenkins的配置差不多就是這樣了,還有很多各種各樣的插件儡司,比如釘釘?shù)穆郑热缒憧梢圆皇褂胹sh插件,蒲公英和fir.im這兩個應(yīng)用內(nèi)測托管平臺也有相應(yīng)的插件可以構(gòu)建后直接上傳到他們的服務(wù)器枫慷,比如生成二維碼發(fā)郵箱,比如定時去構(gòu)建等等許多功能,都有不同的插件可以做到或听,只需要發(fā)揮你的想象力就可以搭建一個完全不需要技術(shù)人員維護(hù)的一個構(gòu)建平臺讓運(yùn)營等不懂技術(shù)的人單獨(dú)做到生成apk >發(fā)布探孝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市誉裆,隨后出現(xiàn)的幾起案子顿颅,更是在濱河造成了極大的恐慌,老刑警劉巖足丢,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粱腻,死亡現(xiàn)場離奇詭異,居然都是意外死亡斩跌,警方通過查閱死者的電腦和手機(jī)绍些,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耀鸦,“玉大人柬批,你說我怎么就攤上這事⌒涠” “怎么了氮帐?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長洛姑。 經(jīng)常有香客問我上沐,道長,這世上最難降的妖魔是什么楞艾? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任参咙,我火速辦了婚禮,結(jié)果婚禮上产徊,老公的妹妹穿的比我還像新娘昂勒。我一直安慰自己,他們只是感情好舟铜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布戈盈。 她就那樣靜靜地躺著,像睡著了一般谆刨。 火紅的嫁衣襯著肌膚如雪塘娶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天痊夭,我揣著相機(jī)與錄音刁岸,去河邊找鬼。 笑死她我,一個胖子當(dāng)著我的面吹牛虹曙,可吹牛的內(nèi)容都是我干的迫横。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼酝碳,長吁一口氣:“原來是場噩夢啊……” “哼矾踱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起疏哗,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤呛讲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后返奉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贝搁,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年芽偏,在試婚紗的時候發(fā)現(xiàn)自己被綠了雷逆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡哮针,死狀恐怖关面,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情十厢,我是刑警寧澤等太,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站蛮放,受9級特大地震影響缩抡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜包颁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一瞻想、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧娩嚼,春花似錦蘑险、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至贵少,卻和暖如春呵俏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滔灶。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工普碎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人录平。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓麻车,卻偏偏與公主長得像缀皱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子动猬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345