使TeamCity始终发布工件

使TeamCity始终发布工件,teamcity,Teamcity,我很惊讶我找不到任何关于这个的文档,但无论如何 有时候,我的团队城市建设挂起,我最终需要停止它。构建过程在磁盘上生成多个日志文件,然后TeamCity将这些文件发布为构建工件。但是,如果我停止构建,TeamCity将拒绝发布日志: Build was interrupted. Artifacts will not be published for this build 这些文件仍然存在于磁盘上,只是TeamCity不再发布它们了。这尤其令人恼火,因为我真的,真的需要看看那些日志中有什么,这样我

我很惊讶我找不到任何关于这个的文档,但无论如何

有时候,我的团队城市建设挂起,我最终需要停止它。构建过程在磁盘上生成多个日志文件,然后TeamCity将这些文件发布为构建工件。但是,如果我停止构建,TeamCity将拒绝发布日志:

Build was interrupted. Artifacts will not be published for this build
这些文件仍然存在于磁盘上,只是TeamCity不再发布它们了。这尤其令人恼火,因为我真的,真的需要看看那些日志中有什么,这样我就可以找出构建挂起的原因

是否有某种方法可以强制TeamCity始终发布构建工件,即使我必须中止构建

(我已经看到了几个问题,询问如何在构建失败时停止TeamCity发布工件,因此我有点困惑,为什么我的安装程序还没有这样做,但无论如何……)


另外,我意识到我可以手动登录到构建服务器来查看日志,但TeamCity的全部目的是为我自动化类似的东西…

TeamCity无法发布停止的构建,这与失败的构建不同。停止的构建更像是一个终止的进程,而失败的构建则是一个非零退出代码

相反,我建议您配置TeamCity,这样您就不必停止构建。有两个选项可启用:和“”生成失败条件。这两种方法都可以帮助TeamCity自动终止构建,而不必停止构建


这样,您将得到一个失败的生成,而不是停止的生成,您的工件应该发布。

我认为启用挂起的生成检测通常是一个好主意(您可以在一个生成上设置一个失败条件,完成时间超过n分钟),但是,如果您对最终停止/挂起的构建到目前为止所创建的工件感兴趣,以下内容可能会很有用:

您可以输出以立即发布工件。当构建停止时,这些工件也将保持可用。例如:

##teamcity[publishArtifacts '/tmp/logfile => logs']
这将确保文件
/tmp/logfile
发布到artifacts目录
logs


另一个优点是,您可以立即在构建的“工件”选项卡上获得这些工件,这有助于决定是否应取消构建。

这是否是构建的最后一个“命令行”步骤
使用选项“始终执行步骤,即使发出了生成停止命令”

哪个将输出发布工件指令

其实有一个办法。您可以在上一个构建步骤的帮助下发布工件,例如,使用以下元运行程序:。对于这个构建步骤,您可以将执行策略设置为“始终,即使发出了构建停止命令”。挂起构建检测听起来像是我想要的。我猜接下来的问题是“当最后50次跑步都花了半个小时时,我如何阻止TeamCity估计我的构建将花费17秒?”这是一个值得考虑的想法。然而,我所关注的工件是日志文件,这些文件一直写到构建的最后。我不完全确定Linux文件访问语义,但是提前发布日志不就意味着我得到了一份不完整的副本吗?文档中说“应该在所有文件准备好并且没有文件被锁定读取后打印消息”。我认为,当构建没有挂起或停止时,您应该能够最终(重新)发布完整的日志文件,并且使用不同的工件名称(请参阅工件路径上的文档)。但是您通常无法获取“直到挂起活动”的日志内容,因为您需要先输出服务消息才能发布日志文件。