在TeamCity 9中,我有两个构建配置:A,B依赖于A(快照依赖性)。有时A单独开始,有时与B链。
当A触发A时,我想将A的build.number
更改为(例如)0.<build.counter of B>
。
根据docs:
自TeamCity 9.0以来,有可能覆盖 依赖项参数通过在依赖构建中重新定义它们。对于 例如,构建配置A取决于B和B取决于C; A有 能够使用。更改任何依赖项中的参数 格式如下:
reverse.dep.<btID>.<property name>
好的,我在B中创建了配置参数:reverse.dep.A.build.number
= 0.%build.counter%
。
所以,当我启动构建链时,我认为A的 build.number 将更改为0.123
(例如,B的 build.counter 等于123) ,而是将字符串 0.%build.counter%
传递给A,A使用自己的属性build.counter
。
如何准确传递TeamCity参数的值?
答案 0 :(得分:4)
到时候&#34; A&#34;建立开始,&#34; B&#34; build仍然在队列中,因此没有可用的内部版本号。 %build.number%参数无法解析并按字面意思传递。
尝试创建&#34; C&#34;配置并在其上添加快照依赖关系(来自A和B)。将A和B中的内部版本号格式设置为%dep.C.system.build.number%
这样你就可以让A和B共享同一个计数器。
答案 1 :(得分:2)
考虑问题
无法使用reverse.dep.
语法将值传递给依赖关系构建。
reverse.dep参数值按原样向下传递依赖链。
(从这里:https://youtrack.jetbrains.com/issue/TW-40772)
考虑问题
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”将始终使用“合适”的“C”构建(“C”没有附加VCS根)。
注意:它至少应该是“C”的完成版本
注意:在所有情况下我都不确定“合适”的构建,因为documentation对于没有VCS root附加到构建配置的情况不明确,但是它有效。无论如何,TeamCity跟踪器中都有question。
因此,只有当“B”排队时,C的build.counter才会递增。
当“A”单独启动时,它使用默认build.number
。
P.S。感谢Nikita Skvortsov让我找到解决方案。