我们使用jenkins进行Visual Studio 2008 C ++项目的构建自动化。 从本质上讲,这是一系列的调用:
devenv solution_name /build configuration_name [/Project project_name]
一般来说效果很好。
为了从dos框中运行所有内容,我编写了一个scala包装器,它与ProcessBuilder一样。它有效,但我有问题,控制台上没有输出。
我的猜测:devenv启动了一系列进程来编译和并行处理项目。我的scala程序只输出devenv进程的stdout和stderr,它是none。子进程的所有其他输出都被射入了必杀技。
为了完整性而源代码片段:
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)
有没有办法记录/输出子流程的输出?