Android自动化打包部署及配置文档(基于Jenkins平台)

Android自动化打包部署及配置文档

                       

 

 

 

版本

日期

修订人

修订内容

0.9

2016-09-25

大海

 初稿

 

 

 

 

 

 


 

一、需求说明:

因诸多因素影响以及条件的限制,当前我们APP的Android端的打包过是手动通过开发工具打包的;这样产生的问题是:

 

一、Android端的APK的产出得依赖开发人员,如果开发人员不在公司或者电脑旁,测试等部门的同事要打包测试,那么测试部门就没得相对应的包用;

 

二、因为是手动打出来的包,对Android端的开发人员的专业技能、开发经验、对我们的项目的熟悉程度要求较高,而且容易出错,工作量增加,过程也比较繁琐。

 

为了解决上述问题以及响应产品部、QA部等部门的需求,经过大家讨论后需求如下:

1、自动打包需求

 按jenkins任务配置,在设定的时间点执行每日打包任务。

 拉取指定的开发分支的代码,然后执行自动打包脚本,提供相应的下载地址。

2、手动打包需求

  jenkins任务可以设定tag或分支,打包脚本按照jenkins设定的参数执行打包脚本。

 

 

二、需求分析:

综合上述需求以及结合当前实际情况,分析如下:

 

 1、部署环境

   因为当前我们是在准生产环境开发的、测试的部门也是在准生产环境进行测试的,所以当前请运维部门的同事先做准生产环境,后续如果增加开发、测试环境,再增加相对应的部署环境,生产上线的包,因为APP是要到阿里加固以及重新签名的,所以生产当前运维部的同事暂时不用考虑该环境问题。

 

   2、服务端留存版本

   依据jenkins的任务配置,当前服务端保留三个版本:

(1)设定的时间点执行每日打包的版本,

(2)设定tag打出来的版本,

(3)设定分支打出来的版本。

建议每个版本保留一周时间,然后服务端自动删掉。

 

    3、下载地址

    因为我们是用jenkins构建的,jenkins对任务的产出物提供有相应的下载地址,所以运维部得提供登录jenkins以及在jenkins下载该产出物的权限。

 

 

三、软件环境配置:

   一、部署机器

      1、ip: 192.168.0.0

2、端口:jenkins 默认端口

3、硬盘存储要求:30G

4、CPU:1核

5、内存:4G

6、机器系统:Linux

      

   二、插件版本要求

软件工具

版本编号

版本说明

Jenkins

待定

 

Java_JDK

1.8

一定要这个版本

Gradle

2.1.0

建议

Android_SDK

23

后期会更新为高版本

git

2.4.6

当前服务端用该版本

 

 

四、环境部署步骤:

一、Jenkins简介

Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。Jenkins 的前身是Hudson是一个可扩展的持续集成引擎。

 

       Jenkins安装与配置

下载地址:http://mirrors.jenkins-ci.org/war/latest/jenkins.war。将下载的jenkins.war包直接放到tomcat下的webapps目录,启动tomcat即可安装完成,在浏览器输入:127.0.0.1:8080/Jenkins或者localhost:8080,出现下面的界面便是安装成功。

端口问题:在安装的过程中可能会出现报端口错误的问题,请修改为9090。

安装页面的系统级别的的密码问题,请在机器本地一定要找到对应的文件,简单的复制、粘贴当然jenkins似乎不认。

编码问题:进入jenkins系统管理页面,会出现如图提示,可修改tomcat的server.xml配置,在Connector  标签添加上 URIEncoding="UTF-8" 。    

  二、JDK安装

         1、先从网上下载jdk(jdk-8u1-linux-i586.rpm),下载地址:http://www.oracle.com/technetwork/Java/javase/downloads/jdk-7u1-download-513651.html,下载后放在/home目录中,当然其它地方也行。

2、进入安装目录
#cd /home
#cp jdk-7u1-linux-i586.rpm /usr/local
#cd /usr/local
给所有用户添加可执行的权限

   #rpm-ivh jdk-7u1-linux-i586.rpm

   安装过程如图所示:

    3、设置环境变量

    #vi/etc/profile

打开后,在文档最下方加上以下环境变量配置代码:

exportJAVA_HOME=/usr/java/javajdk1.7.0_01
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

注意:exportPATH=$JAVA_HOME/bin:$PATH,注意将$PATH放到最后。以免造成新旧版本问题。

4、检查JDK是否安装成功。
#java -version
如果看到JVM版本及相关信息,即安装成功!

如图:

 

           三、下载AnndroidSDK

下载地址:https://developer.android.com/studio/index.html

 

 

然后更新sdk

# tools/androidupdate sdk --no-ui

 

           四、配置插件

1、添加git,gradle,lint

 

2、jenkins环境配置

 

 

     根据下图把JDK、AndroidSDK、git、gradle环境变量一一添加进去。

  

 

 

 

 

五、创建执行任务

   一、创建任务,如下图所示:

   

   二、添加项目描叙及参数配置

  

 

   三、拉取服务端代码

 

 

   四、添加脚本

 

 

原脚本如下所示:

apply plugin: 'com.android.application'

/*buildscript {
    repositories {
        maven { url ='http://122.224.203.210:18081/nexus/content/groups/public/' }
        maven { url ='http://maven.oschina.net/content/groups/public/'}
        //jcenter()
        mavenCentral()
    }
    dependencies {
        classpath'com.android.tools.build:gradle:2.1.0'
    }
}*/



