在TeamCity 9

时间:2015-04-22 10:55:04

标签: dependencies teamcity

在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参数的值?

2 个答案:

答案 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

考虑问题

  1. 创建配置“C”
  2. 从“A”添加到“C”快照依赖项“如果有合适的选项,请不要运行新版本”选项
  3. 从“B”添加“C”快照依赖项,不带相同选项。
  4. 通过reverse.dep.A.use_C_number = true将参数从“B”传递到“A”,因此“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']"
    }
    
  6. 在这种情况下,“C”将仅由“B”而不是“A”触发,因为“A”将始终使用“合适”的“C”构建(“C”没有附加VCS根)。
    注意:它至少应该是“C”的完成版本 注意:在所有情况下我都不确定“合适”的构建,因为documentation对于没有VCS root附加到构建配置的情况不明确,但是它有效。无论如何,TeamCity跟踪器中都有question

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

    P.S。感谢Nikita Skvortsov让我找到解决方案。