Continuous integration 将环境变量(参数)传递给TeamCity中的依赖项项目

Continuous integration 将环境变量(参数)传递给TeamCity中的依赖项项目,continuous-integration,environment-variables,teamcity,Continuous Integration,Environment Variables,Teamcity,我有一个包含两个项目的构建链:a是根项目,B依赖于它。B配置了两个依赖项:工件和快照依赖项。B的一个生成配置设置了环境变量(参数)。但是,我还需要为根项目A设置此参数 TeamCity 9中是否有任何方法可以将构建配置参数从项目传递到其依赖项(在同一构建链中)?对于TeamCity 8及以下版本,不幸的是,传递参数的唯一方法是沿着构建链的方向-与您想要的相反-这些属性被称为: 依赖项属性 这些属性由当前生成所依赖的生成提供 打开(通过快照或工件依赖项) 依赖项属性具有以下格式: dep. 依赖项

我有一个包含两个项目的构建链:a是根项目,B依赖于它。B配置了两个依赖项:工件和快照依赖项。B的一个生成配置设置了环境变量(参数)。但是,我还需要为根项目A设置此参数


TeamCity 9中是否有任何方法可以将构建配置参数从项目传递到其依赖项(在同一构建链中)?

对于TeamCity 8及以下版本,不幸的是,传递参数的唯一方法是沿着构建链的方向-与您想要的相反-这些属性被称为:

依赖项属性

这些属性由当前生成所依赖的生成提供 打开(通过快照或工件依赖项)

依赖项属性具有以下格式:

dep.

依赖项属性从树的根流向树的叶(沿着构建链流的方向),但不是相反,因此可以在B中访问A的属性

文件中对此进行了澄清:

相关生成中的参数

TeamCity提供了使用构建提供的属性的能力 当前构建取决于(通过快照或工件依赖关系)。 当生成A依赖于生成B时,可以从生成B传递属性 要构建,即属性只能在 构建链流,而不是相反。有关如何使用的详细信息 上一个内置链的参数,请参考依赖项 属性页

我以前也有过类似的反向流用例-解决方法不太好-基本上不是直接触发构建链,而是触发一个独立的构建(我们称之为X),该构建仅用于保存构建参数-然后修改构建链以拥有根构建(在您的案例中为a)依赖于X的上一次成功构建,并在X的成功构建上触发构建链-这应该实现您想要的


关于TeamCity 9,请参见@Alina的答案(这应该是公认的答案)。

自TeamCity 9.0以来,可以通过在相关版本中重新定义它们:

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

嗯,我想你是对的,文档确认这只适用于构建链的方向。因此,我最终将A的构建配置复制到另一个配置中,在其中设置变量,并将其用作B的依赖项。woa-不知道这一点-很好。这就是你想要的@MatthiasE.g。要将环境变量
env.myvariable
传递给依赖快照,请在根配置中创建一个名为:
reverse.dep.*.env.myvariable
(可以选择使用特定的生成id替换通配符)的配置变量,其中一个问题是确保没有在依赖项上设置所需的变量。也就是说,如果根目录中有reverse.dep.*.env.myvariable(在我的例子中是一个发布版本),请确保依赖项(在我的例子中是一个单元测试版本)中没有设置env.myvariable。使用它来更新快照依赖项中正在生成的分支,有没有运气?我的情况是:A依赖于B(快照依赖),B依赖于C(快照和工件依赖)。当我运行A时,需要更改在B&C的VCS根目录中选择的分支。我已尝试在表单
reverse.dep..teamcity.build.vcs.branch.
的依赖配置(a)中添加
reverse.dep
,但这对我不起作用。依赖项仍然会被其附加的VCS根目录的默认分支触发。我设法找到了解决上述问题的方法:我使用了
reverse.dep..teamcity.build.VCS.branch.
,而不是使用
reverse.dep..teamcity.build.branch
。这正如预期的那样工作-即使B的构建配置连接了两个VCS根!我仍然想知道为什么第一种方法,看起来更明确,不起作用。有人知道为什么吗?