Deployment VSO(TFS)-获取当前日期时间作为变量
如何获取当前日期时间并将其作为变量传递给某个部署任务?您可以使用任何值定义变量,然后将该变量修改为当前日期。具体步骤如下: 在发布中定义一个变量 假设变量名为Deployment VSO(TFS)-获取当前日期时间作为变量,deployment,azure-devops,Deployment,Azure Devops,如何获取当前日期时间并将其作为变量传递给某个部署任务?您可以使用任何值定义变量,然后将该变量修改为当前日期。具体步骤如下: 在发布中定义一个变量 假设变量名为time,我们将该值设置为none。如果需要为环境使用变量,可以在环境变量中定义它。否则,您应该在变量选项卡中定义它。 在部署任务开始时添加power shell任务: 类型:内联脚本 内联脚本: $date=$(Get-Date -Format g); Write-Host "##vso[task.setvariable va
time
,我们将该值设置为none
。如果需要为环境使用变量,可以在环境变量中定义它。否则,您应该在变量选项卡中定义它。
在部署任务开始时添加power shell任务:
类型:内联脚本
内联脚本:
$date=$(Get-Date -Format g);
Write-Host "##vso[task.setvariable variable=time]$date"
注:
- 我在这里使用的日期格式是
。你可以用其他的MM/DD/YYYY HH:MM AM/PM
- 对于后续部署任务,如果要使用当前日期时间,可以直接使用
$(时间)
a:$[计数器(格式('{0:yyyyMMdd}',pipeline.startTime),100)]
此处使用的pipeline.startTime
变量很微妙,在文档中的任何地方都没有提及,即使在根据所使用的管道方法仔细编写正确的文档时也是如此。正如本线程中的一些答案所建议的,某些变量可能具有不同的值,或者根本不存在,这取决于您在尝试访问它们时所处的位置。更简单的方法是
$(日期:MMddyy)
某些选项仅在“生成定义选项”部分中可用。日期格式就是其中之一。但是,如果要进入“选项”部分,请将生成编号格式设置为$(日期:yyyyMMdd HHmmss),然后可以在任务中使用$(build.BuildNumber)变量
此处有更多信息-对于在tfs上使用Linux的用户: 定义变量 确保它具有“在队列时间设置时可设置” 在存储库的根目录中创建脚本 set-build.date.sh:
#!/usr/bin/env bash
DATE=$(date '+%d/%m/%Y %H:%M:%S')
echo "##vso[task.setvariable variable=BUILD_DATE;]$DATE"
还列出了其他选项
在获取源代码后立即添加shell脚本
键入bash以查找此任务
完成后,您可以在以后的任务中使用
BUILD\u DATE
变量:)现在有一个特定于名为“release.Deployment.StartTime”的发布阶段的变量,或者如果您在powershell中使用该变量,则环境变量为“release\u Deployment\u StartTime”
它采用UTC格式,格式为“yyyy-MM-dd HH:MM:ssZ”例如:“2018-11-09 21:23:27Z” 注意:此变量在部署阶段开始时设置,因此如果您有部署前批准,则将在完成任何批准之前设置时间。根据我的测试,如果您有多个阶段同时执行,那么它们之间将是相同的,即使一个阶段由于代理可用性有限而等待另一个阶段
我正在使用Azure DevOps online,不确定本地TFS安装是否会有此功能。基于Marina Liu()的回答,可以快速复制和粘贴 在顶部定义变量:
variables:
buildTimeStamp: # will be set by script
# ...
将此作为第一个任务添加(并根据需要更改格式):
现在,您可以在下面的代码中使用变量
$(buildTimeStamp)
。非常好。。我试图使用这个技巧来使用代理作用域变量(Build.SourceVersion),但我似乎无法将它正确地传递到脚本中。我有-version$(Build.SourceVersion)
作为参数。我的脚本是:Param([string]$version)Write Host“##vso[task.setvariable=SourceControlVersion]$version”
我对powershell不是很精通,非常感谢您的帮助。这是可行的,但我在创建包含这种powershell内联脚本任务的任务组时遇到了问题。由于PowerShell函数语法$()与VSTS变量语法$()匹配,因此在创建任务组时,任务组似乎正在解析必需的变量,例如“Get Date-Format g”。是否有办法解决此问题或避开PowerShell语法以避免此解析行为?@Ian由于您遇到的问题与op的情况不同,您可以创建一个新问题,以便更具体地回答。请注意,这确实有效,但您设置的值可能无法在生成的所有部分中使用。例如,如果您在发布标签中使用变量,则它不起作用-该变量将始终具有默认值。在这种情况下,您必须设置一个现有的变量,如构建编号。这不起作用。我必须添加此格式说明符,以将日期(或者更确切地说是“时间”)获取为DD/MM/YY$date=$(获取日期-UFormat%D);值得一提的是,它在构建时不起作用,只在发布时起作用。这个变量没有出现在官方文档中,但它在发布时非常有效。谢谢,$(Release.Deployment.StartTime)在管道变量中工作得非常出色!
- task: PowerShell@2
displayName: set variable buildTimeStamp
inputs:
targetType: 'inline'
script: |
$date=$(Get-Date -Format yyyy-MM-dd_HH.mm);
Write-Host "##vso[task.setvariable variable=buildTimeStamp]$date"