Android Gradle JenKins SVN 自动化打包

JenKins 是什么?

理解:是一个集成各种插件,通过配置、管理 的本地Web,去自动化打包Android、IOS的工具。

整体流程

插件配置——————》系统设置 sdk HOME 和路径  ,全局设置JDK、GRADLE 、GIT 的本地路径 交由JenKins 管理(即Jenkins通过上步安装的插件 配置好 就可以管理本地的gradle了)新建一个任务————》动态构造自定义本地参数写入build。gradle ——————》配置git 或svn 路径(下载源码到jenkins 好接管编译)——————————》配置gradle 及task (编译命令和编译写入构造好的参数)——》设置编译的版本名称————》构建项目 ——————控制台看log  ——————》自定义的输出apk路径 找到打出的apk包

环境变量配置:其实就是将本地计算机的配置 在JenKins上面配置一遍,Jenkins 通过插件就可以自己去管理了。原本studio 通过gradle 编译的android 项目在jenkins上处理了。





注:下面截图上传失败 只能语言表达了。

step.1

JDK

JDK 7.0+

Gradle

Gradle 中文网 安装板或解压版 对应目录下的 gradle.xxx.zip 包

apache 的官网 http://tomcat.apache.org/

下载Tomcat9.0.zip

Jenkins的官网下载https://jenkins.io

下载Jenkins.war

step.2

解压Tomcat9.0.zip

Jenkins.war放到 其解压后的webapps的目录下

step.3

解压后的tomcat的bin目录下 点击startup.bat 启动tomcat (shutdown.bat 停止tomcat)

step.4

打开本地浏览器

http://localhost:8080/jenkins/

然后注册用户名密码。

这时候会出现  一个文件夹路径  拷贝到C盘 打开此文件夹 ,会出现数字密码。将其复制到 下面密码框即可。

step.5 插件配置



进入系统管理--》插件管理界面

可选插件 安装如下插件,这些插件之后会用到。 点击下载后在安装。下载成功后。关闭tomcat 在打开。在访问genkins 同上面step3 和step4. 在次进入 已安装即可查看到。

1.Branch API Plugin

2.build timeout plugin

3.build-name-setter

4.Credentials Binding Plugin

5.description setter plugin

6.Dynamic Parameter Plug-in

7.Environment Injector Plugin

13.Pipeline: Basic Steps

14.Pipeline: Build Step

15.Pipeline: Input Step

16.Pipeline: Nodes and Processes

17.Pipeline: Stage Step

18.Scriptler

19.Workspace Cleanup Plugin

20.Post-Build Script Plug-in

21.Email Extension Plugin

22.SSH Slaves plugin

23.Timestamper

使用git安装如下

9.Git plugin

10.GIT server Plugin

11.Gradle Plugin

12.Git Parameter Plug-In

如果你使用的SVN 还需要安装

Subversion Plug-in

Subversion Release Manager plugin

step.6 设置全局属性


系统管理--》进入设置全局属性


点击environment variables 选项 配置 SDK

ANDROID_HOME

xx\sdk     -----SDK 具体路径 (studio 引用的sdk绝对路径)

step.7 设置重点属性(理解就是在本地的名称 和其绝对路径)

系统管理--》进入Global Tool Configuration

JDK  、gradle、git 环境变量配置

JDK 模块:

name:jdk_1.8

home :复制jdk 在本地文件夹的绝对路径 xxx/jdk_1.8

gradle模块:

注:引用 android studio 安装板或解压版 对应目录下的 gradle 即可

name:gradle-2.14.1

home:复制jdk 在本地文件夹的绝对路径 xxx/gradle/gradle-2.14.1

git模块也一样  使用svn 此模块就默认就好。

step.8 新建任务

点击新建任务

输入名称

Jenkins-》新建-》构建一个自由风格的软件项目-》

点击ok即可

step.9 配置项目

1. 自定义动态参数配置



这边对应设置gradle.properties文件 ,给build.gradle动态赋值 管理

找到参数化构建过程选项→打勾

选项参数使用 Choice  理解为下拉框多选

字符输入参数使用 String Parameter 理解为一个字符串参数

时间参数使用 Dynamic Parameter 理解为一个计算的js脚本

在添加参数时,配置Name的值必须与.properties文件中定义的参数名称相同。

2. SVN 同步源码配置



源码管理:选择具体的版本控制软件,并填写项目URL,如本人为svn,只需在Repository URL填具体项目svn地址,其它为默认。

会自动将svn代码下到jenkins 的workspace 目录下

C:\Users\...\.jenkins\workspace

3. 设置项目名



进入项目配置找到→构建环境→勾选Set build Name 设置参数

