如何在Azure Pipeline YAML文件中获取当前日期作为变量使用
Azure DevOps流水线注入日期格式版本号实现方案
不需要找专门的内置日期变量,两种可直接落地的方案按需选择即可:
方案1:零脚本直接用系统内置构建号变量
Azure DevOps本身支持自定义构建编号格式,直接在YAML流水线最顶部定义name字段(即构建号生成规则)即可:
# 纯日期格式,生成结果类似2024.05.20 name: $(Date:yyyy.MM.dd) # 如果需要区分同一天的多次构建,追加当日构建序号,生成结果类似2024.05.20.4,完全符合.NET版本规范 # name: $(Date:yyyy.MM.dd).$(Rev:r) trigger: - main # 其余原有流水线配置保持不变...
定义完成后,系统自动生成的$(Build.BuildNumber)变量就是你需要的日期格式版本号,直接替换原有publish命令里硬编码的日期即可:
- script: dotnet publish -c $(buildConfiguration) -p:Version=$(Build.BuildNumber) -p:SourceRevisionId=$(Build.SourceVersion) displayName: 执行dotnet发布
方案2:自定义脚本生成日期变量
如果你需要更灵活的日期逻辑(比如用本地时区而非默认UTC时间、加自定义后缀),就在所有构建步骤最前面加一步脚本,把日期写入流水线变量即可:
- Windows构建池用PowerShell:
- powershell: | # 以东八区时间举例,可替换为你需要的时区 $buildDate = [TimeZoneInfo]::ConvertTimeFromUtc((Get-Date).ToUniversalTime(), [TimeZoneInfo]::FindSystemTimeZoneById("China Standard Time")).ToString("yyyy.MM.dd") # 写入流水线变量,后续步骤可直接通过$(BuildDate)调用 Write-Host "##vso[task.setvariable variable=BuildDate]$buildDate" displayName: 生成构建日期变量
- Linux/macOS构建池用Bash:
- bash: | # 东八区日期格式 buildDate=$(TZ='Asia/Shanghai' date +"%Y.%m.%d") echo "##vso[task.setvariable variable=BuildDate]$buildDate" displayName: 生成构建日期变量
变量设置完成后,publish命令直接调用$(BuildDate)即可:
- script: dotnet publish -c $(buildConfiguration) -p:Version=$(BuildDate) -p:SourceRevisionId=$(Build.SourceVersion) displayName: 执行dotnet发布
注意事项
- 系统内置的
$(Date:xxx)占位符默认取UTC时间,如果你的流水线构建节点在海外,直接用可能出现日期差1天的问题,需要本地时区日期就用方案2的脚本方式生成即可。 - 如果你用的是经典可视化流水线,不需要写YAML,直接在流水线「选项」页修改构建号格式,或者在变量阶段加对应脚本步骤,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Neutrino
相关产品推荐
相关产品推荐

