能否使用git describe区分版本类型并实现AWS S3构建产物自动分类存储?
需求合理性与实现方案
你的需求完全合理,属于构建产物多环境多版本分类存储的典型场景,实现起来也很简单。
你当前用来区分正式Release版本的逻辑是没问题的:只要git describe的输出和git describe --abbrev=0的输出完全一致,说明当前提交正好对应一个版本tag,直接归档到Releases/<版本号>目录即可。
至于区分功能分支和热修复分支的构建产物,不需要完全依赖git describe的输出,只要基于分支命名约定判断当前构建对应的分支类型即可,这也是业界通用的实现方案:
- 先约定分支命名规则:所有功能分支统一用
feature/作为前缀(比如feature/user-login),所有热修复分支统一用hotfix/作为前缀(比如hotfix/v3.0.1-pay-fix) - 在PowerShell构建脚本中,执行
git rev-parse --abbrev-ref HEAD命令即可拿到当前所在的分支名 - 剩下的分类逻辑就非常清晰了:
- 符合正式版本判定规则的,存入
Releases/<版本号> - 不符合正式版本规则的,判断分支名前缀:
- 分支名以
feature/开头:存入Features/<git describe输出> - 分支名以
hotfix/开头:存入Hotfixes/<git describe输出> - 你也可以根据团队的分支规则加兜底逻辑,比如开发分支的构建单独归档到
Develop目录等
- 分支名以
- 符合正式版本判定规则的,存入
如果你们是用CI/CD工具执行构建,绝大多数CI系统都会内置当前分支名的环境变量(比如GitLab CI的CI_COMMIT_BRANCH、GitHub Actions的GITHUB_REF_NAME),直接读取环境变量比执行git命令更稳定,也不需要依赖构建环境安装git。
内容的提问来源于stack exchange,提问作者Devin Harris
相关产品推荐
相关产品推荐