注意和上面配置参数名一致如我们使用了BUILD_NUMBER 自带参数,以及 APPNAME、APP_VERSION、BUILD_TYPE

${BUILD_NUMBER}${APP_VERSION}

4. gradle 配置

注意和上面配置参数一致

这边对应设置gradle.properties文件 ,给build.gradle动态赋值 管理

找到上面我们使用Gradle 插件的 Invoke Gradle script

修改tasks命令,应用上面的参数,并勾选Pass job parameters as Gradle properties选项。

选择 gradle 上面配置的名称

task:clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE}

pass job parameters as gradle propertiers  checbox 打钩

PRODUCT_FLAVORS和BUILD_TYPE即我们上面配置的参数,务必保持一致。

点击保存,回到项目首页。

就可以看到,原先的立即构建已经变成了Build with Parameter

点击参数构建,就可以看到如下上面我们配置的参数。

等待构建完成,前往在.Gradle文件中配置的路径中即可找到我们配置的命名apk。

step.10 构建项目

立即构建----》Build with Parameter

step.11 控制台查看log

Console Output

step.12 APK编译到指定路径

step.13 source 对应

gradle..properties文件

APP_VERSION=2.4.0

APP_VERSION_CODE=2

IS_JENKINS=false

BUILD_TYPE=debug

PRODUCT_FLAVORS=internal

BUILD_PATH_JENKINS=E\:\\AA

BUILD_PATH_LOCAL=D:\\BB\\CC

BUILD_TIME=1970-1-1

APPNAME=JKApp

build.gradle 文件

productFlavors {

// Because Android Meta-data does not support getLong method, NOTIFICATION_PROJECT_NUMBER

// is prefixed with 'L'('L' will be trimed when be used.

internal {

manifestPlaceholders = [BASE_URL: "http://",

HOST: "133.",

PORT: "",

HTTP: "http://",

API_VERSION: "api2",

CONTENT_REFERER_HTML: "http:"]

if("true".equals(IS_JENKINS)){

versionName = "J" + BUILD_TIME+"_internal_api2"

}else{

versionName = "F" + getDate()+"_internal_api2"

}

}

open {

manifestPlaceholders = [BASE_URL: "https:/",

HOST: "pf",

PORT: "",

HTTP: "https://",

API_VERSION: "api",

CONTENT_REFERER_HTML: "https:"]

if("true".equals(IS_JENKINS)){

versionName = "J" + BUILD_TIME+"_public"

}else{

versionName = "F" + getDate()+"_public"

}

}

myTest {

manifestPlaceholders = [BASE_URL: "http:",

HOST: "192.7",

PORT: "8383",

HTTP: "http://",

API_VERSION: "api2",

CONTENT_REFERER_HTML: "http:/"]

if("true".equals(IS_JENKINS)){

versionName = "J" + BUILD_TIME+"_test"

}else{

versionName = "F" + getDate()+"_test"

}

}

}

applicationVariants.all { variant ->

variant.outputs.each { output ->

output.outputFile = new File(

output.outputFile.parent,

//                    buildOutputDir,

"${variant.versionName}.apk")

}

}

AndroidManifest.xml  文件

android:value="${BASE_URL}"/>

android:value="${HOST}"/>

android:value="${PORT}"/>

android:value="${HTTP}"/>

android:value="${API_VERSION}"/>

Application 文件

@Override

public void onCreate() {

super.onCreate();

instance = this;

readMetaDataFromApplication();

}

private voidreadMetaDataFromApplication() {

try{

ApplicationInfo appInfo =this.getPackageManager()

.getApplicationInfo(getPackageName(),

PackageManager.GET_META_DATA);

String BASE_URL = appInfo.metaData.getString("BASE_URL");

String HOST = appInfo.metaData.getString("HOST");

String PORT = appInfo.metaData.getString("PORT");

String HTTP = appInfo.metaData.getString("HTTP");

String API_VERSION = appInfo.metaData.getString("API_VERSION");

String CONTENT_REFERER_HTML = appInfo.metaData.getString("CONTENT_REFERER_HTML");

Constants.BASE_URL= BASE_URL;

Constants.HOST= HOST;

Constants.PORT= PORT;

Constants.HTTP= HTTP;

Constants.API_VERSION= API_VERSION;

Constants.CONTENT_REFERER_HTML= CONTENT_REFERER_HTML;

}catch(PackageManager.NameNotFoundException e) {

e.printStackTrace();

}

}


本文源码链接下载:

http://download.csdn.net/detail/jxmy_1989/9756479

GIT 及证书签名请 参考以下链接:

http://www.jianshu.com/p/915c1ae69144

http://www.open-open.com/lib/view/open1482371829772.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容