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"