前言
最近公司需求缰贝,需要部署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笙蒙、安裝插件
- Git plugin
- Gradle Plugin 這里下載1.26版本的
- description setter plugin
- build-name-setter
- user build vars plugin
- Post-Build Script Plug-in
- Branch API Plugin
- SSH plugin
- Scriptler
- Dynamic Parameter Plug-in
- Git Parameter Plug-In
如果某些插件找不到或者下載不了可以在這里下載,如果沒有積分可以私信我郵箱庆锦,我會發(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\下
然后回到主頁面>系統(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ù)
然后是構(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大咱,也就是assembleyingyongbaoRelease
或assembleyingyongbaoDebug
,當(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ā)布探孝。