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

GitHub Actions是否存在与Azure Pipelines自定义构建号语法等效的功能?

GitHub Actions 实现.NET Arcade 版本号格式方案

问题结论

你没有遗漏GitHub Actions的内置功能,GitHub Actions原生确实没有直接提供和Azure Pipelines Build.BuildNumber 语义完全匹配的环境变量,需要通过少量自定义逻辑实现同等效果,无需修改原有.NET Arcade的版本号算法。

实现方案

核心逻辑通过日期生成+当日递增序号计算两步完成,完全还原yyyyMMdd.r的格式要求:

  • 第一步:生成格式化日期
    工作流执行时获取当前UTC日期(推荐统一用UTC避免跨时区部署导致日期跳变),格式化为yyyyMMdd字符串,可直接通过shell/PowerShell命令实现。
  • 第二步:计算当日递增序号r
    这里提供两种生产环境常用的实现方案,可根据项目要求选择:
    1. 基于Actions缓存的轻量方案
      将上一次构建的日期和当日最大序号r存储在GitHub Actions缓存中,每次构建时做对比:
      • 如果当前日期和缓存存储的上次构建日期一致,r直接在上次值基础上加1
      • 如果日期不一致,r重置为1
        计算完成后GitHub Actions会自动将新的序号写入缓存,该方案无需额外依赖,序号连续无跳变。
    2. 基于工作流运行记录的方案
      调用GitHub内置API查询当前工作流当日的成功运行次数,直接将次数作为r,该方案无需维护持久化存储,适合不需要严格序号连续的场景。

示例工作流片段(Ubuntu运行器)

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 生成yyyyMMdd格式UTC日期
        id: get_date
        run: echo "date=$(date -u +'%Y%m%d')" >> $GITHUB_OUTPUT

      - name: 恢复序号缓存
        uses: actions/cache@v3
        with:
          path: .build_rev
          key: build-rev-${{ steps.get_date.outputs.date }}

      - name: 计算当日递增序号r
        id: get_rev
        run: |
          if [ -f .build_rev ]; then
            rev=$(($(cat .build_rev) + 1))
          else
            rev=1
          fi
          echo $rev > .build_rev
          echo "rev=$rev" >> $GITHUB_OUTPUT

      - name: 生成最终BuildNumber
        id: get_buildnumber
        run: echo "build_number=${{ steps.get_date.outputs.date }}.${{ steps.get_rev.outputs.rev }}" >> $GITHUB_OUTPUT

      # 后续构建步骤中直接引用 ${{ steps.get_buildnumber.outputs.build_number }} 传入.NET Arcade即可

如果使用Windows运行器,将上述shell命令替换为对应的PowerShell语法即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:24:01