我们使用 jenkins 构建 Visual Studio 2008 C++ 项目的自动化。本质上,它是一系列调用:
devenv solution_name /build configuration_name [/Project project_name]
一般情况下效果很好。
为了在 dos 框中运行所有内容,我编写了一个 scala 包装器,它与 ProcessBuilder 相同。它可以工作,但我有问题,控制台上没有输出。
我的猜测:devenv 启动了一堆进程来并行编译和链接项目。我的scala程序只输出devenv进程的stdout和stderr,没有。子流程的所有其他输出都被射入涅槃。
为了完整起见,源代码段:
def buildProject(branch: String, mode: Mode) = {
import scala.sys.process._
val lb = new ListBuffer[String]()
lb.append("devenv")
lb.append(solution)
lb.append(mode.cmd)
lb.append(config.asString)
if (!"".equals(project))
lb.append(project)
val printLogger = ProcessLogger(line => println(line), line => println(line))
val errorLevel = Process(lb.toList, new File(branch, work.sv)) ! printLogger
if (errorLevel != 0)
throw new RuntimeException("Project build failed.")
}
用于启动该过程的列表如下所示:
List(devenv, Libraries/Libraries.sln, /rebuild, Release)
有没有办法记录/输出子流程的输出?