Jenkins Android Gradle build

作者: 壹尘子 | 来源:发表于2016-04-06 22:25 被阅读9742次

    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
          }
      }
      ...
    
    按照提示操作即可
    

    相关文章

      网友评论

      • df932445dadb:不错的,跟你遇到同样的问题了,多谢 总结
      • __Berial___:在win server中搭建的jenkins运行到:data:processReleaseResources的时候会FAILED,然后错误信息为:
        com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'd:\Android\android-sdk\build-tools\23.0.3\aapt.exe'' finished with non-zero exit value 1
        请问该如何解决?(在本地的Mac环境下搭的jenkins没有此问题)
        __Berial___:@壹尘子 tools已经全装了,win环境真是剧毒无比。
        壹尘子:@__Berial___ 我用Linux出过类似的问题,因为Linux是64的,aapt只有32兼容运行,需要下载相应的Linux32兼容库,不知道win server是否也是这样.或者检查sdk中是否下载了23.0.3的tools

      本文标题:Jenkins Android Gradle build

      本文链接:https://www.haomeiwen.com/subject/darmlttx.html