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
}
}
...
按照提示操作即可