5

仅当父级成功完成并且有更改(更改推送到 scm)时,我如何才能触发参数化构建?

这是一个场景:我有 3 个构建:A、B 和 C。如果 B 被 A 调用或它有更改,则将构建 B。只有当 B 成功完成并且 B 是因为 scm 更改而不是因为它是由 A 触发而构建时,才应该构建 C

谢谢

4

1 回答 1

15

添加到A:

构建后操作在其他项目上触发参数化构建:

  • 建设项目:B
  • 构建时触发:完成(始终触发)
  • 添加参数预定义参数: A_HAS_BEEN_BUILT=YES

添加到 B:

元数据→ [✔] 此构建已参数化 →添加参数字符串参数:

  • 姓名:A_HAS_BEEN_BUILT
  • 默认值:NO

构建后操作在其他项目上触发参数化构建:

  • 建设项目:C
  • 构建时触发:稳定[反正默认]
  • 添加参数预定义参数: A_HAS_BEEN_BUILT=${A_HAS_BEEN_BUILT}

添加到 C:

元数据→ [✔] 此构建已参数化_ →添加参数字符串参数:

  • 姓名:A_HAS_BEEN_BUILT
  • 默认值:NO

构建添加构建步骤条件步骤(单个):

  • 跑?:不是
  • !:正则表达式匹配
    • 表达:^YES$
    • 标签:${ENV,var="A_HAS_BEEN_BUILT"}
  • 建设者:...根据您的需要...


请参阅参数化构建参数化触发器插件运行条件插件。

更新 1

上面给出的设置会导致以下内容:

  1. A 构建 → B 构建 → B 稳定 → C 开始,但未构建
  2. B 轮询 SCM → SCM 更改 → B 构建 → B 稳定 → C 构建

根据讨论,目的如下:

  1. A 构建 → B 构建
  2. B 轮询 SCM → SCM 更改 → B 构建 → B 稳定 → C 构建

更新 2

为了防止 C 在 1 处被触发:

  • 为 B 创建一个轮询 SCM 并触发 B 的上游项目

  • 在 B 中配置以下内容:

    源代码管理→ ◉ 无

    构建触发器

    • [ ] 轮询单片机


    构建添加构建步骤条件步骤(单个):

    • 运行?:执行 shell / 执行 Windows 批处理命令
      • 命令:...单片机校验命令;在没有 SCM 更改的情况下设置退出状态 / ERRORLEVEL 大于 0 ...
    • 构建器:触发/调用其他项目的构建
      • 构建触发器
        • 建设项目:C
于 2015-07-18T14:51:37.640 回答