首页 > 其他分享 >UE4构建基础和实践:五、CI/CD平台自动化打包

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

时间:2023-07-24 12:23:16浏览次数:37  
标签:opt CI set -- CD 构建 Build arg UE4

序言

使用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等
  • 版本号处理
  • 构建结果归档上传
  • ...

标签:opt,CI,set,--,CD,构建,Build,arg,UE4
From: https://www.cnblogs.com/hggzhang/p/17555014.html

相关文章

  • UE4构建基础和实践:四、使用脚本打包
    序言使用UE版本为UE5.20在实际项目中,我们常常使用自动化脚本来进行构建,它可以增加我们的生产效率,并降低人为操作带来的失误风险。BuildGraphBuildGraphUE官方提供的构建脚本系统,它可以读取对应的XML脚本实现自动化打包。BuildGraph相关的参考BuildGraph|UE文档重点是它相......
  • ES数据备份之snapshot和elasticdump
    https://blog.csdn.net/m0_46435788/article/details/114291491?spm=1001.2101.3001.6650.9&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-9-114291491-blog-129881702.235%5Ev38%5Epc_relevant_sort&depth_1-utm_so......
  • Cilium 系列-3-Cilium 的基本组件和重要概念
    系列文章Cilium系列文章前言安装完了,我们看看Cilium有哪些组件和重要概念。Cilium组件如上所述,安装Cilium时,会安装几个运行组件(有些是可选组件),它们各是什么用途?CiliumOperatorCiliumOperator可以理解为Cilium的管理平面或操作运维平面。CiliumOperator不......
  • 无法注册程序集“D:\JAVA学习之路\jni4netTest\FanucDataCollectionAPI\FanucData
    无法注册程序集"D:\JAVA学习之路\jni4netTest\FanucDataCollectionAPI\FanucData"在Java开发中,我们经常需要与其他语言进行集成,以实现更复杂的功能或访问底层资源。JNI(JavaNativeInterface)是一种机制,允许Java代码调用本地代码(通常是C或C++编写的)。然而,在使用JNI时,有时会遇到无......
  • The 2023 Guangdong Provincial Collegiate Programming Contest(2023广东省赛)
    链接:https://codeforces.com/gym/104369A.ProgrammingContestC++Code#include"bits/stdc++.h"usingnamespacestd;usingi64=longlong;voidsolve(){inty1,y2;cin>>y1;intn;cin>>n;vector<int>......
  • DecimalFormat 四舍五入问题
    DecimalFormat函数默认的四舍五入的方法是银行家算法(RoundingMode.HALF_EVEN),跟一般的四舍五入的方法不同可以用String.format("%.6f",d)来代替也可以指定 df.setRoundingMode(RoundingMode.HALF_UP)为正常四舍五入;ps银行家算法:四舍六入五考虑,五后非零就进一,五后为零看奇偶,......
  • Cilium 系列-2-Cilium 快速安装
    系列文章Cilium系列文章前言在本章中,我们将直接将Cilium安装到Kubernetes集群中。在实验中,我们用到的组件及版本为:Cilium1.13.4K3sv1.26.6+k3s1OSDebian10,Kernel4.19.232,arm64Ubuntu23.04,Kernel6.2,x86......
  • python读取ascii文件
    Python读取ASCII文件在Python中,我们可以使用各种方法读取ASCII文件。无论是文本文件、配置文件还是其他类型的ASCII文件,Python提供了多种方式来读取并处理这些文件。本文将介绍如何使用Python读取ASCII文件,并提供代码示例。什么是ASCII文件?ASCII(AmericanStandardCodeforInfo......
  • Python使用ecdh算法交换共享秘钥
    dh_server.py:fromcryptography.hazmat.primitives.asymmetricimportecfromcryptography.hazmat.primitivesimportserializationimportsocketdefecdh_generater(received_public_key):#Generateprivatekeyprivate_key=ec.generate_private_key(ec......
  • Luogu P4552 [Poetize6] IncDec Sequence 更好的题解
    原题链接第一步对于学过差分的人应该不难想定义差分数组$dis\quads.t.\quaddis[i]=a[i]-a[i-1]$那么不难发现问题一只要让\(dis[2]...dis[n]\)中全部为\(0\)即可区间\([l,r]\)加一操作在差分数组中意味着\(dis[l]=dis[l]+1,dis[r+1]=dis[r+1]-1\)即在差分数组......