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
      }
  }
  ...

按照提示操作即可
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,463评论 25 707
  • 持续集成【Continuous integration (CI)】是一种开发实践,它要求团队的开发人员定期集成他们...
    sollian阅读 1,552评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 没有国,哪有家,萨德问题愈演愈烈,乐天产品下架,超市关门,韩国游疑似被禁,平时看似不团结的中国人面对民族问题,国家...
    revora相望阅读 85评论 0 0
  • 文/植物的记忆 前几日和朋友聊天,发觉,一个用心生活的人似乎都会对自己用旧...
    神经质的喵小姐阅读 502评论 0 2