1987WEB视界-分享互联网热门产品和行业

您现在的位置是:首页 > WEB开发 > 正文

WEB开发

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

1987web2023-10-06WEB开发94
最近搞了Jenkins备份,在一台新机器上安装部署Jenkins。安装完成后打包报错,如下:

最近搞了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_thread15: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文件夹,看到这里想起来自己以前写得一篇文章,分析了重定向,不再赘述,点击链接可查看详情,和本问题有关的要点如下:

  1. xgConsole.exe是32bit进程,访问system32会被重定向到syswow64
  2. 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现在是真的懂了。