通过 TeamCity 9 中的参数值覆盖依赖项属性
Override dependencies properties by parameters value in TeamCity 9
在 TeamCity 9 中,我有两个构建配置:A、B,它们依赖于 A(快照依赖性)。有时 A 单独开始,有时与 B 连锁。
当 A 被 B 触发时,我想将 A 的 build.number
更改为(例如)0.<build.counter of B>
根据docs:
Since TeamCity 9.0, there is a possibility to override the
dependencies parameters by redefining them in the dependent build. For
example, build configuration A depends on B and B depends on C; A has
the ability to change parameters in any of its dependencies using the
following format:
reverse.dep.<btID>.<property name>
好的,我在B中创建了配置参数:reverse.dep.A.build.number
=0.%build.counter%
。
因此,当我启动构建链时,我假设 A 的 build.number 将更改为 0.123
(例如,build.counter[ B 的 =31=] 等于 123),但 字符串 0.%build.counter%
已传递给 A,A 使用自己的 属性 build.counter
。
如何准确传递 TeamCity 参数值?
到 "A" 构建开始时,"B" 构建仍在队列中,因此没有可用的构建编号。 %build.number%参数无法解析,按字面意思传递。
尝试创建 "C" 配置并为其添加快照依赖项(来自 A 和 B)。将 A 和 B 中的版本号格式设置为 %dep.C.system.build.number%
这样您就可以让 A 和 B 共享同一个计数器。
考虑问题
无法使用 reverse.dep.
语法将值传递给依赖项构建。
reverse.dep parameters values are passed down the dependency chain as is.
(来自这里:https://youtrack.jetbrains.com/issue/TW-40772)
考虑问题
- 创建配置"C"
- 从 "A" 使用 "Do not run new build if there is a suitable one" 选项
添加到 "C" 快照依赖项
- 从 "B" 添加到 "C" 快照依赖项 没有 相同的选项。
- 通过
reverse.dep.A.use_C_number
=true
将参数从 "B" 传递到 "A",因此 "A" 知道要使用哪个计数器。
在 "A" 的脚本(新建步骤)中使用此参数,例如 (PowerShell):
# Gets build.number of "C"
$C_num = "%dep.C.build.number%"
# Gets 'use_C_number' parameter
$use_C_number = "%use_C_number%"
# Change current build.number if needed
if ($use_C_number -eq "true") {
Host-Write "##teamcity[buildNumber '1.2.3.$C_num']"
}
在这种情况下,"C" 将仅由 "B" 而不是 "A" 触发,因为 "A" 将始终使用 "suitable" 构建 "C"("C" 没有附加 VCS 根)。
注意:它应该至少是 "C" 的一个完成版本。
注意:我不确定在所有情况下 "suitable" 构建,因为在 TeamCity 跟踪器中 documentation is not clear for situation with no VCS root attached to build configuration, but it works. In any case there is a question。
所以,C的build.counter只有在"B"排队时才会递增。
当 "A" 单独启动时,它使用默认 build.number
.
P.S。感谢 Nikita Skvortsov 将我作为解决方案的目标。
在 TeamCity 9 中,我有两个构建配置:A、B,它们依赖于 A(快照依赖性)。有时 A 单独开始,有时与 B 连锁。
当 A 被 B 触发时,我想将 A 的 build.number
更改为(例如)0.<build.counter of B>
根据docs:
Since TeamCity 9.0, there is a possibility to override the dependencies parameters by redefining them in the dependent build. For example, build configuration A depends on B and B depends on C; A has the ability to change parameters in any of its dependencies using the following format:
reverse.dep.<btID>.<property name>
好的,我在B中创建了配置参数:reverse.dep.A.build.number
=0.%build.counter%
。
因此,当我启动构建链时,我假设 A 的 build.number 将更改为 0.123
(例如,build.counter[ B 的 =31=] 等于 123),但 字符串 0.%build.counter%
已传递给 A,A 使用自己的 属性 build.counter
。
如何准确传递 TeamCity 参数值?
到 "A" 构建开始时,"B" 构建仍在队列中,因此没有可用的构建编号。 %build.number%参数无法解析,按字面意思传递。
尝试创建 "C" 配置并为其添加快照依赖项(来自 A 和 B)。将 A 和 B 中的版本号格式设置为 %dep.C.system.build.number%
这样您就可以让 A 和 B 共享同一个计数器。
考虑问题
无法使用 reverse.dep.
语法将值传递给依赖项构建。
reverse.dep parameters values are passed down the dependency chain as is.
(来自这里:https://youtrack.jetbrains.com/issue/TW-40772)
考虑问题
- 创建配置"C"
- 从 "A" 使用 "Do not run new build if there is a suitable one" 选项 添加到 "C" 快照依赖项
- 从 "B" 添加到 "C" 快照依赖项 没有 相同的选项。
- 通过
reverse.dep.A.use_C_number
=true
将参数从 "B" 传递到 "A",因此 "A" 知道要使用哪个计数器。 在 "A" 的脚本(新建步骤)中使用此参数,例如 (PowerShell):
# Gets build.number of "C" $C_num = "%dep.C.build.number%" # Gets 'use_C_number' parameter $use_C_number = "%use_C_number%" # Change current build.number if needed if ($use_C_number -eq "true") { Host-Write "##teamcity[buildNumber '1.2.3.$C_num']" }
在这种情况下,"C" 将仅由 "B" 而不是 "A" 触发,因为 "A" 将始终使用 "suitable" 构建 "C"("C" 没有附加 VCS 根)。
注意:它应该至少是 "C" 的一个完成版本。
注意:我不确定在所有情况下 "suitable" 构建,因为在 TeamCity 跟踪器中 documentation is not clear for situation with no VCS root attached to build configuration, but it works. In any case there is a question。
所以,C的build.counter只有在"B"排队时才会递增。
当 "A" 单独启动时,它使用默认 build.number
.
P.S。感谢 Nikita Skvortsov 将我作为解决方案的目标。