参考文档
1. Moving from buddybuild to Jenkins for Android Developers 官网jenkins for android
简介
在上一篇文章中已经配置好了jenkins docker搭建Jenkins+Android构建环境 | yndongyong‘s blog,这里主要记录如何通过jenkins pipeline 构建一个满足自己需求的打包job。
目前公司的App,一次完整的打包路径为:
拉取代码 -> 修改版本名/版本号/flutter aar版本 -> 打包 -> 加固 -> 32渠道包 -> 64渠道包->64位测试包上传cos/内测平台->企业微信通知->32包上传cos
产品App单次全量构建的打包时间基本在半个小时左右(主要还跑着其他服务),主要是耗时在打包和加固 这两个阶段。其中加固服务使用的第三方服务耗时不可控。
这一套ci流程对于公司的所有App基本固定,但还是经历了3个阶段,才慢慢演变到当前的脚本。
ci流程,最初的阶段是使用jenkins的自由风格,这一个阶段所有的app的打包流程配置各不相同是主要的问题。第二阶段转换为了pipeline,但是不支持从整个链路中间的的某一步骤重启的,譬如加固失败了,想要从这一步重新开始在这个阶段是不支持的,只能重头开始执行。第三个阶段,统一了公司所有app的分支管理规范,将所有App的打包流程都固化到了这一套流程上来了,支持从指定步骤重启,方便那些失败的步骤,节省构建时间,支持gradle构建缓存,增量编译。
特性
目前这一套ci流程,主要支持以下特性:
- 支持指定仓库地址、指定分支
- 修改versionCode versionName、修改flutter aar版本号(可选)
- 打包:支持指定打包类型,alpha:测试;release:正式包
- 加固:可选,目前只有产品App需要加固,其他项目类型的app不需要加固,使用的三方加固,将32位包和64位包上传到第三方平台加固,等待加固完成之后再下载回来。
- 32为渠道包,其中还包括,重新签名,使用walle生成各个应用商店的渠道包。
- 64为渠道包,先重新签名,再使用walle生成各个应用商店的渠道包。
- 64位测试包上传cos/内测平台:用于测试的包上传cos,提交到内测平台
- 企业微信通知:新包构建成功到企业微信群里。
- 32位包上传cos:将应用商店的渠道包上传cos指定目录,用于应用内更新下载地址。
- 支持从任一步骤重启整个流程。
- gradle构建缓存从job的workspace分离出去了,所以支持清空workspace之后也能用到gradle build cache
脚本
脚本编写
- 抽取各个项目的不同点
- 配置参数话构建
- 使用声明式的pipeline
- 涉及的jenkinsplugin参考docker搭建Jenkins+Android构建环境 | yndongyong‘s blog****
jenkins pipeline脚本编写
算了,详细的还是看脚本吧,其中遗留着一些googleplay商店渠道包、上传fir的脚本。
测试包的文件名:AKP_FILE_PREFIXX_${"yyyy-MM-dd"}.${BUILDS_TODAY}_channel.apk
正式包的文件名:AKP_FILE_PREFIXX_VERSION_NAME.500_channel.apk
构建包时指定了gradle的构建缓存目录为jenkinshome/jobname文件夹路径
1 | ./gradlew :app:assembleNormalRelease --project-cache-dir $__GRADLE_CACHE_PATH/$JOB_NAME |
每个App打包job需要改动的地方都放在了开头部分,其余都为通用逻辑.
1 | //NOTICE:配置各个App需要修改的部分 start ==================================== |
整的pipeline脚本如下:
1 | /* groovylint-disable LineLength */ |