UE4构建基础和实践:五、CI/CD平台自动化打包

发布时间 2023-07-24 12:17:09作者: 寡人正在Coding

序言

使用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)脚本

概览

image

  • 触发方式&参数配置
  • 构建Android
  • 构建Windows
  • 构建完成企微通知

参数配置

image

构建

image
使用Batch Scripts任务节点运行工作空间下的构建脚本

构建结果

image
可以看到和本地构建一样打出了两个包

结语

这些打包脚本执行了最基本的打包任务,实际项目中会复杂一些,可能会包含一些其他操作(参考第一章附录):

  • 拉取各个仓库,如项目工程、美术资产、引擎等
  • 处理资源,如转资源,处理表格、协议、DB等
  • 版本号处理
  • 构建结果归档上传
  • ...