Jenkins Android Gradle build
用了两个周的时间断断续续的终于把android的自动打包搞定了,爬了各种的坑各种百度,虽然百度上关于Jenkin android的文章不少,但是自己配置的时候还是会遇到各种问题,现在把整体流程梳理一下防止下次入坑...(圣斗士不会被同样的招式击倒)
文章最后我会把我遇到的错误罗列出来,已经在jenkins坑里面的同学可以直接到文章最后
Jenkins 环境
1.服务器环境 阿里云CentOS 64 1核2G 最低配
刚开始是1核1G结果到了最后gradle build 的时候提示内存不足,建议服务器至少2G内存以上
2.JDK java 8
下载java 8 放到/root/aliyun 目录下并解压 ,我的阿里云是自带java7的,不过项目里面用到了lambda所以需要用java 8
配置环境变量 # vi /etc/profile
export JAVA_HOME=/root/aliyun/jdk1.8.0_77
export PATH=$JAVA_HOME/bin:$PATH
保存并推出 :wq
使环境变量起效 # source /ect/profile
检查是否成功 # echo $JAVA_HOME or # java -version
如果不成功需要检查export 和 路径是否写错
3.tomcat
这里没遇到什么问题,安装和配置方式百度就好
启动方式 #cd /usr/loacl/tomcat/bin #./shtartup.sh
访问以下看有没有安装成功 xxx:8080 (xxx你的服务器ip或者域名),显示一个tomcat网页就算成功了
4.Gradel
安装gradle并配置环境变量,我的版本是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
解压并设置好环境变量
应该是最新的版本,被我放到服务器并解压以后里面是没有sdk的,需要自己下载,这时可以根据自己的硬盘空间决定下载什么版本,最简单的命令式下载所有版本# android update sdk --no-ui
这里要注意在输入命令一段时间以后会提示y or n ,输入y后会自动下载所有版本,可以在晚上的时候下载,早上起来差不多就下载好了。
下载完成以后我们再下载build-tools 根据你的gradle里面buildToolsVersion 下载相应的版本
显示所有可更新列表 #android list sdk --all
选择需要更新的内容 #android update sdk -u -a -t 1,2,3,...,n
6.maven
下载maven安装并设置好环境变量
可以输入 #man -v 查看是否设置成功
7.jenkins
下载jenkins并放到tomcat/webapps 下,在浏览器中xxx:8080/jenkins
打开jenkins后设置权限,然后安装插件
android lint plugin
github plugin
gradle plugin
插件安装好后就是比较重要的系统配置设置了
如果插件下载失败,请先检查.jenkins 目录下权限是否可写
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(系统管理员邮件地址): your email (如果不填后面邮件发送会失败)
6.E-mail notification (邮件通知)
这里我用的是qq邮箱,其他邮箱填法相似
SMTP服务器:smtp.qq.com
用户默认邮件后缀:@qq.com
√ 使用SMTP认证
用户名:[email protected]
密码:******
使用SLL协议 √
SMTP端口:456
选择通过发送测试邮件测试配置
Test e-mail recipient
目标邮箱
点击 Test configuration
如果发送失败请检查你的邮箱是否开启SMTP
8.创建item
选择新建->输入名称->构建一个自由风格的软件项目
√ github project
project url:your github project url
(这里也可以不选择,只选择后面的git也可以成功)
源码管理
git
Repositories
Repository URL:your git project url
(我的测试项目是github public 所以不需要输入Credentials,如果你的项目是private的这里就需要填写一下Credentials)
构建触发器
√ Build when a change is pushed to githup
√ Poll SCM
日程表
H/5 * * * *
(这里的详细设置可以自行百度)
点击增加构建步骤
Invoke Gradle script
invoke gradle
gradle version :default or gradle-2.12
Switches:clean build
Force GRADLE_USER_HOME to use workspace √
点击增加构建后操作步骤
E-mail Notification
Recipients:需要发送的邮件地址
最后点击保存
修改项目的Gradle文件
如果你在项目中使用了lambda那么请保证版本是3.2.5+
classpath 'me.tatarka:gradle-retrolambda:3.2.5'
后面build过程中android lint会打印一些错误信息,做如下设置
android{
lintOptions {
abortOnError false
}
}
构建项目
在项目中的左侧点击立即构建,这时Build History中会显示正在构建的记录,可以等待构建完毕也可以点击console output
成功or失败
项目构建成功会显示蓝色表示,失败则是红色
如果构建成功那么 ./app/build/outpots/apk 目录下会有你熟悉的*.apk 马上下载并安装吧。
当然第一次就构建成功是不太可能的,不过不要急你离成功也就是两三个坑的距离了
下面是我在构建过程中出现的所有问题,希望你在下面找到和你相同的错误~~
ERROR
JDK没有下载或者设置了自动下载
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:
手动下载JDK并按照文中方式安装设置
maven没有安装或者jenkins中没有设置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没有安装好或者设置错误
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请按照文中方式安装并设置
如果已经安装并且环境变量已设置好,那么可能是你的jenkins中gradle设置了自动安装,请去掉自动安装选项并设置的好GRADLE_HOME路径
服务器中没有 buildtoolversion 相应的版本
* What went wrong:
A problem occurred configuring project ':app'.
> failed to find Build Tools revision 23.0.2
使用android update 命令下载相应的build tools 版本
64位的系统,想运行32位的程序(aapt),从而找不到一些共享库
**: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
类似于文章中,缺少了一些库文件安装即可,如果还是不行报相同的错误,那么还是缺少其他文件
项目中使用了lambda
:**app:compileRetrolambdaDebugBuild
step 'Invoke Gradle script' changed build result to FAILUREBuild step 'Invoke Gradle script' marked build as failure
build 到 compileRetrolambdaDebugBuild停止
修改项目的Gradle文件
保证classpath 'me.tatarka:gradle-retrolambda:3.2.5' +
系统内存不足
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:
增加系统内存
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
}
}
...
按照提示操作即可