农村四月闲人少,勤学苦攻把名扬。这篇文章主要讲述jenkins+gitlab构建安卓自动编译环境相关的知识,希望能为你提供帮助。
因工作关系接触到接触到安卓自动编译环境,网上的资料都推荐了jenkins,因为第一次接触安卓和jenkins,踩了不少的坑,有总结才有进步。
gitlab环境之前已经安装完成可用,具体步骤另外详解吧。本例目标是在gitlab可用前提下,通过jenkins将git仓库的代码自行编译打包,生成可用的apk安装文件。
一、相关环境
1 | Linux
Centos6.3
2.6.32-279.el6.x86_64 |
1 |
JDK
1.8.0
Gradle
2.13
SDK
R24
git
2.7.1
jenkin
2.11 |
123456 |
git安装,不可用yum直接的git版本,需要重新下载新版,本例用git2.7.1,编译安装即可,下载地址
https: //www .kernel.org /pub/software/scm/git/git-2 .7.1. tar .gz
本例中下载的,JDK,SDK,Gradle
都是解压后,设置环境变量即可用了
其中:
JDK
解压目录为 /usr/local/java
SDK解压目录为 /an/android-sdk-linux
Gradle目录为 /an/package/gradle-2 .13 |
1 | #JDK环境变量
export
JAVA_HOME= /usr/local/java
export
CLASSPATH=.:$JAVA_HOME /lib/dt .jar:$JAVA_HOME /lib/tools .jar:$JRE_HOME /lib :$CLASSPATH
export
PATH=$JAVA_HOME /bin :
$PATH |
1 | #SDK环境变量
export
ANDROID_HOME= /an/android-sdk-linux
export
PATH=$ANDROID_HOME /platform-tools :$ANDROID_HOME /tools :$PATH |
1 | #gradle环境变量
export
GRADLE_HOME= /an/package/gradle-2 .13
export
PATH=${JAVA_HOME} /bin :${JRE_HOME} /bin :${GRADLE_HOME} /bin :${JAVA_HOME}:${PATH} |
1 | #使用java
–version
android
–h
gradle
–version
三个命令测试安装是否成功。 |
SDK更新,切换到android目录,执行tools/android update sdk –no-ui
两个小时左右,确保磁盘有足够空间,总大小6G左右
***因为源码语言指定用 sdk build-tools 22.0.1打包,所以需要另外装 build-tools的版本,方法如下
1、使用android list sdk –all 查看所有可用的更新包,找到 build-tools22.0.1编码为8
2、使用android update sdk –no-ui –all –filter 8安装build包
Note: android list target 查看本地已经安装的SDK
二、安装jenkins
12 |
这次使用了jenkins的2.11版,实际上已经有了2.13版,直接到官网下rpm包安装就好
Jenkins
官网centos系统的下载页面:http: //pkg .jenkins-ci.org /redhat/ |
1 | 启动:service
jenkins
start |
1 |
#**运行出错,出现如下提示* * Starting
Jenkins
Jenkins
requires
Java7
or
later,
but
you
are
running
1.6.0_24-b24
from
/usr/lib/jvm/java-1 .6.0-openjdk-1.6.0.0.x86_64 /jre
#在/etc/init.d目录下,编辑jenkins文件, 将java的目标地址/usr/lib/****改为实际安装的地址就可以了 |
1 | 使用netsta
可以查看到,8080端口已被监听 , [[email
protected]
init.d] #
netstat
-apn
|
grep
8080
tcp
0
0
:::8080
:::*
LISTEN |
首次登录,出现的第一个页面是这样子的,要通过主机上一个文件来解锁,这个设计很奇妙
文章图片
第二个页面为选择安装插件,因后面还有插件需要安装,这里选默认就好了,等待默认的插件安装完成。
完成后的主界面是这样子的
文章图片
1、jenkins插件安装
123456 | #系统管理---管理插件---可安装插件,选中以下插件安装
Git
plugin
#必须
Gradle
plugin
#必须
GitLab
Plugin
Git
client
plugin
Gitlab
Hook
Plugin |
- 系统管理 –>
全局化设置里增加以下键值
文章图片
l 系统设置Global Tool Configuration
【jenkins+gitlab构建安卓自动编译环境】设置jdk、git 和gradle 安装路径(此处有坑)
文章图片
四、新建构建任务
1、选择构建自由风格的软件项目
文章图片
2、源码管理,选git,若没有出现 git选项,请回头重新安装Git plugin插件,填写gitlab仓库地址,增加gitlab仓库验证方式,gitlab仓库验证有点波折,多尝试就好
3、构建触发器
jenkins其实可以和 gitlab 的 hooks结合起来用,有推送就触发,懒得去研究了,
直接用了SCM排程5分钟检查一下,有新更新就打包,也挺好
文章图片
第一个参数代表的是分钟 minute,取值 0~59;
第二个参数代表的是小时 hour,取值 0~23;
第三个参数代表的是天 day,取值 1~31;
第四个参数代表的是月 month,取值 1~12;
最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
如H/5 * * * * 表示的就是每5分钟检查一次源码变化。
4、构建
增加Invoke Gradle script,gradle版本选我们自己增那个,不要用默认
文章图片
5、构建后
(待研究)
这样子就可以开始构建了,点击立即构建,构建完成时显示蓝色就是构建成功,红色就是构建失败了
构建完成后的apk文件通常放在仓库目录的build/outputs目录下,其实可以用命令在构建完成后拷出去,这个自行脑补吧
五、jenkins加SDK的各种坑
1、构建时提示
Cannot run program "gradle" (in directory "/var/lib/jenkins/jobs/*****/workspace"): error=2, 没有那个文件或目录
网上关于没有文件和目录的问题,有各种说法,试了最后都没有解问题,其实是因为gradle的问题,记得我们第一步在系统设置里面指定了gradle的安装目录么,在新建构建任务的时候,在构建那一步,gradle 版本后面的下拉框要选,指定的版本,不能用默认,请往上翻,注意我画了三个箭头的那张图。
2、另外一个坑,提示无访问权限
我把gradle解压到了/root目录下面,jenkins运行时,会使用jenkins的身份运行gradle,就会出现权限不足,无法访问的情况。
3、Could not init /tmp/hudson1687987969108344361tmp
未安装 git,或在系统设置里未指定git安装路径
4、出现无法连接http 错误
12345 | Failed
to
connect
to
repository
:
Command
" /usr/local/bin/git
-c
core.askpass= true
ls -remote
-h
http: // *********************/****r.git
HEAD"
returned
status
code
128:
stdout:
stderr:
fatal:
Unable
to
find
remote
helper
for
‘http‘ |
5、提示java内存溢出
1 | java.lang.OutOfMemoryError:
Java
heap
space |
六、所需要依赖到的库
libstdc++-4.4.7-17.el6.i686
zlib-1.2.3-29.el6.i686
zlib-deve
参考资料:http://www.jianshu.com/p/526fbd59750e
推荐阅读
- Android开发(《Gradle Recipes for Android》阅读笔记(翻译)4.1——编写自己的任务)
- 海报工厂之android 如何给图片添加水印和文字
- android编译错误
- 生成总和等于给定值的最小硬币组合
- EPAM Systems Hyderabad面向初级软件工程师的2020年毕业生面试
- Wabtec Corporation FTE面试经验|校园内虚拟流程
- 使用快速选择算法的未排序数组的中位数
- 检查数字奇数位的数字总和是否可被K整除
- 算法设计(在字符串中复制元音)