我们其实有很多移动端的产品,所以在做完web端容器相关持续交付后,我们开始关注移动端相关的应用场景,这里我们重点切入的移动安卓打包及相关打渠道包和最终的市场投放环节,这里也和大家做个简单的分享。
在移动端母包构建和渠道打包上线后,给业务提效十分明显,尤其是渠道打包,基本能节省30-40%的时间,且自动化不易出错。
1、移动端CICD设计
1.1、原流程调研
其实持续交付的核心就是建立一个可靠的交付流水线,将软件交付整个周期进行串联起来,通过这条流水线,将交付过程标准化、自动化、可视化,同时实现关键流程和节点管控。基于此,我们分析目前移动端整体现状或者工作流程,
- 项目管理使用禅道
- 打包工具使用Jenkins(产运、开发、测试都是在Jenkins打包 😂)
- 缺陷管理使用禅道
- 包管理暂时是Jenkins打包后通过下载手动传送,或者上传至禅道附件保存
- 渠道通过平台打包,手动下载、手动重命名、手动FTP投放、手动邮件通知等
1.2、新流程设计
针对原有流程,项目/需求管理还是使用禅道原有功能,将版本母包的功能集成到禅道的版本中,同时禅道支持渠道打包和市场投放功能。
版本母包
- 版本母包管理(支持自测–>系统测试–>母包同步等)
- 统一母包构建入口,支持定制化打包参数设置
- 构建构成可视化
渠道打包
- 批量打包管理(批量下载、自动重命名、二维码下载等)
- 渠道包自动化抽签
- FTP自动化投放
- 渠道打包投放过程可视化
2、多APP统一页面实现定制化构建母包
2.1、母包构建页面
2.2、定制参数设计
通过业务项目代码的仓库的gradle.properties文件添加约定注解实现
- 普通注解示例
1 | #@name:是否展示获取数据的权限弹框@show:true@enableModify:true@type:bool@description:是否展示获取数据的权限弹框 |
- 新增附件上传注解
安卓项目有附件资源依赖,附件资源以注解形式给出,通过定制参数传入
1 | #@name:桌面Icon压缩包@show:true@enableModify:true@type:uploadfile@fileType:zip@description:桌面Icon,必须是压缩包,目录结构符合要求,文件名为 ICON_RES.zip |
2.3、构建打包Jenkins Job设计
入参说明
- Jenkins主要入参
参数 | 说明 |
---|---|
BUILD_ID | 构建ID,构建唯一标识 |
BUILD_PARAMS_JSON | 构建参数,json格式 |
CALLBACK_URLS_JSON | 流水线回调url参数,json格式 |
other params | 其他构建参数 【禅道无需关心】 ,主要由Jenkins自己维护参数 |
- 通用 CALLBACK_URLS_JSON 参数示例说明
1 | { |
BUILD_PARAMS_JSON参数说明
采用一个Json构建字符串,便于后期的扩展和维护
- 字段说明
字段名 | 类型 | 是否必须 | 描述 |
---|---|---|---|
commonParams | object | 是 | 构建 通用 参数Object |
commonParams.gitMode | string | 是 | 拉取git仓库方式:branch-分支;tag-标签 |
commonParams.gitBranchName | string | 是 | git分支名,若gitMode为tag,字段传空值:"" |
commonParams.gitTagName | string | 是 | git标签名,若gitMode为branch,字段传空值:"" |
commonParams.buildType | string | 是 | 打包版本类型 test-内测、测试版本,release-正式版本 |
commonParams.appName | string | 是 | 应用名称,从properoties文件中解析对应选项 |
commonParams.packageName | string | 是 | 应用包名,从properoties文件中解析对应选项 |
commonParams.productFlavor | string | 是 | 定制的产品特性,从properoties文件中解析对应选项 |
commonParams.channel | string | 是 | 渠道号,多个渠道号请用英文逗号分隔 |
commonParams.versionName | string | 是 | 外部版本号,与内部版本号对应,如:2.3.4 主要用于显示给用户,服务端个别接口的逻辑 |
commonParams.versionCode | string | 是 | 内部版本号,与外部版本号对应,如:203040 主要用于升级 |
customParams | object | 是 | 构建 定制 参数Object,不存在定制参数传空object, 从properoties文件中解析生成对应的定制参数 |
- 构建参数示例
1 | { |