目标
在之前关于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调用他们。为了省事,我直接使用了之前那篇博客里那个调用两个exe的流水线,当然,把两个exe换成了上面的exe(第二个exe是上面代码将TestA字符串换成了TestB字符串)。
之后点击Build,然后看控制台输出:
发现只有
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,控制台输出如下:
这个
Hello Yaksue
是在代码中用
UE_LOG
宏输出的信息
UE_LOG(TestLog, Display, TEXT("Hello Yaksue!"));
总结
目前看来,似乎只要是能在控制台程序的窗口中打印出的信息,就也会在Jenkins的控制台输出页面看到。
(实际上我现在对
控制台输出
的本质还没有很深的理解,或许二者源头上是一样,因此上面的结论根本就不需要实验?)