在Azure DevOps Pipeline的Android Gradle脚本中访问预定义变量
在Azure DevOps Pipeline的Gradle脚本中访问Build.BuildNumber
嗨,我知道你从Bitrise切换到Azure DevOps时遇到了环境变量的适配问题,这其实只是个命名规则的小差异,很容易解决!
核心差异:Azure DevOps的环境变量命名逻辑
Azure DevOps会把预定义变量里的点(.)替换成下划线(_),并且全部转为大写格式。所以你要找的Build.BuildNumber对应的环境变量是**BUILD_BUILDNUMBER**——这就是和Bitrise的BITRISE_BUILD_NUMBER最关键的不同点。
修改你的Gradle脚本
只需要把获取构建号的那一行代码替换成下面的内容就行:
def buildNumber = System.getenv("BUILD_BUILDNUMBER") as Integer ?: 1
修改后的完整脚本示例:
apply plugin: 'com.android.application' // When running on the CI, this will return the build-number. Otherwise use 1 def buildNumber = System.getenv("BUILD_BUILDNUMBER") as Integer ?: 1 android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "my.app.id" minSdkVersion 23 targetSdkVersion 29 versionCode buildNumber versionName "1.0." + buildNumber testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } // ... 其他配置内容 }
额外注意事项
- 如果你的Azure DevOps构建号包含非数字字符(比如带前缀的
202405-123),直接转Integer会报错。这时候可以用正则提取数字部分:def buildNumberStr = System.getenv("BUILD_BUILDNUMBER") ?: "1" def buildNumber = buildNumberStr.replaceAll("\\D", "").toInteger() ?: 1 - 要是不确定环境变量是否生效,可以在Pipeline里加一个Bash/PowerShell任务验证:
- Bash:
echo $BUILD_BUILDNUMBER - PowerShell:
echo $env:BUILD_BUILDNUMBER
- Bash:
内容的提问来源于stack exchange,提问作者Alexander Pacha




