Jenkins +Gradle实现Android自动化构建(学习笔记三十二)

简介: https://blog.csdn.net/mabeijianxi/article/details/52680283http://www.liuling123.com/2016/10/jenkins-gradle-auto-build.htmlJenkins简介Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

https://blog.csdn.net/mabeijianxi/article/details/52680283

http://www.liuling123.com/2016/10/jenkins-gradle-auto-build.html

Jenkins简介

Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。目前大部分公司都在使用Jenkins来持续构建。

Jenkins下载与安装配置

Jenkins下载

安装Jenkins有两种方式:

第一种就是下载安装包直接安装,下载地址:http://mirrors.jenkins-ci.org

第二种就是下载war包,放到Tomcat中启动。war包下载地址:http://mirrors.jenkins-ci.org/war/,

或者http://updates.jenkins-ci.org/download/war/

这里因为我电脑上面之前装了Tomcat,所以我使用直接下载war包的方式进行安装。

Jenkins安装

将下载的jenkins.war放到Tomcat下的webapps目录下,然后启动Tomcat。在浏览器中访问”Tomcat访问地址/jenkins”即可安装,因为我的Tomcat装在本机,并且端口为8080,所以访问http://localhost:8080/jenkins/即可进行安装。

Jenkins配置

Jenkins安装之后可以进行用户的权限设置、插件的安装等配置。

用户权限设置

系统管理–>Configure Global Security

如下图所示,在此处可以添加、删除用户以及配置用户权限。

img_6e5993892d0095d8330a6b11cd8f9236.png

插件安装

搭建Android自动化打包环境需要安装Gradle插件,如果使用Git还需要Git的插件,安装Jenkins时默认已经安装了这两个插件。如果没有安装可以进入“系统管理>管理插件”进行插件的安装。

img_aa40ac89b202e3a874d32b5f626a665c.png

创建Jenkins任务

要想Jenkins能够帮我们自动构建项目,我们需要创建一个任务,并且配置这个任务要它帮我们执行什么操作,以及什么时候执行等。

img_6d3fe6f5314ab5367dccbc2667b5a21b.png

如上图所示,点击“新建”按钮并且选择“构建一个自由风格的软件项目”,完了之后会进入到任务的配置界面,配置好之后任务会出现在如上图右边的任务列表中。

任务配置

创建一个任务之后,会自动跳转到任务的配置界面对该任务进行配置,大概包括如下配置:

源码管理

img_3b0423d286ecb0d7da4000ebccd92ded.png

构建项目,当然得有代码了。Jenkins支持使用版本控制工具来进行源码管理,比如Git或者SVN。这里我使用的是Git,项目使用的是我的github上面的一个多渠道打包的demo。在Repository URL中输入项目地址,点击Add按钮添加认证信息,然后选择构建的分支,我这里使用的是master分支。

构建触发器

img_17c2e4ea8cc43622e0835f7a27d157c5.png

Jenkins支持上图所示的触发时机配置,如果都不选,则为手动构建,需要点击“立即构建”按钮才构建。

Build periodically:周期进行项目构建(它不关心源码是否发生变化);

Build when a change is pushed to GItHub:表示只要GitHub上面源码一更新即进行构件;

Poll SCM:定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。

Build periodically和Poll SCM都支持日程表的设置,这个与Spring框架中定时器的日程表配置类似,有5个参数:

第一个参数代表的是分钟 minute,取值 0~59;

第二个参数代表的是小时 hour,取值 0~23;

第三个参数代表的是天 day,取值 1~31;

第四个参数代表的是月 month,取值 1~12;

最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。

如:

选择Build periodically并设置日程表为“0 4 ”,则表示每天凌晨4点构建一次源码。

选择Poll SCM并设置日程表为“

/10 ”,则表示每10分钟检查一次源码变化,如果有更新才进行构建。

构建工具

因为现在Android项目默认都是使用Gradle来进行构建的,所以在构建中我选择的是Invoke Gradle script。当然你也可以选择其它的构建工具,比如Ant。

