将TeamCity参数设置为日期变量
我有一个TeamCity构建,它将一些参数传递给.exe并每天运行。一个参数是日期参数,当前设置为静态日期。它现在需要是动态的,传递当前日期 我尝试将该值设置为%env.BUILD\u START\u DATE%,但由于对该env变量的隐式要求,这使得我的所有代理都不兼容。我还尝试在DOS命令行脚本中设置日期,完全跳过了TC参数,但最终还是得到了隐含的要求。这里的首要答案是: 第二个答案表明需要一个TC插件,但是,它不需要插件,而且基本上已经完成。我是如何在第二个答案的变体上工作的: 1.)添加powershell生成步骤以运行以下操作:将TeamCity参数设置为日期变量,teamcity,Teamcity,我有一个TeamCity构建,它将一些参数传递给.exe并每天运行。一个参数是日期参数,当前设置为静态日期。它现在需要是动态的,传递当前日期 我尝试将该值设置为%env.BUILD\u START\u DATE%,但由于对该env变量的隐式要求,这使得我的所有代理都不兼容。我还尝试在DOS命令行脚本中设置日期,完全跳过了TC参数,但最终还是得到了隐含的要求。这里的首要答案是: 第二个答案表明需要一个TC插件,但是,它不需要插件,而且基本上已经完成。我是如何在第二个答案的变体上工作的: 1.)添加
echo "##teamcity[setParameter name='env.BUILD_START_DATE' value='$([DateTime]::Now)']"
2.)在环境变量部分为env.BUILD_START_DATE指定一个默认值。如果没有默认值,TC认为拥有该值是构建代理的一个隐含要求,这使得它们都不兼容。这里的首要答案是:
第二个答案表明需要一个TC插件,但是,它不需要插件,而且基本上已经完成。我是如何在第二个答案的变体上工作的:
1.)添加powershell生成步骤以运行以下操作:
echo "##teamcity[setParameter name='env.BUILD_START_DATE' value='$([DateTime]::Now)']"
2.)在环境变量部分为env.BUILD_START_DATE指定一个默认值。如果没有默认值,TC认为拥有该值是构建代理的一个隐含要求,这使得它们都不兼容。如果您不熟悉PowerShell,这里有一个Bash方法 您可以使用脚本设置参数,并从下一个构建步骤中检索值
echo "##teamcity[setParameter name='env.BUILD_START_DATE' value='$(date +%%Y-%%m-%%dT%%H:%%M:%%S%%z)']"
之所以将%%
加倍,是因为TeamCity将%%
视为构建脚本中自己的参数
参数将具有ISO8601格式的时间戳。对于其他格式,请参见此处的各种Bash日期格式 如果您不熟悉PowerShell,这里有一个Bash方法 您可以使用脚本设置参数,并从下一个构建步骤中检索值
echo "##teamcity[setParameter name='env.BUILD_START_DATE' value='$(date +%%Y-%%m-%%dT%%H:%%M:%%S%%z)']"
之所以将%%
加倍,是因为TeamCity将%%
视为构建脚本中自己的参数
参数将具有ISO8601格式的时间戳。对于其他格式,请参见此处的各种Bash日期格式 您可以在配置中设置变量,该变量应在运行时被覆盖。我在TC参数中没有看到env.BUILD\u START\u DATE,但我看到了system.buildStartTime。我将它设置为一个虚拟值(我使用“[自动填充]”),一切正常。生成运行,system.buildStartTime在生成时被重写 您可以在配置中设置变量,该变量应在运行时被覆盖。我在TC参数中没有看到env.BUILD\u START\u DATE,但我看到了system.buildStartTime。我将它设置为一个虚拟值(我使用“[自动填充]”),一切正常。生成运行,system.buildStartTime在生成时被重写 Powershell已获取日期。您可以添加一个powershell脚本,以这种方式设置变量值。请使用此处答案的一些变体:如果您需要exe中的当前日期,那么为什么必须从TeamCity传递它?生成开始日期和当前日期只差几秒钟。exe需要接受任何日期。对于我的实现,它需要当前日期,但其他实现需要向它传递一个静态/特定日期。Powershell具有
获取日期
。您可以添加一个powershell脚本,以这种方式设置变量值。请使用此处答案的一些变体:如果您需要exe中的当前日期,那么为什么必须从TeamCity传递它?生成开始日期和当前日期只差几秒钟。exe需要接受任何日期。对于我的实现,它需要当前日期,但其他实现需要传递一个静态/特定日期。