ainatipen 发表于 2022-6-13 19:26

Jenkins使用Incredibuild构建UE4项目踩坑记录

最近搞了Jenkins备份,在一台新机器上安装部署Jenkins。安装完成后打包报错,如下:
15:22:43   Running: D:\IncrediBuild\xgConsole.exe "C:\windows\system32\config\systemprofile\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+UE4+UE4\BuildCookRun\UAT_XGE.xml" /Rebuild /NoLogo /ShowAgent /ShowTime /no_watchdog_thread
15:22:43   Fatal Error: File not found: C:\windows\system32\config\systemprofile\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+UE4+UE4\BuildCookRun\UAT_XGE.xml报错信息很明显,UAT_XGE.xml文件找不到。奇怪的是我这个文件明明就在那里,xgConsole.exe却找不到。于是使用procmon.exe监视UAT_XGE.xml访问记录,发现打开的路径为:
C:\windows\sysWoW64\config\systemprofile\AppData\Roaming\Unreal Engine\AutomationTool\Logs\C+UE4+UE4\BuildCookRun\UAT_XGE.xml注意其中加粗字体,访问的是syswow64文件夹,看到这里想起来自己以前写得一篇文章,分析了重定向,不再赘述,点击链接可查看详情,和本问题有关的要点如下:

[*]xgConsole.exe是32bit进程,访问system32会被重定向到syswow64
[*]unrealbuildtool.exe是64bit进程,生成UAT_XGE.xml时system32不会发生重定向
基于以上两点,我们算是知道了为什么xgConsole访问不到UAT_XGE.xml了,那么根本原因是什么呢?
仔细看路径,在AppData\Roaming下,该路径一般是APPDATA环境变量控制的。由于unrealbuildtool和xgconsole进程均由jenkins拉起,所以可以查看jenkins进程的APPDATA环境变量,使用procexp.exe查看环境变量如下:
APPDATA        C:\windows\system32\config\systemprofile\AppData\Roaming可以看见jenkins的APPDATA就是指向了这里。为什么APPDATA没在C:\Users\Administrator\AppData\Roaming下呢?
经过一番摸索,我找到了问题。jenkins运行的账户是SYSTEM,那APPDATA就会在system32下,如果运行账户是Administrator,APPDATA就不在system32下了,就不会发生重定向了。
找到原因就好了,如何更改这个账户呢?
其实很简单,在安装jenkins的时候,有这样一步:


只要选择下面这个选项就不会用SYSTEM账户启动服务了,如果下面这个选项无法测试通过,需要组策略里修改一下,允许该用户运行服务即可。
问题搞定,安装时因为偷懒选择了Run service as LocalSystem,最后却花费了更多时间来解决遇到的问题,not recommended现在是真的懂了。

super1 发表于 2022-6-13 19:33

这破烂居然还有 Windows 版本

DomDomm 发表于 2022-6-13 19:34

这破烂我用了好多年。有windows下更好的推荐吗?

DomDomm 发表于 2022-6-13 19:41

没用过 Windows 下面的。任何一个 CI 都肯定比 Jenkins 好
页: [1]
查看完整版本: Jenkins使用Incredibuild构建UE4项目踩坑记录