在Azure Pipelines中获取feature分支名 实现APK按分支标签重命名
解决方案
方案1:通过Azure Pipelines预定义变量处理(最稳定,不受仓库切分支影响)
Azure Pipelines启动时会自动将触发流水线的分支完整路径写入内置变量Build.SourceBranch,该变量值不会随后续仓库分支切换操作变更,完全规避切回HEAD后无法获取原触发分支名的问题。
步骤1:提取目标APK文件名
在流水线的Checkout任务之后、构建任务之前添加脚本任务,提取分支名的最后一段作为APK文件名:
- Linux/macOS 代理(Bash 脚本):
sourceBranch="$(Build.SourceBranch)" # 截取分支路径最后一段,例如 refs/heads/feature/Android_fix_something 得到 Android_fix_something apkName="${sourceBranch##*/}" # 将结果写入流水线全局变量,后续所有任务可直接调用 echo "##vso[task.setvariable variable=ApkOutputName]$apkName"
- Windows 代理(PowerShell 脚本):
$sourceBranch = "$(Build.SourceBranch)" $apkName = $sourceBranch.Split('/')[-1] Write-Host "##vso[task.setvariable variable=ApkOutputName]$apkName"
步骤2:重命名生成的APK
在Gradle构建完成后添加重命名任务即可:
- Bash 示例:
mv app/build/outputs/apk/release/app-release.apk app/build/outputs/apk/release/$(ApkOutputName).apk
- PowerShell 示例:
Move-Item -Path "app/build/outputs/apk/release/app-release.apk" -Destination "app/build/outputs/apk/release/$(ApkOutputName).apk"
方案2:在Gradle中直接配置APK输出名
你也可以直接修改模块级build.gradle配置,构建时直接生成对应名称的APK,不需要额外执行重命名步骤:
android { // 保留你原有的其他配置不变 applicationVariants.all { variant -> variant.outputs.all { output -> // 读取流水线传入的ApkOutputName变量,本地调试时无变量则用default命名 def outputName = System.getenv("ApkOutputName") ?: "default" outputFileName = "${outputName}.apk" } } }
补充说明
如果触发流水线的是标签而非分支,只需要将脚本中的Build.SourceBranch替换为对应标签变量即可,提取逻辑完全一致。
内容的提问来源于stack exchange,提问作者user2410170
相关产品推荐
相关产品推荐

