Jenkins Android Gradle build

Jenkins Android Gradle build

用了兩個(gè)周的時(shí)間斷斷續(xù)續(xù)的終于把a(bǔ)ndroid的自動(dòng)打包搞定了友存,爬了各種的坑各種百度,雖然百度上關(guān)于Jenkin android的文章不少棍郎,但是自己配置的時(shí)候還是會(huì)遇到各種問(wèn)題钦讳,現(xiàn)在把整體流程梳理一下防止下次入坑...(圣斗士不會(huì)被同樣的招式擊倒
文章最后我會(huì)把我遇到的錯(cuò)誤羅列出來(lái)阅签,已經(jīng)在jenkins坑里面的同學(xué)可以直接到文章最后

Jenkins 環(huán)境

1.服務(wù)器環(huán)境 阿里云CentOS 64 1核2G 最低配

剛開始是1核1G結(jié)果到了最后gradle build 的時(shí)候提示內(nèi)存不足掐暮,建議服務(wù)器至少2G內(nèi)存以上

2.JDK java 8

下載java 8 放到/root/aliyun 目錄下并解壓 ,我的阿里云是自帶java7的,不過(guò)項(xiàng)目里面用到了lambda所以需要用java 8

配置環(huán)境變量 # vi /etc/profile
export JAVA_HOME=/root/aliyun/jdk1.8.0_77
export PATH=$JAVA_HOME/bin:$PATH
保存并推出 :wq

使環(huán)境變量起效 # source /ect/profile
檢查是否成功 # echo $JAVA_HOME or # java -version
如果不成功需要檢查export 和 路徑是否寫錯(cuò)

3.tomcat

這里沒遇到什么問(wèn)題政钟,安裝和配置方式百度就好
啟動(dòng)方式 #cd /usr/loacl/tomcat/bin #./shtartup.sh
訪問(wèn)以下看有沒有安裝成功 xxx:8080 (xxx你的服務(wù)器ip或者域名)路克,顯示一個(gè)tomcat網(wǎng)頁(yè)就算成功了

4.Gradel

安裝gradle并配置環(huán)境變量,我的版本是2.12 下載最新的就可以
export GRADLE_HOME=/usr/local/gradle-2.12
export PATH=$GRADLE_HOME/bin:$PATH

5.android sdk

這里還是有不少坑的
首先我是從androiddevtools.cn下載的 sdk tools ,但是版本是android-sdk_r24.3.4-linux.tgz
解壓并設(shè)置好環(huán)境變量
應(yīng)該是最新的版本养交,被我放到服務(wù)器并解壓以后里面是沒有sdk的精算,需要自己下載,這時(shí)可以根據(jù)自己的硬盤空間決定下載什么版本碎连,最簡(jiǎn)單的命令式下載所有版本# android update sdk --no-ui
這里要注意在輸入命令一段時(shí)間以后會(huì)提示y or n 灰羽,輸入y后會(huì)自動(dòng)下載所有版本,可以在晚上的時(shí)候下載鱼辙,早上起來(lái)差不多就下載好了廉嚼。

下載完成以后我們?cè)傧螺dbuild-tools 根據(jù)你的gradle里面buildToolsVersion 下載相應(yīng)的版本
顯示所有可更新列表 #android list sdk --all
選擇需要更新的內(nèi)容 #android update sdk -u -a -t 1,2,3,...,n

6.maven

下載maven安裝并設(shè)置好環(huán)境變量
可以輸入 #man -v 查看是否設(shè)置成功

7.jenkins

下載jenkins并放到tomcat/webapps 下,在瀏覽器中xxx:8080/jenkins
打開jenkins后設(shè)置權(quán)限倒戏,然后安裝插件

android lint plugin
github plugin
gradle plugin

插件安裝好后就是比較重要的系統(tǒng)配置設(shè)置了

如果插件下載失敗怠噪,請(qǐng)先檢查.jenkins 目錄下權(quán)限是否可寫
1.Environment variables

key:ANDROID_HOME
value:/root/aliyun/android-sdk-linux (你的ANDROID_HOME目錄)

2.JDK

name:JDK8
JAVA_HOME:/root/aliyun/jdk1.8.0_77/

3.Gradle

name:gradle-2.12
GRADLE_HOME:/usr/loacl/gradle-2.12

4.maven

name:maven
MAVEN_HOME:/usr/local/maven

5.Jenkins Localtion

System adminstrator Email(系統(tǒng)管理員郵件地址): your email (如果不填后面郵件發(fā)送會(huì)失敗)

6.E-mail notification (郵件通知)
這里我用的是qq郵箱,其他郵箱填法相似

SMTP服務(wù)器:smtp.qq.com
用戶默認(rèn)郵件后綴:@qq.com
√ 使用SMTP認(rèn)證
用戶名:8888@qq.com
密碼:******
使用SLL協(xié)議 √
SMTP端口:456

選擇通過(guò)發(fā)送測(cè)試郵件測(cè)試配置
Test e-mail recipient
              目標(biāo)郵箱
點(diǎn)擊 Test configuration

如果發(fā)送失敗請(qǐng)檢查你的郵箱是否開啟SMTP
8.創(chuàng)建item

選擇新建->輸入名稱->構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目

√ github project
project url:your github project url
(這里也可以不選擇杜跷,只選擇后面的git也可以成功)

源碼管理
git
Repositories
      Repository URL:your git project url
(我的測(cè)試項(xiàng)目是github public 所以不需要輸入Credentials傍念,如果你的項(xiàng)目是private的這里就需要填寫一下Credentials)

構(gòu)建觸發(fā)器
√ Build when a change is pushed to githup
√ Poll SCM
日程表
        H/5 * * * * 
(這里的詳細(xì)設(shè)置可以自行百度)

點(diǎn)擊增加構(gòu)建步驟
Invoke Gradle script 
invoke gradle 
gradle version :default or gradle-2.12
Switches:clean build
Force GRADLE_USER_HOME to use workspace √

點(diǎn)擊增加構(gòu)建后操作步驟
E-mail Notification
Recipients:需要發(fā)送的郵件地址

最后點(diǎn)擊保存
修改項(xiàng)目的Gradle文件
如果你在項(xiàng)目中使用了lambda那么請(qǐng)保證版本是3.2.5+
classpath 'me.tatarka:gradle-retrolambda:3.2.5'

后面build過(guò)程中android lint會(huì)打印一些錯(cuò)誤信息,做如下設(shè)置
android{
  lintOptions {
        abortOnError false
    }
}
構(gòu)建項(xiàng)目

在項(xiàng)目中的左側(cè)點(diǎn)擊立即構(gòu)建矫夷,這時(shí)Build History中會(huì)顯示正在構(gòu)建的記錄,可以等待構(gòu)建完畢也可以點(diǎn)擊console output

成功or失敗

項(xiàng)目構(gòu)建成功會(huì)顯示藍(lán)色表示憋槐,失敗則是紅色

如果構(gòu)建成功那么 ./app/build/outpots/apk 目錄下會(huì)有你熟悉的*.apk 馬上下載并安裝吧双藕。

當(dāng)然第一次就構(gòu)建成功是不太可能的,不過(guò)不要急你離成功也就是兩三個(gè)坑的距離了

下面是我在構(gòu)建過(guò)程中出現(xiàn)的所有問(wèn)題阳仔,希望你在下面找到和你相同的錯(cuò)誤~~

ERROR

JDK沒有下載或者設(shè)置了自動(dòng)下載
Building in workspace /root/.jenkins/workspace/GearApplicationInstalling 
JDK jdk-8u77-oth-JPRDownloading 
JDK from http://download.oracle.com/otn-pub/java/jdk/8u77-b03/jdk-8u77-linux-x64.tar.gz
javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException:

手動(dòng)下載JDK并按照文中方式安裝設(shè)置
maven沒有安裝或者jenkins中沒有設(shè)置maven
FAILURE: Build failed with an exception.* What went wrong:A problem occurred configuring root project 'GearApplication'.
> Could not resolve all dependencies for configuration ':classpath'. 
> Could not download guava.jar (com.google.guava:guava:17.0) 
> Could not get resource 'https://jcenter.bintray.com/com/google/guava/guava/17.0/guava-17.0.jar'. 
> Could not GET 'https://jcenter.bintray.com/com/google/guava/guava/17.0/guava-17.0.jar'. 
> akamai.bintray.com: unknown error
Gradle沒有安裝好或者設(shè)置錯(cuò)誤
Unpacking http://services.gradle.org/distributions/gradle-1.5-bin.zip
to /root/.jenkins/tools/hudson.plugins.gradle.GradleInstallation/Gradle_1.5 on Jenkins
FATAL: Failed to install http://services.gradle.org/distributions/gradle-1.5-bin.zip
to /root/.jenkins/tools/hudson.plugins.gradle.GradleInstallation/Gradle_1.5
java.io.IOException: Failed to install http://services.gradle.org/distributions/gradle-1.5-bin.zip
to /root/.jenkins/tools/hudson.plugins.gradle.GradleInstallation/Gradle_1.5 
at hudson.FilePath.installIfNecessaryFrom(FilePath.java:832)
at hudson.tools.DownloadFromUrlInstaller.performInstallation(DownloadFromUrlInstaller.java:75)
at hudson.tools.InstallerTranslator.getToolHome(InstallerTranslator.java:68)

——————————————————————————————————————————————————————————————————

* Where:
Build file '/root/.jenkins/workspace/GearApplication/build.gradle' line: 5

* What went wrong:
A problem occurred evaluating root project 'GearApplication'.
> Could not find method jcenter() for arguments [] on repository container.

......


——————————————————————————————————————————————————————————————————

* Where:
Build file '/root/.jenkins/workspace/GearApplication/app/build.gradle' line: 1

* What went wrong:
A problem occurred evaluating project ':app'.
> Could not create plugin of type 'AppPlugin'.


——————————————————————————————————————————————————————————————————



