Jenkins android 自动化编译的一些坑
Posted
Jenkins就是Hudson的元老们,对Oracle注册Hudson商标(Sun被吃了嘛)并且打算将其私有商业化表示不满后,另起炉灶的产物(所以和hudson不仅看起来像,连插件基本都通用。。。) 更具体的细节请移步Wiki
[本文非科普/教程贴,仅供尝试使用Jenkins/Hudson但遇到问题的同学们,填平几个脚下的坑。]
###基本教程:
直接安装运行install jenkins就可以了,然后访问localhost:8080就可以看到基本页面。
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu https://wiki.jenkins-ci.org/display/JENKINS/GMail
一般安装插件如下:
https://wiki.jenkins-ci.org/display/JENKINS/Ant+Plugin https://wiki.jenkins-ci.org/display/JENKINS/Android+Lint+Plugin https://wiki.jenkins-ci.org/display/JENKINS/Android+Emulator+Plugin http://wiki.hudson-ci.org/display/HUDSON/Subversion+Release+Manager
配置参考如下即可:
http://java.dzone.com/articles/automating-continuous https://wiki.jenkins-ci.org/display/JENKINS/Building+an+Android+app+and+test+project
###注意事项:
一般如上操作,就差不多可以去“build”了。但很可能是荆棘遍野的,这里罗列一些遇到的坑:
-
多工程依赖 如工程A,有两个依赖的library工程B和C,这时候除了需要在工程A下面生成build.xml和project.properties,还需要在工程B和C下面同样生成(android update project);然后编译的时候在Ant的Build File里面使用工程A的build.xml即可
-
路径问题 如果出现明明
project.properties
里面有注明android.library.reference.1=xxx
的依赖项,编译时依然找不到;请确认路径是../../xxx
的格式而不是..\\..\\xxx
的格式。(反斜杠不兼容) -
native库(.so)问题 如果出现库无法链接,或者没有打包到apk中的情况;请确认是否是target版本不对,目前android-20是存在一些问题的(例如安装后不能运行等。。。),暂不建议使用(2014/9/11)
-
环境变量问题
如出现环境变量找不到,可以直接加在Ant的Properties里面,如:
sdk.dir=/xxx/xxx/xxx/sdk
-
签名问题
把key找个位置放好,然后在Ant的Properties里面加入:
key.store=/xxx/xxx/xxx.key
key.alias=xxx
key.store.password=xxx
key.alias.password=xxx
-
提示空间不足
多次编译后如空间不足,最好将JENKINS_HOME(主要是改这个环境变量)迁移到其他盘(默认是/var/lib/jenkins); 如果遇到了503的话,一般是权限不对,把新目录的owner改为jenkins:jenkins,权限改为755即可。
-
多文件打包
不支持多个文件同时输出(除非有name上的关联,如
**/*.apk
这种),这里可以用shell命令来打包;如tar;这里可以使用全局变量方便命名,如$JOB_NAME或者$WORKSPACE等等,举个栗子:
cd $WORKSPACE/code/XXX/bin/
tar zcvf $JOB_NAME.tar.gz proguard/mapping.txt xxx.apk
最后Archive the artifaces填**/*.tar.gz
就好了
-
如何删除SVN的登录信息
登录服务器(界面上没找到修改的地方),Edit your
HUDSON_HOME/hudson.scm.SubversionSCM.xml
file and delete your/credentials/entry
matching with your realm (and having your given username). -
偶尔出现的HTTP ERROR: 503 Problem accessing /jenkins. Reason: Service Unavailable
如果用了Jetty,参考这个方案。
如果没用(jenkins log里面可能有奇怪的zip size错误),那就重启一下OS吧。