UE构建基础和实践:五、CI/CD平台自动化打包
序言
使用CI/CD平台构建(这里使用蓝盾平台)主要是通过平台脚本运行上一章的py脚本并传递参数(即把py中的参数开放给配置平台脚本配置)。
Build.py 重构
我们需要在py脚本里面解析和设置参数
import sys
import os
import getopt
def main(argv):
ProjectName = ""
ProjectDir = ""
Unrealexe = ""
Platform = ""
ClientConfig = ""
SkipBuildProject = ""
SkipBuildEditor = ""
UATDir = ""
script = ""
EditorIOPort = "54689"
target = "MyBuild"
OutputDir = ""
opts = ""
try:
opts, _ = getopt.getopt(argv, "", ["enginedir=", "projectname=", "projectdir=", "tooldir=", "platform=", "buildcfg=", "skipeditor=", "skipproject="])
except getopt.GetoptError:
print("Build.py argv err!")
for opt, arg in opts:
if opt == "--enginedir":
Unrealexe = rf"{arg}\Engine\Binaries\Win64\UnrealEditor-Cmd.exe"
UATDir = rf"{arg}\Engine\Build\BatchFiles\RunUAT.bat"
if opt == "--projectname":
ProjectName = arg
if opt == "--projectdir":
ProjectDir = arg
if opt == "--tooldir":
script = rf"{arg}\Build.xml"
OutputDir = rf"{arg}\Result"
if opt == "--platform":
Platform = arg
if opt == "--buildcfg":
ClientConfig = arg
if opt == "--skipeditor":
SkipBuildEditor = arg
if opt == "--skipproject":
SkipBuildProject = arg
cmd = f"-set:ProjectName={ProjectName} -set:ProjectDir={ProjectDir} -set:Platform={Platform}" \
f" -set:ClientConfig={ClientConfig} -set:OutputDir={OutputDir} -set:SkipBuildProject={SkipBuildProject}" \
f" -set:SkipBuildEditor={SkipBuildEditor} -set:Unrealexe={Unrealexe} -set:EditorIOPort={EditorIOPort}"
cmd = f"{UATDir} BuildGraph -Script={script} -Target={target} {cmd}"
print(f"cmd: {cmd}")
ret = os.system(cmd)
if ret == 0:
print(f"run build ret val = {ret}")
else:
raise Exception("project build faild!")
if __name__ == "__main__":
main(sys.argv[1:])
input("build succ")
如代码所示,我们把上一章写死的参数变成根据传入参数进行配置。
Build.bat重构
@echo Build.bat Run
python3 Build.py %*
%*
表转发参数
蓝盾(CI/CD)脚本
概览
- 触发方式&参数配置
- 构建Android
- 构建Windows
- 构建完成企微通知
参数配置
构建
使用Batch Scripts
任务节点运行工作空间下的构建脚本
构建结果
可以看到和本地构建一样打出了两个包
结语
这些打包脚本执行了最基本的打包任务,实际项目中会复杂一些,可能会包含一些其他操作(参考第一章附录):
- 拉取各个仓库,如项目工程、美术资产、引擎等
- 处理资源,如转资源,处理表格、协议、DB等
- 版本号处理
- 构建结果归档上传
- ...