jenkins+gitlab构建安卓自动编译环境

    因工作关系接触到接触到安卓自动编译环境,网上的资料都推荐了jenkins,因为第一次接触安卓和jenkins,踩了不少的坑,有总结才有进步。

   gitlab环境之前已经安装完成可用,具体步骤另外详解吧。本例目标是在gitlab可用前提下,通过jenkins将git仓库的代码自行编译打包,生成可用的apk安装文件。

 一、相关环境

Linux Centos6.3 2.6.32-279.el6.x86_64

 各相关软件版本

    JDK 1.8.0
    Gradle 2.13
    SDK R24
    git 2.7.1 
     jenkin 2.11

   依赖软件安装,   

   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

    编辑.bashrc文件,设置环境变量,设置完成后使用source ~/.bashrc重新加载配置即可,具体设置如下:

                      #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
                      #SDK环境变量
        export ANDROID_HOME=/an/android-sdk-linux
        export PATH=$ANDROID_HOME/platform-tools:$ANDROID_HOME/tools:$PATH
                      #gradle环境变量
        export GRADLE_HOME=/an/package/gradle-2.13
        export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${GRADLE_HOME}/bin:${JAVA_HOME}:${PATH}
    #使用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    

  这次使用了jenkins的2.11版,实际上已经有了2.13版,直接到官网下rpm包安装就好
  Jenkins 官网centos系统的下载页面:http://pkg.jenkins-ci.org/redhat/

三、jenkins的启动和初始化配置     

启动:service jenkins start
     #**运行出错,出现如下提示**
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/****改为实际安装的地址就可以了
使用netsta 可以查看到,8080端口已被监听,
[root@Centos6 init.d]# netstat -apn | grep 8080
tcp   0   0 :::8080   :::*     LISTEN

使用 http://localhostip:8080即可以访问jenkins页面,如果不能访问,请检查iptables,本例中将iptables关闭,iptables相关知识请自行脑补
首次登录,出现的第一个页面是这样子的,要通过主机上一个文件来解锁,这个设计很奇妙

clip_image002.jpg

第二个页面为选择安装插件,因后面还有插件需要安装,这里选默认就好了,等待默认的插件安装完成。

完成后的主界面是这样子的

clip_image004.jpg
1、jenkins插件安装

#系统管理---管理插件---可安装插件,选中以下插件安装
     Git plugin      #必须
     Gradle plugin   #必须 
     GitLab Plugin
     Git client plugin
     Gitlab Hook Plugin

2、初始化设置

l  系统管理 –>全局化设置里增加以下键值

clip_image005.png

l  系统设置Global Tool Configuration

设置jdk、git 和gradle 安装路径(此处有坑)

clip_image007.jpg

四、新建构建任务

   1、选择构建自由风格的软件项目

clip_image009.jpg

   2、源码管理,选git,若没有出现 git选项,请回头重新安装Git plugin插件,填写gitlab仓库地址,增加gitlab仓库验证方式,gitlab仓库验证有点波折,多尝试就好

   3、构建触发器

jenkins其实可以和 gitlab 的 hooks结合起来用,有推送就触发,懒得去研究了,

直接用了SCM排程5分钟检查一下,有新更新就打包,也挺好

clip_image013.jpg

第一个参数代表的是分钟 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版本选我们自己增那个,不要用默认

clip_image015.jpg 

    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 错误

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'

请检查git版本,删除centos自带的 git,编译安装2.7以上版本

5、提示java内存溢出

java.lang.OutOfMemoryError: Java heap space

 更改java的内存栈大小:set JAVA_OPTS= -Xms1024m -Xmx1024m

六、所需要依赖到的库

libstdc++-4.4.7-17.el6.i686

zlib-1.2.3-29.el6.i686

zlib-deve

参考资料:http://www.jianshu.com/p/526fbd59750e


原创文章,作者:N21-沉舟,如若转载,请注明出处:http://www.178linux.com/24048

赞 (0)
N21-沉舟N21-沉舟
上一篇 2016-07-16 22:24
下一篇 2016-07-16 22:24

相关推荐

  • M20 – 1- 第三周博客(1):Linux用户、组

    Linux是个多用户多任务的分时操作系统,因此要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问与限制,并为用户提供安全性保护。每个用户账号都拥有一个惟一的用户名(UID)和用户口令(PASSWD)。用户在登录时键入正确的用户名和口令后,才能…

    Linux干货 2016-08-04
  • 马哥linux0803作业内容

    1. 创建sysadmins组 将用户user1,user2,user3加入sysadmins组中 将user3设置为sysadmins的管理员 用user3登录,将user2从组中移除 设置sysadmins的密码centos 设置user1 在创建新文件时,文件的所属组为sysadmins 删除user1…3 删除sysadmins 2、三种权限rwx对…

    Linux干货 2016-08-04
  • N25-第十二周博客作业

    1、请描述一次完整的http请求处理过程; (1) 建立或处理连接:接收请求或拒绝请求;(2) 接收请求:接收来自于网络上的主机请求报文中对某特定资源的一次请求的过程;(3) 处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息;(4) 访问资源:获取请求报文中请求的资源;从磁盘中获取(5) 构建响应报文:(6) 发送响应报文:(7) 记录…

    Linux干货 2017-04-09
  • M20-1权限作业

    1、当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作? [root@centos7 testdir]# ls -ld /testdir/ drwxr-xrw-. 3 root root 27 Aug  5 0…

    Linux干货 2016-08-05
  • N21沉舟15周作业

    1、总结sed和awk的详细用法; 2、删除/boot/grub/grub.conf文件中所有行的行首的空白字符; #  sed 's@^[[:space:]]@@' /boot/grub/grub.conf 3、删除/etc/fstab文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字…

    Linux干货 2016-11-14
  • 【招聘福利】深圳/系统运维工程师/薪资弹性,可面谈

    深圳市鑫顺诺科技有限公司 有意向的学员,请联系magedu-小助手QQ:1522609717 职位职能: 系统运维工程师岗位职责:1、公司日常机房网络和办公室网络管理调优、日常办公电脑维护。2、管理、维护网站服务器运行状态,处理系统运行故障;3、负责服务器集群的操作系统安装、升级、定制、部署与维护工作;4、负责服务器集群的系统监控和自动化脚本的设计与部署;5…

    Linux干货 2015-11-06