首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何停止构建--但不是构建链--如果工件是相同的

如何停止构建--但不是构建链--如果工件是相同的
EN

Stack Overflow用户
提问于 2015-09-29 14:33:47
回答 2查看 203关注 0票数 0

我有一个问题的建设计划,在一个建设链,真的困扰我。

我有一个简单的构建链A -> B

  • A非常快(不到一分钟)--它基本上是从生产系统中检索数据库。在处理完成之前,无法判断得到的工件是否与先前的结果相同。当前的构建时间计划。
  • B是非常慢的(5-6小时)--它将来自A的输出加上许多其他的源组合成大量的工件。目前,它对A有快照依赖,也有对其他源的依赖。

我想避免运行B,除非需要--即,如果对B的任何输入发生了变化--但是我如何做到这一点?

如果检测到结果没有变化,我可以失败/取消A,但这将导致B的“快照依赖故障”,所以如果B的任何其他输入源确实更改,它将不会重建结果.

是否有任何方法来停止或中止A的生成,这样B的生成就不会被触发?

编辑:我(可能)有一个想法:我可以让A检查在SCM中产生的工件--如果它不同于以前的版本--并让它驱动B的触发器--B已经在SCM中有许多其他来源。据我所见,它不会是同一个构建链的一部分,但它是第二个最好的东西.

EN

回答 2

Stack Overflow用户

发布于 2015-09-29 16:29:34

我不这样认为。TeamCity中的构建链是静态的。

有两种可能的解决办法

  1. 写一个插件来处理这个案子。它将是一个服务器端插件,当B排队时,它将在buildTypeAddedToQueue(SQueuedBuild queuedBuild)事件上启动。它会做一些环顾四周(比较工件),并立即从队列中删除B。
    • 我相信这将表现为B被排队,然后由用户退出排队。也就是说,从队列中删除构建是一种支持的TC操作,这并不像看上去那么麻烦。
    • 可能比你希望的还要辛苦..。

  1. 在B. 中处理这个问题
    • 这可能要简单得多,但我假设您想要避免这种情况。

我认为您最好在A内处理这个问题,所以#2不是一种选择。第一步接近了,当然,它更多的是涉及。

票数 1
EN

Stack Overflow用户

发布于 2015-09-29 17:46:03

我想它应该跳过A重建,并使用最近的一个,如果新的潜在的A的建设将是相同的一些最近的。例如,请求具有相同VCS修订版和相同设置的依赖构建A不应该再次触发生成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32846765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档