對于程序員來說虹蒋,遇到項(xiàng)目需要頻繁地集成各成員的工作是相當(dāng)頭痛的柠硕。因?yàn)槊看渭啥夹枰M(jìn)行一系列的質(zhì)量把控(編譯,打包总棵,測試等)鳍寂,以保證各環(huán)節(jié)盡可能地少出錯誤。如此反復(fù)不僅消耗大量的時間和精力情龄,也消磨著自己的耐心迄汛。那么捍壤,如何做到持續(xù)集成,把一些繁瑣且無意義的工作交付給電腦自動完成鞍爱,這是一個相當(dāng)有必要去考慮的事情鹃觉。比較,能提升幸福感的事情硬霍,何樂而不為呢帜慢。
不重復(fù)造輪子
充分借助已有資源,考慮自身實(shí)際場景唯卖,簡單而有效的解決問題才是目標(biāo)粱玲。很多人都推薦使用 Jenkins 來搭建持續(xù)化集成平臺,這是一個行之有效的解決方案拜轨,下面就來看看如何減少集成問題并且快速實(shí)現(xiàn)抽减。
一個理念:能讓電腦幫忙自動搞定的東西就盡量不要折騰自己
準(zhǔn)備工作
本篇文章主要介紹 Android 項(xiàng)目的持續(xù)化集成平臺基于 Jenkins 的實(shí)現(xiàn),關(guān)于 iOS 的持續(xù)集成橄碾,推薦同事之前寫的一篇一步一步構(gòu)建iOS持續(xù)集成:Jenkins+GitLab+蒲公英+FTP這篇文章卵沉,內(nèi)容非常詳細(xì)。
主要介紹一下搭建Android平臺環(huán)境時渠道的各種坑
Gradle Path: /Users/baishixian/.gradle/wrapper/dists/gradle-4.0-milestone-1-all/2rnr7rhi2zsmkxo9re7615fy6/gradle-4.0-milestone-1
使用git作為源碼倉庫這里有坑法牲,使用https的方式行不通史汗,必須用ssh的方式才行,不然一直pull代碼到本地不成功拒垃。
Jenkins SSH connection to a Git server is not working using username/password
創(chuàng)建ssh 非對稱加密 key停撞,我這用的是阿里云code,參考https://code.aliyun.com/help/ssh/README
然后在Jenkins中配置ssh的私鑰
對于 Jenkins giving The SDK Directory doesn't exist 或者Jenkins build failed due to missing android SDK的問題悼瓮,在編譯時會造成如下問題:
需要配置ANDROID_HOME
代碼倉庫配置好了戈毒,意味著Jenkins具有了訪問GitHub代碼倉庫的權(quán)限,可以成功地拉取代碼横堡。
那Jenkins什么時候執(zhí)行構(gòu)建呢埋市?
這就需要配置構(gòu)建觸發(fā)策略,即構(gòu)建觸發(fā)器命贴,配置項(xiàng)位于【Build Triggers】欄目道宅。
觸發(fā)器支持多種類型,常用的有:
- 定期進(jìn)行構(gòu)建(Build periodically)
- 根據(jù)提交進(jìn)行構(gòu)建(Build when a change is pushed to GitHub)
- 定期檢測代碼更新胸蛛,如有更新則進(jìn)行構(gòu)建(Poll SCM)
構(gòu)建觸發(fā)器的選擇為復(fù)合選項(xiàng)污茵,若選擇多種類型,則任一類型滿足構(gòu)建條件時就會執(zhí)行構(gòu)建工作胚泌。如果所有類型都不選擇省咨,則該Jenkins Job不執(zhí)行自動構(gòu)建,但可通過手動點(diǎn)擊【Build Now】觸發(fā)構(gòu)建玷室。
關(guān)于定時器(Schedule)的格式零蓉,簡述如下:
- MINUTE HOUR DOM MONTH DOW
- MINUTE: Minutes within the hour (0-59)
- HOUR: The hour of the day (0-23)
- DOM: The day of the month (1-31)
- MONTH: The month (1-12)
- DOW: The day of the week (0-7) where 0 and 7 are Sunday.
通常情況下需要指定多個值笤受,這時可以采用如下operator(優(yōu)先級從上到下):
** 適配所有有效的值,若不指定某一項(xiàng)敌蜂,則以占位箩兽;*
** M-N適配值域范圍,例如7-9代表7/8/9均滿足章喉;**
** M-N/X或/X:以X作為間隔汗贫;*
A,B,C:枚舉多個值。
另外秸脱,為了避免多個任務(wù)在同一時刻同時觸發(fā)構(gòu)建落包,在指定時間段時可以配合使用H字符。添加H字符后摊唇,Jenkins會在指定時間段內(nèi)隨機(jī)選擇一個時間點(diǎn)作為起始時刻咐蝇,然后加上設(shè)定的時間間隔,計(jì)算得到后續(xù)的時間點(diǎn)巷查。直到下一個周期時有序,Jenkins又會重新隨機(jī)選擇一個時間點(diǎn)作為起始時刻,依次類推岛请。
為了便于理解旭寿,列舉幾個示例:
H/15 * * * *:代表每隔15分鐘,并且開始時間不確定崇败,這個小時可能是:07,:22,:37,:52盅称,下一個小時就可能是:03,:18,:33,:48;
H(0-29)/10 * * * *:代表前半小時內(nèi)每隔10分鐘僚匆,并且開始時間不確定微渠,這個小時可能是:04,:14,:24搭幻,下一個小時就可能是:09,:19,:29咧擂;
H 23 * * 1-5:工作日每晚23:00至23:59之間的某一時刻;