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等
- 版本号处理
- 构建结果归档上传
- ...
UE构建基础和实践:五、CI/CD平台自动化打包的更多相关文章
- 基于Kubernetes构建企业Jenkins master/slave CI/CD平台
搭建平台目的: k8s中搭建jenkins master/slave架构,解决单jenkins执行效率低,资源不足等问题(jenkins master 调度任务到 slave上,并发执行任务,提升任务 ...
- 【软件工程】《构建之法》 & Git+ & CI/CD
<构建之法> & Git+ & CI/CD 个人阅读作业#2 项目 内容 本作业所属课程 2020春季软件工程(罗杰 任健) 本作业要求 个人阅读作业#2 我的课程目标 具 ...
- devops-5:从0开始构建一条完成的CI CD流水线
从0开始构建一条完成的CI CD流水线 前文中已经讲述了静态.动态增加agent节点,以动态的k8s cloud为例,下面就以Maven构建Java程序为例,开始构建出一条完整的CI CD流水线. 实 ...
- 基于Gogs+Drone搭建的私有CI/CD平台
请移步 基于Gogs+Drone搭建的私有CI/CD平台
- 通读《构建之法》与CI/CD工具尝试
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 作业要求 我在这个课程的目标是 积累软件开发经验,提高工程能力 这个作业在哪个具体方面帮助我实现目标 通读课 ...
- 使用Docker方式部署Gitlab,Gitlab-Runner并使用Gitlab提供的CI/CD功能自动化构建SpringBoot项目
1.Docker安装Gitlab,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13814730.html 2.Docker安装Gitlab-runner,地址: ...
- 使用 Gitlab CI/CD 实现自动化发布站点到 IIS
说明 这里先介绍下两个东西 CI/CD.GitLab Runner,当然在此之前你需要对 git 有所了解,关于 git 这里不做说明,可以自行百度. 首先介绍 CI/CD :随着我们开发方式的转变, ...
- 使用Gitlab的CI/CD功能自动化推送docker镜像到Nexus仓库出现的问题
在服务器中可以直接使用命令行登录,推送docker镜像等 但是在使用Gitlab的CI/CD功能中,gitlab-ci.yml文件执行过程中出现如下错误: 原因分析: 服务器上之前使用命令行登陆过Ne ...
- Github Packages和Github Actions实践之CI/CD
概述 Github在被微软收购后,不忘初心,且更大力度的造福开发者们,推出了免费私有仓库等大更新.近期又开放了packages和actions两个大招,经笔者试用后感觉这两个功能配合起来简直无敌. G ...
- Gogs+Drone搭建CI/CD平台
Gogs 是由 Go 语言编写的 Git 服务器,由中国人主导开发的一款开源项目,搭建方便并且拥有完善的中文文档,配合 Drone 可以实现持续集成/持续部署.本文介绍如何通过 Docker 搭建 G ...
随机推荐
- 一文详解RocketMQ-Spring的源码解析与实战
摘要:这篇文章主要介绍 Spring Boot 项目使用 rocketmq-spring SDK 实现消息收发的操作流程,同时笔者会从开发者的角度解读 SDK 的设计逻辑. 本文分享自华为云社区< ...
- mysql 自动挂掉
今天在看后台的时候,发现登录不上去了,登录页面是可以访问,但是就是登录不上去,上了后台看了一下,说mysql连接超时,然后我重启了一下服务器,发现依然报mysql的错误,我尝试连接mysql, 报了一 ...
- 笔记十:线程间的通信(pthread_exit()和pthread_join())
linux高级编程之线程间的通信(pthread_exit()和pthread_join()) 1.线程终止 如果进程中的任一线程调用了exit._Exit或者_exit,那么整个进程就会终 ...
- Python OOP面向对象编程
OOP 思想: 以模块思想解决工程问题 面向过程 VS 面向对象 由面向过程转向面向对象 例子,我要开一个学校,叫XXX 讲师 学生 班主任 教室 学校 常用名词 OO:面向对象 OOA: 分析 OO ...
- [Pytorch框架] 1.1、Pytorch简介
文章目录 1.1 Pytorch 简介 1.1.1 PyTorch的由来 1.1.2 Torch是什么? 1.1.3 重新介绍 PyTorch 1.1.4 对比PyTorch和Tensorflow 1 ...
- js 获取 ajax返回数据及处理
$.ajax({ url: "http://xiaocui.dgoods.cn/app/index.php?i=5&c=entry&do=check&m=stonef ...
- 2021-04-25:给定一个数组arr,和一个正数M,返回在arr的子数组在长度不超过M的情况下,求最大的累加和。
福大大 答案2021-04-25: 前缀和+左大右小的双端队列.时间太晚了,所以写得简单. 代码用golang编写.代码如下: package main import ( "containe ...
- 【C#代码整洁之道】读后习题
1)劣质的代码会带来什么后果? GPT回答: 可维护性降低:代码过于复杂.难以理解.难以修改,导致维护成本增加,代码质量更加恶化. 可靠性降低:错误容易发生,很难找到并修复,因为代码模糊.逻辑混乱,并 ...
- java解决中文乱码的几种写法
工作中总会遇到中文乱码问题,以导出文件,文件名称是中文的话,下载下来的文件名称会乱码问题,总结了几种解决文件名乱码的写法,仅供参考. 首先定义一个汉语字符串 String zhName = " ...
- AcWing 3956. 截断数组
给定一个长度为 n 的数组 a1,a2,-,an. 现在,要将该数组从中间截断,得到三个非空子数组. 要求,三个子数组内各元素之和都相等. 请问,共有多少种不同的截断方法? 输入格式 第一行包含整数 ...