大纲
- runner的搭建
- 异常
- 乱码
- checkout的问题
- GitDependencies
- vs 2019的编译日志输出到ci
runner的搭建
按照wiki的说明搭建基本的runner
异常

- 长路径
https://docs.microsoft.com/zh-cn/windows/win32/fileio/naming-a-file#maximum-path-length-limitation
打开注册表(使用cmd regedit打开)将以下值改为 1 即可!
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled (Type: REG_DWORD)
因为使用的是CI,还需要对git runner进行处理
before_script:
- git config --system core.longpaths true
乱码
[[runners]]
executeer = "shell"
shell = "powershell"
pre_clone_script = "chcp 65001"
pre_build_script = "chcp 65001"

checkout的问题
防止ci每次对已经Setup完成的项目进行清理
variables:
GIT_STRATEGY: fetch
GIT_CHECKOUT: "false"
GitDependencies
在执行setup.bat的时候,会遇到File.Create字符长度超260的异常,,经过n轮查找,是File.cs中已经对useLongPath = false了;所以最简单的方法是将全路径改短;(我这里最大长度是264,刚好改一下文件后缀就可以了!)
在ue的源码中,找到{源码}\Engine\Source\Programs\GitDependencies工程的Program.cs文件,找到const string IncomingFileSuffix = ".incoming";改成以下这样后重新编译生成GitDependencies.exe,
IncomingFileSuffix = ".b";
将生成的GitDependencies.exe【位置在\Engine\Source\Programs\GitDependencies\bin\Development下】;覆盖到\Engine\Binaries\DotNET下就可以了!
补充
咨询了一下ue的大佬,在修改windows的长路径支持后,在Unreal Editor下也开启长路径支持就可以了!

在注册表中找到一下的路径,将这个值改为1即可
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled (Type: REG_DWORD)
在Unreal Editor的Editor Preferences中开启Enable Support for long paths 就可以(未测试,但是大佬说可以,那就应该是没有问题!)
但是以上这种都是需要有视图的,我不可能打开远程打包机器改配置吧?所以还是需要能通过改配置文件的形式修改!
Engine\Config\BaseEditorPerProjectUserSettings.ini
[/Script/UnrealEd.EditorExperimentalSettings]
bEnableLongPathsSupport=True
如果是项目性质的,就可以在Saved\Config\Windows\EditorPerProjectUserSettings.ini下
[/Script/UnrealEd.EditorExperimentalSettings]
bEnableLongPathsSupport=True
vs 2019的编译日志输出到ci
直接使用devenv.exe是不能输出到console的,必须要是用devenv.com才可以!
variables:
VS_PATH: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/IDE/devenv.com"
...
script:
- echo $VS_PATH
- echo $CI_PROJECT_DIR
- "& \"$VS_PATH\" \"${CI_PROJECT_DIR}/UE4.sln\" \"/build\" \"Development Editor|Win64\" \"/Project\" \"UE4\""
- echo "UE_Build Finish"
到此位置,已经全部流程跑完,已经没有问题了!