将 TeamCity 参数设置为日期变量

Set a TeamCity parameter to a date variable

我有一个 TeamCity 构建,它将一些参数传递给 .exe 并每天运行它。一个参数用于日期参数,当前设置为静态日期。它现在需要是动态的,传递当前日期。

我尝试将该值设置为 %env.BUILD_START_DATE% 但这会使我的所有代理不兼容,因为对该环境变量有隐含的要求。我还尝试在 DOS 命令行脚本中设置日期,完全跳过 TC 参数,但它仍然以隐式要求结束。

这里的最佳答案:TeamCity Current Date variable in MMdd format 表示需要 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 日期格式; https://www.tutorialkart.com/bash-shell-scripting/bash-date-format-options-examples/

您可以在配置中设置变量,该变量应该在 运行 时间内被覆盖。我在 TC 参数中没有看到 env.BUILD_START_DATE,但确实看到了 system.buildStartTime。我将它设置为虚拟值(我使用“[自动填充]”),一切正常。 Build 获取 运行 并且 system.buildStartTime 在构建时被覆盖。