目标

在之前关于Jenkins的基础使用的博客中,建立的第一条流水线就是向控制台输出了“Hello world”信息,不过当时是在流水线脚本中加入了echo 'Hello world!'实现的。而我想,在Jenkins调用exe时,exe也是很需要反馈信息的。我确定这一功能定能达到,只是不清楚具体的方法。 因此,我现在想用Jenkins调用普通的C++程序,还有之前在尝试UE4Commandlet的博客中用到的Commandlet,看怎样能成功输出信息到Jenkins的控制台输出中。

普通C++程序

对于普通的C++程序,用 std::cout 可以直接在控制台界面中看到信息,而 OutputDebugString 可以在VS的输出窗口中输出信息,我想看下二者能否输出信息到Jenkins中。
于是,我写了以下小代码:

#include<iostream>
#include<Windows.h>   
using namespace std;
int main()
	cout << "log with cout TestA" << endl;
	OutputDebugString(L"log with OutputDebugString TestA\n");
	return 0;
}

最后能在控制台窗口和VS的输出窗口中看到输出:

jenkins java控制面板 jenkins把控制台输出到文件_#include


下面需要让Jenkins调用他们。为了省事,我直接使用了之前那篇博客里那个调用两个exe的流水线,当然,把两个exe换成了上面的exe(第二个exe是上面代码将TestA字符串换成了TestB字符串)。

之后点击Build,然后看控制台输出:

jenkins java控制面板 jenkins把控制台输出到文件_Jenkins_02


发现只有 log with cout 信息。这说明:

std::cout 可以在Jenkins的控制台输出面板输出信息。

OutputDebugString 不可以。

UE4 Commandlet

为了省事,我直接使用了尝试UE4Commandlet的博客中用到的Commandlet做测试。不过Jenkins流水线就需要重新写了,脚本如下:

pipeline 
   agent any
   stages 
      stage('stage1') 
         steps 
            bat '"D:/Epic Games/UE_4.24/Engine/Binaries/Win64/UE4Editor-Cmd.exe" D:/0_WorkSpace/UE4/test2/test2.uproject -run=YaksueTest'
}

之后Build,控制台输出如下:

jenkins java控制面板 jenkins把控制台输出到文件_Jenkins_03


这个 Hello Yaksue 是在代码中用 UE_LOG 宏输出的信息

UE_LOG(TestLog, Display, TEXT("Hello Yaksue!"));

总结

目前看来,似乎只要是能在控制台程序的窗口中打印出的信息,就也会在Jenkins的控制台输出页面看到。
(实际上我现在对 控制台输出 的本质还没有很深的理解,或许二者源头上是一样,因此上面的结论根本就不需要实验?)