android {
    compileSdkVersion
23
   
buildToolsVersion'23.0.1'
   
useLibrary'org.apache.http.legacy'

   
defaultConfig{
       
applicationId"com.haier.hairy"
       
minSdkVersion16
       
targetSdkVersion21
       
versionCode24
       
versionName"2.0.7"
       
multiDexEnabledtrue
       
manifestPlaceholders= [UMENG_CHANNEL_VALUE: "android_normal"]
        buildConfigField
"boolean", "DEBUG_", "true"
       
ndk{
            abiFilters
"armeabi-v7a", "x86"
       
}

    }
    repositories {
        flatDir {
            dirs
'libs'
       
}
    }
    dexOptions {
       
incrementaltrue
       
javaMaxHeapSize"4g"
   
}
    dependencies {
       
//compile'com.android.support:support-v4:23.0.0'
        //compile'me.leolin:ShortcutBadger:1.1.6@aar'
        compile
'org.greenrobot:eventbus:3.0.0'
       
compilefileTree(include: '*.jar', dir: 'libs')
       
//    testCompile 'junit:junit:4.12'
        compile
'com.android.support:appcompat-v7:23.1.1'
       
compile'com.android.support:design:23.1.1'

       
//compile'com.facebook.react:react-native:0.20.1'
        compile
'com.facebook.react:react-native:0.20.1'
       
compile'com.google.android.gms:play-services-appindexing:8.1.0'
       
//    compilefiles('libs/com.umeng.message_v2.7.0.jar')
        //    compile files('libs/gson-2.2.4.jar')
        compile
'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
       
//compile'com.android.support:support-v4:23.1.1'
       
        compile'com.google.code.gson:gson:2.4'
       
compile'com.android.volley:volley:1.0.0'

       
compile'com.android.support:multidex:1.0.1'

   
}

//渠道Flavors
//    productFlavors {
//        GooglePlay {}
//        xiaomi {}
//        umeng {}
//    }

//    productFlavors.all { flavor ->
//        flavor.manifestPlaceholders =[UMENG_CHANNEL_VALUE: name]
//    }


   
lintOptions{
       
abortOnErrorfalse
   
}
    packagingOptions {
        exclude
'META-INF/DEPENDENCIES.txt'
       
exclude'META-INF/LICENSE.txt'
       
exclude'META-INF/NOTICE.txt'
       
exclude'META-INF/NOTICE'
       
exclude'META-INF/LICENSE'
       
exclude'META-INF/DEPENDENCIES'
        
exclude 'META-INF/notice.txt'
       
exclude'META-INF/license.txt'
       
exclude'META-INF/dependencies.txt'
       
exclude'META-INF/LGPL2.1'
       
exclude'META-INF/INDEX.LIST'
       
exclude'META-INF/inputList.txt'
   
}
    sourceSets {
       main {
           
manifest.srcFile 'AndroidManifest.xml'
           
java.srcDirs =['src']
           
resources.srcDirs =['src']
           
aidl.srcDirs =['src']
           
renderscript.srcDirs =['src']
           
res.srcDirs =['res']
            
assets.srcDirs =['assets']
           
jniLibs.srcDirs =['libs']
        }

       
//Move the tests to tests/java, tests/res, etc...
       
instrumentTest.setRoot('tests')

       
//Move the build types to build-types/<type>
        // For instance,build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of themdefault location under src/<type>/... which would
        // conflict with src/ being usedby the main source set.
        // Adding new build types orproduct flavors should be accompanied
        // by a similar customization.
       
debug.setRoot('build-types/debug')
        release.
setRoot('build-types/release')
    }
    productFlavors {
    }

    allprojects {
        repositories {
            jcenter()
        }
    }

    repositories {
        mavenCentral()
    }
}

dependencies {
    compile files(
'libs/ubakit_2.0.5.jar')
   
//compilefiles('libs/com.umeng.message_v3.0.1.jar')
    //compile files('libs/com.umeng.message.lib_v2.5.0.jar')
    //compilefiles('libs/okio-1.6.0.jar')
   
compilefiles('libs/com.umeng.message_v2.7.0.jar')
}

  

五、保存构建并应用

 

六、 创建上传到fir下载平台任务

创建上传到下载平台任务同本文创建构建任务一样,但是要注意的是在  执行前面的构建任务后节奏构建本任务。

 

Linux脚本:

#!/bin/bash

####upload apk ####

curl-X "POST" "http://api.fir.im/apps" -H "Content-Type:application/json" -d "{\"type\":\"android\", \"bundle_id\":\"APP包名\",\"api_token\":\"fir提供token\"}"  > /opt/key

 

KEY=`awk-F '"' '{print $34}' /opt/key`

TOKEN=`awk-F '"' '{print $38}' /opt/key`

 

BUILD=`awk'NR==26 {print $2}'  /opt/apache-tomcat-9.0.0.M10/webapps/jenkins/jobs/Android-App1/workspace/Hairy/build.gradle`

VERSION=`cat/opt/apache-tomcat-9.0.0.M10/webapps/jenkins/jobs/Android-App1/workspace/Hairy/build.gradle| grep versionName|awk -F '"' '{print $2}'`

 

curl-F "key=${KEY}" -F "token=${TOKEN}" -F"file=@/opt/apache-tomcat-9.0.0.M10/webapps/jenkins/jobs/Android-App1/workspace/android.debug.apk"-F "x:name=应用名" -F "x:version=${VERSION}" -F"x:build=${BUILD}" -F "x:release_type=" -F"x:changelog="http://upload.qiniu.com

rm -rf/opt/key

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值