1

假设我有三个工作,A、B 和 C。它们都运行相互交互的集成测试。C依赖于B,B依赖于A。

当 SCM 轮询触发三个项目中的任何一个时,有没有办法按顺序触发 A,然后是 B,然后是 C?

例如,我将代码签入 A,几分钟后,我将代码签入 C。我需要先构建 A,然后构建 B 以运行集成测试,然后构建 C。但我无法通过传统的轮询间隔来保证这一点。

我查看了参数化构建插件,但如果没有无限循环的构建,我无法找到一种方法。

编辑:下面的答案似乎是最好的选择,但我正在使用 Mercurial 并且找不到检查多个 Mercurial 存储库的方法。

4

2 回答 2

2

诚然这是一个陈旧的问题,但如果您仍在处理这个问题(或者其他人遇到这个问题,就像我在搜索类似问题时所做的那样),我有一个替代方案:

  • Job A1 - 轮询 repo A 但不同步,触发 Job A2
  • Job B1 - 轮询 repo B 但不同步,触发 Job A2
  • Job C1 - 轮询 repo C 但不同步,触发 Job A2
  • Job A2 - 当前的 Job A,触发 Job B2
  • Job B2 - 当前的 Job B,触发 Job C2
  • 作业 C2 - 当前作业 C

“不同步”可能不是必需的(它只会在相关作业上再次同步),但会保留当前链的确切功能。

于 2014-08-05T02:10:17.500 回答
1

一种方法是将作业 A 配置为始终触发作业 B,将作业 B 配置为始终触发作业 C。这将确保它们按您需要的顺序运行。

现在,您希望对 3 个作业中的任何一个进行 SCM 更改以启动该链。在 Job A 中,您可以对所有 3 个存储库位置进行 SCM 签出(只是不要在 Job A 中使用它们)。

这样,轮询将适用于所有 3 个位置,将触发 Job A 进而触发您想要的正确链

于 2013-01-15T14:17:56.457 回答