讲师中心 微信公众号
AI工具推荐 视频效率加速

Git多分支项目一键编译并分发不同测试包的自动化脚本

云明君_7495

云明君_7495

发布时间:2026-09-08 07:40:36

|

468人浏览过

|

来源于php中文网

原创

<p>应使用 git rev-parse --abbrev-ref HEAD 获取纯净分支名,再通过 case 判断分支类型执行对应构建逻辑:develop 打 dev-tag 并生成 -dev 后缀包;test 跳过单元测试、仅 lint+assembleDebug 且包名加 -test;release/* 启用 ProGuard、签名并上传;其他分支仅 assembleDebug。</p>

git多分支项目一键编译并分发不同测试包的自动化脚本

如何用 shell 脚本识别当前 Git 分支并触发对应构建逻辑

脚本必须能稳定读取当前分支名,不能依赖 git branch 的星号标记(输出不稳定),也不能硬编码分支列表。正确做法是用 git rev-parse --abbrev-ref HEAD 获取纯净分支名,再用 case 或 if 判断分支类型。

  • develop 分支走预发布流程:打 dev- 前缀的 tag,生成带 -dev 后缀的 APK/IPA
  • test 分支走冒烟测试流程:跳过单元测试,只做 lint + assembleDebug,包名后缀加 -test
  • release/*(如 release/1.2.0)走正式构建:启用 ProGuard、签名、上传到蒲公英/Fir.im
  • 其他分支默认只执行 ./gradlew assembleDebug,不发包

Gradle 构建参数如何随分支动态注入

Android/iOS 构建时,版本名、包名、API 地址等常需按分支区分。直接改 build.gradle 不现实,应通过 --project-prop 传参,再在 Gradle 中用 project.findProperty("env") ?: "dev" 读取。

Git Pushing
Git Pushing

使用约定式提交信息暂存、提交和推送git更改。当用户想要提交和推送更改、提到推送到远程、或要求保存并推送工作时触发。也适用于用户说“推送更改”、“提交并推送”、“推送这个”、“推送到github”或类似git工作流程请求时。

下载
  • 在 shell 脚本中调用:./gradlew assembleRelease -Penv=test -PversionCode=102
  • Gradle 里用 android.defaultConfig.applicationId = "com.example.${project.findProperty("env")}" 动态设包名
  • 避免把敏感配置(如签名密钥路径)写进脚本,统一从 ~/.gradle/gradle.properties 读取
  • -P 参数无法覆盖 ext 里已赋值的变量,务必在 ext 初始化前读取 project.findProperty

编译产物自动归类与分发失败时如何快速定位

不同分支产出的包必须严格隔离存放,否则容易发错包。建议按

dist/<branch>/<timestamp>/
结构组织目录,且每次构建前清空同分支旧目录。

  • 分发失败常见原因:蒲公英 API token 过期、curl 未安装、APK 路径含空格(要用 "${apk_path}" 引号包裹)
  • 上传前务必校验文件存在且非零大小:[ -s "${apk_path}" ] || { echo "APK missing or empty"; exit 1; }
  • 蒲公英上传返回 JSON,用 jq '.code == 0' 判断成功,别只看 HTTP 状态码(它常返回 200 即使业务失败)
  • 失败时保留完整日志(含 git log -1git diff --stat),方便回溯是否因某次提交引入构建异常

为什么不能直接用 GitHub Actions / GitLab CI 替代本地脚本

CI 环境适合标准化发布,但多分支一键编译的核心诉求是“开发机上快速验证”,比如测试同学临时拉个 feature/login-v2 分支想立刻装包试用——CI 要 push 触发、排队、下载依赖,太重。

  • 本地脚本可跳过 CI 的 checkout + cache 拉取环节,直接复用当前工作区状态
  • 调试时能交互式输入版本号、选择是否签名,CI 流水线做不到这点
  • 但要注意:本地脚本不能替代 CI 的代码扫描和合规检查,上线前仍需走 CI 流水线兜底
  • 如果团队强制要求所有包必须经 CI 发出,那本地脚本只保留构建能力,分发逻辑直接删掉
实际跑起来你会发现,最麻烦的不是写逻辑,而是各分支的 Gradle 配置差异没对齐——比如 test 分支忘了关 Crashlytics 初始化,结果测试包上报了大量 fake crash。这类问题不会报错,只能靠人工核对 build.gradle 差异。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

4979

2023.07.05

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

1540

2023.07.06

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

874

2023.07.24

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3237

2024.04.09

git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2881

2024.04.09

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

426

2025.12.13

Figma AI自动化智能数据填充与交互生成实战
Figma AI自动化智能数据填充与交互生成实战

告别机械重复,详细演示如何用 AI 填充业务真实数据,并自动为页面添加交互连线,将静态设计稿快速转变为动态原型。

245

2026.05.13

Vibeknow在线使用入口合集
Vibeknow在线使用入口合集

本专题汇总了Vibeknow在线创作视频的官方入口及网页版使用教程,涵盖PPT、PDF、Word等文档一键转讲解视频的核心操作,并整理了免费版水印规则与手机端浏览器访问指南,助你快速将知识内容视频化。

20

2026.09.21

NumPy随机数文件读写与dtype数据类型
NumPy随机数文件读写与dtype数据类型

本专题整理 NumPy 随机数、文件读写与 dtype 数据类型相关教程,覆盖 Generator/random、随机数种子、正态分布采样、npy/npz/CSV/TXT 保存读取、loadtxt/savetxt、memmap、大文件处理、astype 类型转换、结构化 dtype、整数溢出和精度丢失等场景。

0

2026.09.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 7.8万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn