Jenkins Android Gradle build

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认证
用户名:8888@qq.com
密码:******
使用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
      }
  }
  ...

按照提示操作即可
    原文作者:壹尘子
    原文地址: https://www.jianshu.com/p/c1b1b2817d90
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