选择Invoke Gradle script之后可以选Invoke Gradle和Use Gradle Wrapper,选择Invoke Gradle就是调用本地安装配置好的Gradle,此时需要指定Gradle路径。为了方便所有开发者同意Gradle版本,一般都使用Gradle Wrapper。关于Gradle和Gradlew的区别可以看这篇文章https://www.zybuluo.com/xtccc/note/275168。

img_459596ebbd95d6a2b7111cbb41e80246.png

Tasks中填上需要执行的gradle的task。上面我填的clean assembleRelease,即执行gradlew clean assembleRelease。

构建后的操作

配置构建后的操作可以让Jenkins在构建完之后执行什么操作,比如邮件通知、构建其它项目等。

img_1bb121b20cd787a5fc413d495915515a.png

这里我配置了Archive the artifacts,在“用于存档的文件”中填写需要存档的文件名,可以使用通配符。比如上面我配置了app/build/outputs/apk/v*.apk,表示疑v开头的apk文件都存档。构建完之后在任务首页可以下载存档的文件。

任务配置完成之后,点击任务首页的“立即构建”按钮,即可开始构建,构建过程首先会将源码下载下来,位于jenkins目录下的workspace中。然后执行配置好的gradle命令,如果使用gradlew,第一次应该会下载gradlew设置的版本的gradle,最后执行构建任务。构建完之后,如下图,可以看到存档的文件,点击即可下载。

img_8294f2e4915dc265060207e3f8af5b32.png

附:Android工程build.gradle文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

apply plugin:'com.android.application'

android {

compileSdkVersion23

buildToolsVersion"23.0.2"

    defaultConfig {

applicationId"com.lauren.multichanneldemo"

minSdkVersion17

targetSdkVersion23

versionCode1

versionName"1.0"

    }

    signingConfigs {

        release {

defliulingStoreFile = System.getenv("LIULING_STORE_FILE")

defliulingKeyAlias = System.getenv("LIULING_KEY_ALIAS")

defliulingKeyPassword = System.getenv("LIULING_KEY_PASSWORD")

defliulingStorePassword = System.getenv("LIULING_STORE_PASSWORD")

defisSigning = (liulingStoreFile !=null) && (liulingKeyAlias !=null) && (liulingKeyPassword !=null) && (liulingStorePassword !=null)

if(isSigning){

storeFilefile(liulingStoreFile)

                keyAlias liulingKeyAlias

                keyPassword liulingKeyPassword

                storePassword liulingStorePassword

}else{

storeFilefile("debug.keystore")

keyAlias"AndroidDebugKey"

keyPassword"android"

storePassword"android"

            }

        }

        debug {

storeFilefile("debug.keystore")

keyAlias"AndroidDebugKey"

keyPassword"android"

storePassword"android"

        }

    }

    buildTypes {

        release {

// 不显示Log

buildConfigField"boolean","LOG_DEBUG","false"

//启用混淆代码的功能

minifyEnabledtrue

//压缩对齐生成的apk包

zipAlignEnabledtrue

//指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt

proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'

shrinkResourcestrue

signingConfig signingConfigs.release//打包命令行:gradlew assembleRelease

        }

        debug {

            signingConfig signingConfigs.debug

        }

    }

    lintOptions {

abortOnErrorfalse

    }

//    productFlavors {

//        _91 {

//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "91"]

//        }

//        wandoujia {

//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "wandoujia"]

//        }

//        xiaomi {

//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "xiaomi"]

//        }

//

//        _360shoufa{

//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "360shoufa"]

//        }

//        anzhi{

//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "anzhi"]

//        }

//        baidushoufa{

//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "baidushoufa"]

//        }

//        huaweishoufa{

//            manifestPlaceholders = [MTA_CHANNEL_VALUE: "huaweishoufa"]

//        }

//    }

// 如果嫌上面写法麻烦,也可以这样简写,加上一个批量处理即可.

    productFlavors {

        _91 {}

        wandoujia {}

        xiaomi {}

        _360shoufa{}

        anzhi{}

        baidushoufa{}

        huaweishoufa{}

    }

//批量处理

    productFlavors.all {

        flavor ->

defchannel = name.startsWith("_") ? name.substring(1) : name

            flavor.manifestPlaceholders = [MTA_CHANNEL_VALUE: channel]

    }

    applicationVariants.all { variant ->

variant.outputs.each{ output ->

defoutputFile = output.outputFile

if(variant.buildType.name.equals('release')) {

//可自定义自己想要生成的格式

defchannel = variant.productFlavors[0].name.startsWith("_") ? variant.productFlavors[0].name.substring(1) : variant.productFlavors[0].name

deffileName ="v${defaultConfig.versionName}_${releaseTime()}_${channel}.apk"

output.outputFile =newFile(outputFile.parent, fileName)

            }

        }

    }

applyfrom:'productFlavors.gradle'

}