如果沒有安裝gradle請(qǐng)按照文中方式安裝并設(shè)置
如果已經(jīng)安裝并且環(huán)境變量已設(shè)置好蔓彩,那么可能是你的jenkins中g(shù)radle設(shè)置了自動(dòng)安裝,請(qǐng)去掉自動(dòng)安裝選項(xiàng)并設(shè)置的好GRADLE_HOME路徑
服務(wù)器中沒有 buildtoolversion 相應(yīng)的版本
* What went wrong:
A problem occurred configuring project ':app'.
> failed to find Build Tools revision 23.0.2

使用android update 命令下載相應(yīng)的build tools 版本
64位的系統(tǒng)驳概,想運(yùn)行32位的程序(aapt),從而找不到一些共享庫(kù)
**:mergeReleaseResourcesAAPT

err(Facade for 233595607): /root/aliyun/android-sdk-linux/build-tools/23.0.2/aapt: error while loading shared libraries: libz.so.1: 
cannot open shared object file: No such file or directory
AAPT err(Facade for 510698132): /root/aliyun/android-sdk-linux/build-tools/23.0.2/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
AAPT err(Facade for 1296737688): /root/aliyun/android-sdk-linux/build-tools/23.0.2/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
AAPT err(Facade for 2072757904): /root/aliyun/android-sdk-linux/build-tools/23.0.2/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
AAPT err(Facade for 648132447): /root/aliyun/android-sdk-linux/build-tools/23.0.2/aapt: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory


http://blog.csdn.net/gaojinshan/article/details/38372339
# yum install glibc*.i686
# yum install zlib*.i686
# yum install libstdc++.so.6
類似于文章中旷赖,缺少了一些庫(kù)文件安裝即可顺又,如果還是不行報(bào)相同的錯(cuò)誤,那么還是缺少其他文件
項(xiàng)目中使用了lambda
:**app:compileRetrolambdaDebugBuild

step 'Invoke Gradle script' changed build result to FAILUREBuild step 'Invoke Gradle script' marked build as failure

build 到 compileRetrolambdaDebugBuild停止
修改項(xiàng)目的Gradle文件 
保證classpath 'me.tatarka:gradle-retrolambda:3.2.5' +
系統(tǒng)內(nèi)存不足
HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000fca8d000, 56045568, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 56045568 bytes for committing reserved memory.
# An error report file with more information is saved as:

增加系統(tǒng)內(nèi)存
app:lint
* What went wrong:
Execution failed for task ':app:lint'.
> Lint found errors in the project; aborting build.
  
  Fix the issues identified by lint, or add the following to your build script to proceed with errors:
  ...
  android {
      lintOptions {
          abortOnError false
      }
  }
  ...

按照提示操作即可
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末等孵,一起剝皮案震驚了整個(gè)濱河市稚照,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夜赵,老刑警劉巖献丑,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讹开,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡弱恒,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門棋恼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)返弹,“玉大人,你說(shuō)我怎么就攤上這事爪飘∫迤穑” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵师崎,是天一觀的道長(zhǎng)默终。 經(jīng)常有香客問(wèn)我,道長(zhǎng)犁罩,這世上最難降的妖魔是什么齐蔽? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮昼汗,結(jié)果婚禮上肴熏,老公的妹妹穿的比我還像新娘。我一直安慰自己顷窒,他們只是感情好蛙吏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布源哩。 她就那樣靜靜地躺著,像睡著了一般鸦做。 火紅的嫁衣襯著肌膚如雪励烦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天泼诱,我揣著相機(jī)與錄音坛掠,去河邊找鬼。 笑死治筒,一個(gè)胖子當(dāng)著我的面吹牛屉栓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耸袜,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼友多,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了堤框?” 一聲冷哼從身側(cè)響起域滥,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜈抓,沒想到半個(gè)月后启绰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沟使,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年委可,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片格带。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡撤缴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叽唱,到底是詐尸還是另有隱情屈呕,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布棺亭,位于F島的核電站虎眨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏镶摘。R本人自食惡果不足惜嗽桩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凄敢。 院中可真熱鬧碌冶,春花似錦、人聲如沸涝缝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至罐氨,卻和暖如春臀规,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背栅隐。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工塔嬉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人租悄。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓谨究,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親泣棋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子记盒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,138評(píng)論 25 707
  • 持續(xù)集成【Continuous integration (CI)】是一種開發(fā)實(shí)踐,它要求團(tuán)隊(duì)的開發(fā)人員定期集成他們...
    sollian閱讀 1,575評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理外傅,服務(wù)發(fā)現(xiàn),斷路器俩檬,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 沒有國(guó)萎胰,哪有家,薩德問(wèn)題愈演愈烈棚辽,樂(lè)天產(chǎn)品下架技竟,超市關(guān)門,韓國(guó)游疑似被禁屈藐,平時(shí)看似不團(tuán)結(jié)的中國(guó)人面對(duì)民族問(wèn)題榔组,國(guó)家...
    revora相望閱讀 90評(píng)論 0 0
  • 文/植物的記憶 前幾日和朋友聊天,發(fā)覺联逻,一個(gè)用心生活的人似乎都會(huì)對(duì)自己用舊...
    神經(jīng)質(zhì)的喵小姐閱讀 513評(píng)論 0 2