需求:
每个人的需求可能不太一样,我的需求比较简单,因为我是一个人前后端全栈开发,目前不涉及到研发团队部分所以工作环境比较简单。
但是分发的工作不是我去做的,特别是针对国内的各大平台上架事宜,是由我的合作伙伴去做。另外就是外包活接的比较多,给甲方发包也比较频繁。
曾经我的发包模式,就是将apk打个压缩包,然后发群里,各种项目交叉发包和版本追溯也确实有点烦人。
因此我不得不花点时间去配置一个自动化构建系统,以解决我当前的混乱的发布流程。
方案:
我使用war
的方式部署jenkins
以便后期无缝转移其他平台。
1 | wget https://ftp-nyc.osuosl.org/pub/jenkins/war-stable/latest/jenkins.war |
注意:默认情况下工作目录在 ~/.jenkins
,更改默认工作路径需要配置个环境变量,然后再重启下服务即可
1 | export JENKINS_HOME=/home/JenkinsWorkspace |
需要用到的插件
Maven Integration 构建maven项目用的
Email Extension 构建完成发送邮件通知用
Post build task 构建完成执行脚本用的
Role-based Authorization Strategy 配置用户项目访问权限用的
具体的我找到两篇教程供参考
*重点说下邮件模板的配置,我的原则是Jenkins
的配置不能有侵入性,项目工程既能Jenkins
编译同时也兼顾本地编译或者其他编译环境。
下面解决如何在构建通知邮件中,获取项目的版本信息
1 | 在gradle脚本中,添加日志输出: |
邮件模板主题:
1 | 构建通知:xxx项目 ${BUILD_LOG_EXCERPT, start ="^vSTARTSTART", end ="^vENDEND"} - Build # $BUILD_NUMBER - $BUILD_STATUS! |
邮件模板正文:
1 | <!DOCTYPE html> |
构建机的选择
构建机,这个比较重要,因为我有iOS编译需求,所以这里选择一台闲置的macbook(mbp2012)
作为构建机器。这台电脑7*24为我服务,除了作为构建机使用外,还装了虚拟机也是我主要的本地测试环境,因此我升级了16g内存以及ssd,虽然有点老性能也基本够用我的原则就是只要能开机就一直用着。
备注:2012款的macbook已经不能当做iOS编译机使用了,因为新版的xcode需要macos11(bigsur)以上的版本才行,而macos11只支持2013款以后的机型。
内网穿透
内网穿透 由于是本地部署需要外网访问。偶然的机会我发现阿里提供了个免费的内网穿透工具,这个可以用于临时测试用。
1 | 如果你还没有公网域名,在本部分,你可以使用钉钉内网穿透工具,映射一个本地的公网域名使用。 |
结果与发布:
发包流程可以根据实际情况去处理,同一个项目可以多拷贝几份构建ITEM以满足不同的需求,
比如 每日构建, 每次git提交构建,以及正式发包构建。等等。
由于我是单兵作战,所以只有发部新包的时候手动构建。这样只要在邮件列表的人就会收到以下邮件,然后根据需要再去下载即可。我只关注的我自己的工作流,至于别人的流程我并不关注。
- 版本命名
versionCode | versionName |
---|---|
211112(yyMMDD) | 1.0.1(根据版本情况自定义) |
versionCode
. 客户端是不可见的,主要用于版本升级,比如热更强更,以及上架的时候也会要求;主要针对研发标识版本的。
versionName
. 客户端可见,通常更有意义的版本表述的方式,如 v1.1 beta
等;主要是为了方便传播与表述。我也习惯用 1.0.yy.mmDD
这种方式定义版本名称。
- 包体命名
app-com.xxx-360-release-v1.0.1(211028)-20211115-162621-.apk
app | com.xxx | 360 | release | v1.0.1(211028) | 20211115-162621 |
---|---|---|---|---|---|
app | 包名 | 渠道名 | 正式包 | 版本名(版本号) | 编译时间(yyyyMMDD-HHMMSS) |