defreleaseTime() {

returnnewDate().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))

}

dependencies{

compilefileTree(dir:'libs',include: ['*.jar'])

testCompile'junit:junit:4.12'

compile'com.android.support:appcompat-v7:23.1.1'

compile'com.android.support:design:23.1.1'

}

目录
相关文章
|
11月前
|
敏捷开发 测试技术 API
测试金字塔:构建高效自动化测试策略的基石
测试金字塔:构建高效自动化测试策略的基石
749 116
|
11月前
|
测试技术 API 数据库
测试金字塔:构建高效自动化测试策略的基石
测试金字塔:构建高效自动化测试策略的基石
754 114
|
11月前
|
设计模式 前端开发 测试技术
告别脆弱:构建稳定UI自动化测试的3个核心策略
告别脆弱:构建稳定UI自动化测试的3个核心策略
932 113
|
11月前
|
JSON 监控 API
n8n错误处理全攻略:构建稳定可靠的自动化工作流
在n8n自动化工作流中,错误是提升系统可靠性的关键。本文详解常见错误类型、节点级与全局处理机制,结合重试、熔断、补偿事务等高级模式,助您构建稳定、可维护的生产级自动化流程。
|
11月前
|
Java 项目管理 Maven
Maven项目管理与构建自动化完全指南
Maven彻底改变了Java项目管理方式,通过POM模型、依赖管理和标准化构建流程,大幅提升开发效率。本文深入解析其核心概念、多模块管理、私服搭建及与Spring Boot、Docker等现代技术栈的集成实践,助力开发者实现高效、规范的项目构建与团队协作。
1436 156
Maven项目管理与构建自动化完全指南
数据采集 Web App开发 人工智能
651 0
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
1227 0
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
人工智能 自然语言处理 安全
Milvus x n8n :自动化拆解Github文档,零代码构建领域知识智能问答
本文介绍了在构建特定技术领域问答机器人时面临的四大挑战:知识滞后性、信息幻觉、领域术语理解不足和知识库维护成本高。通过结合Milvus向量数据库和n8n低代码平台,提出了一种高效的解决方案。该方案利用Milvus的高性能向量检索和n8n的工作流编排能力,构建了一个可自动更新、精准回答技术问题的智能问答系统,并介绍了部署过程中的可观测性和安全性实现方法。
1397 0
|
机器学习/深度学习 存储 算法
Trinity-RFT:构建智能体持续学习的自动化强化微调工厂
大型语言模型作为智能体在真实环境中持续交互学习面临诸多挑战。 Trinity-RFT 是通义实验室推出的强化微调框架,旨在实现智能体的持续进化。它通过探索、训练与经验池的解耦设计,支持多样化训练模式,提升资源利用率和学习稳定性。同时,Trinity-RFT 提供灵活的数据处理与算法模块化功能,降低应用与研究门槛,助力迈向终身学习与自主进化的智能体时代。
1164 2
|
XML Java 数据库连接
MyBatis Generator插件使用详解:自动化构建效率提升
总体来说,MyBatis Generator的使用可以显著提高数据访问层代码的编写效率,减少出错概率,并为团队统一代码风格提供便捷。在面对要求快速发展和迭代的软件项目时,MBG的自动化代码生成功能成了不可或缺的辅助工具。
356 0

推荐镜像

更多