在TeamCity 9中按参数值覆盖依赖项属性

Gen*_*lph 5 teamcity dependencies

在TeamCity 9中,我有两个构建配置:A,B依赖于A(快照依赖性).有时A单独开始,有时与B链接.我想在A触发A时将A 更改build.number为(例如)0.<build.counter of B>

根据文件:

从TeamCity 9.0开始,可以通过在依赖构建中重新定义它们来覆盖依赖项参数.例如,构建配置A取决于B,B取决于C; A可以使用以下格式更改其任何依赖项中的参数:

reverse.dep.<btID>.<property name>

好的,我在B:reverse.dep.A.build.number=中创建了配置参数0.%build.counter%.因此,当我启动构建链时,我认为build.number将更改为0.123(例如,B的build.counter等于123),但是字符串 0.%build.counter%已经传递给A而A使用了自己的属性build.counter.

如何准确传递TeamCity参数的值?

Gen*_*lph 2

考虑问题
没有办法使用reverse.dep.语法将值传递给依赖项构建。

verse.dep 参数值按原样沿依赖链传递。

(从这里: https: //youtrack.jetbrains.com/issue/TW-40772


考虑问题

  1. 创建配置“C”
  2. 使用“如果有合适的则不要运行新构建”选项从“A”添加到“C”快照依赖项
  3. 从“B”添加到“C”快照依赖项,无需相同的选项。
  4. reverse.dep.A.use_C_number通过=将参数从“B”传递到“A” true,这样“A”就知道要使用哪个计数器。
  5. 在“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']"
    }
    
    Run Code Online (Sandbox Code Playgroud)

在这种情况下,“C”将仅由“B”触发,而不会由“A”触发,因为“A”将始终使用“C”的“合适”版本(“C”没有附加 VCS 根)。
注意:它应该至少是一个已完成的“C”版本。
注意:我不确定所有情况下的“合适”构建,因为对于没有附加到构建配置的 VCS 根的情况,文档不清楚,但它可以工作。无论如何,TeamCity 跟踪器中都会出现问题

因此,只有当“B”排队时,C 的 build.counter 才会递增。当“A”单独启动时,它使用 default build.number

PS 感谢 Nikita Skvortsov 为我提供了解决方案。