Azure DevOps Server 2022中YAML管道如何用当前日期定义全局变量
解决Azure DevOps Server 2022中DateTime格式化报错问题
针对你遇到的format 'yyyy-MM-dd' not valid for 'DateTime' objects错误,以下是几种可行的解决方法:
- 方法一:提取DateTime属性后格式化
pipeline.startTime在Azure DevOps Server 2022中实际是DateTimeOffset类型,直接格式化会报错,需先获取其DateTime属性再处理:
variables: CurrentDate: $[format('{0:yyyy-MM-dd}', pipeline.startTime.DateTime)]
- 方法二:直接调用ToString方法
直接对pipeline.startTime调用ToString方法并传入格式字符串,绕过format函数的类型限制:
variables: CurrentDate: $[pipeline.startTime.ToString('yyyy-MM-dd')]
- 方法三:使用预定义日期变量
如果可以接受通过预定义变量生成日期格式,可利用Build.BuildDate(默认格式yyyyMMdd)拼接成分隔符格式:
variables: CurrentDate: $[concat(substring(variables['Build.BuildDate'], 0, 4), '-', substring(variables['Build.BuildDate'], 4, 2), '-', substring(variables['Build.BuildDate'], 6, 2))]
原因说明
Azure DevOps Server 2022的表达式引擎中,pipeline.startTime并非单纯的DateTime类型,而是DateTimeOffset类型。直接使用format函数处理该类型时,常规的日期格式字符串会因类型匹配问题触发报错,上述方法通过类型转换、直接调用类型方法或替换预定义变量的方式解决了这个问题。
内容的提问来源于stack exchange,提问作者Steph09
相关产品推荐
相关产品推荐

