让CruiseControl.NET在显示“时使用长时间运行任务的输出”;活动“;

让CruiseControl.NET在显示“时使用长时间运行任务的输出”;活动“;,cruisecontrol.net,ccnet-config,Cruisecontrol.net,Ccnet Config,在中,我设置了两个项目,一个用于构建,另一个用于部署构建包 我们的构建很大程度上基于此,当它运行时,仪表板会不断使用构建的最新输出进行更新。这意味着,即使一个完整的构建可能需要15分钟,您也可以确切地看到它在哪里,并且它正在取得进展 部署是使用另一个工具(VisualBuild)运行的,尽管我看到了与其他工具(如PowerShell)相同的基本行为。这是另一个长期运行的任务,但在本例中,仪表板在运行过程中不会使用其输出进行更新。由于部署可能需要很长时间,因此很难判断事情是否正在进展,或者是否已经

在中,我设置了两个项目,一个用于构建,另一个用于部署构建包

我们的构建很大程度上基于此,当它运行时,仪表板会不断使用构建的最新输出进行更新。这意味着,即使一个完整的构建可能需要15分钟,您也可以确切地看到它在哪里,并且它正在取得进展

部署是使用另一个工具(VisualBuild)运行的,尽管我看到了与其他工具(如PowerShell)相同的基本行为。这是另一个长期运行的任务,但在本例中,仪表板在运行过程中不会使用其输出进行更新。由于部署可能需要很长时间,因此很难判断事情是否正在进展,或者是否已经停止。输出将被记录到CruiseControl.NET日志中,并将在事情完成后显示在仪表板上,但不会在部署过程中显示


有没有一种方法可以从仪表板上更新的其他任意长时间运行的任务中获得类似于实时的输出?MSBuild在这方面的特殊之处是什么?

CruiseControl.Net自1.4版以来,包括以下支持:它是一种允许通过读取日志文件跟踪长时间运行任务执行的机制。虽然这种机制是通用的,并且可以与任何工具一起使用,但是CruiseControl.Net本身只附带和的构建侦听器(这意味着对于这两种工具,进度是自动报告的,无需额外配置)

对于由
任务调用的外部工具(如VisualBuild),您必须插入自己的记录器,以创建一个简单的进度文件:

<data>
  <Item Time="2007-10-14 08:43:12" Data="Starting Build timetester" />
  <Item Time="2007-10-14 08:43:16" Data="Starting Target build" />
  <Item Time="2007-10-14 08:43:16" Data="Sleeping for 5000 milliseconds." />
</data>


CCNetListenerFile
环境变量所指向的位置。

我怀疑这可能只是Visual Build写入日志文件的方式不同而已。。。(例如,它保持文件打开,而不是在每次写入后实际刷新到磁盘)