Приобретение CruiseControl.NET для использования вывода из долговременной задачи при отображении "Активность"

В CruiseControl.NET, у меня есть два проекта: один для построения и один для развертывания пакетов сборки.

Наша сборка в основном основана на MSBuild, и по мере ее запуска панель инструментов постоянно обновляется с последним результатом сборки. Это означает, что даже если полная сборка может занять 15 минут, вы можете точно увидеть, где она находится, и что она продвигается вперед.

Развертывание выполняется с помощью другого инструмента (VisualBuild, хотя я вижу такое же основное поведение с другими инструментами, как PowerShell). Это еще одна долговременная задача, но в этом случае панель управления не обновляется с ее выходом по мере ее продвижения. Поскольку развертывание может занять много времени, трудно сказать, что происходит, или что-то застопорилось. Выход регистрируется в журнале CruiseControl.NET и будет отображаться на панели управления, когда все будет сделано, но не во время развертывания.

Есть ли способ получить результат от других произвольных длительных задач, обновленных на панели управления, в чем-то напоминающем реальное время? Что делает MSBuild особенным в этом отношении?

Ответ 1

CruiseControl.Net, начиная с версии 1.4, включает поддержку сборщик файлов: это механизм, который позволяет отслеживать выполнение длительных задач путем чтения из файла журнала. Хотя этот механизм является общим и может использоваться с любым инструментом, CruiseControl.Net сам по себе поставляется только с встроенными прослушивателями для MSBuild и NAnt (это означает, что для этих двух инструментов прогресс сообщается автоматически, без необходимости дополнительной настройки).

Для внешнего инструмента, такого как VisualBuild, вызванного <exec> задачей, вам придется подключить собственный журнал, который создает простой файл прогресса:

<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.