You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Actions中System.getenv获取的VERSION_CODE莫名自增1问题

问题描述

我在编写GitHub Actions的YAML构建脚本时,通过getVersionCodeRelease.sh脚本生成VERSION_CODE,在GHA步骤中输出为2025000191,但后续执行Gradle构建时,build.gradle.kts里通过System.getenv("VERSION_CODE")获取到的值却变成了2025000192。已经尝试添加--no-configuration-cache参数,但问题依旧,求排查原因。

相关代码

YAML脚本

jobs:
  build-test-and-deploy:
    runs-on: ubuntu-latest
    timeout-minutes: 90
    steps:
      - name: Calculate Version Code
        run: |
          echo "VERSION_CODE=$(scripts/getVersionCodeRelease.sh ${{ github.run_number }})" >> $GITHUB_ENV
      - name: Print Version Code
        run: |
          echo "VERSION_CODE=$VERSION_CODE"

Shell脚本

date=$(date "+%y")
runNumber=$(printf "%06d\n" $runNumber)
versionCode="$date$runNumber"

echo $versionCode

Kotlin函数

fun getVersionCodeOverride(): Int {
    val versionCode = System.getenv("VERSION_CODE").parseIntOrDefault(1)
    println("Version Code: $versionCode")
    return versionCode
}
排查方向与解决建议

1. Shell脚本参数接收错误

你贴出的Shell脚本未将传入的github.run_number赋值给runNumber变量,正确写法需要先接收参数:

runNumber="$1" # 新增这行,获取传入的第一个参数
date=$(date "+%y")
runNumber=$(printf "%06d\n" $runNumber)
versionCode="$date$runNumber"

echo $versionCode

如果缺少这行,$runNumber会是空值,printf会输出000000,但你提到GHA输出为2025000191,说明实际脚本可能存在拼写错误或参数接收逻辑问题,需检查变量赋值是否正确。

2. 环境变量被后续步骤覆盖

检查YAML脚本中,在Calculate Version Code步骤之后到Gradle构建步骤之间,是否有其他步骤通过echo "VERSION_CODE=..." >> $GITHUB_ENV或其他方式修改了VERSION_CODE变量,比如误操作重新计算版本号导致覆盖。

3. Gradle构建前先验证环境变量

在Gradle构建步骤前新增打印步骤,确认环境变量在进入Gradle前是否已经变化:

- name: Verify VERSION_CODE before Gradle
  run: echo "VERSION_CODE=$VERSION_CODE"
- name: Run Gradle build
  run: ./gradlew assembleRelease

如果此时打印的值已经是2025000192,说明问题出在前面的步骤;如果还是2025000191,说明是Gradle内部逻辑导致的变化。

4. Gradle内部版本号逻辑冲突

检查build.gradle.kts中是否有其他修改versionCode的逻辑:

  • 是否存在默认的版本号递增逻辑
  • 是否从gradle.properties等配置文件读取版本号并覆盖环境变量值
  • 确认getVersionCodeOverride函数是否被其他代码逻辑覆盖返回值

5. 排除GitHub Actions运行环境异常

虽然可能性极低,但可以在Gradle步骤中打印时间和运行编号确认:

- name: Print env details
  run: |
    echo "Current year: $(date "+%y")"
    echo "GitHub run number: ${{ github.run_number }}"

排除因跨零点导致年份变化,或运行编号异常的情况。

内容的提问来源于stack exchange,提问作者toshiomagic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 02:37:45