文档

支持

在构建过程中运行自定义脚本

Follow this workflow to run custom scripts before and after the build process.
阅读时间6 分钟最后更新于 19 天前

Build Automation 支持用户创建的构建前和构建后自定义脚本。要使用自定义脚本,请将这些脚本签入源代码仓库,然后在构建的 Advanced Settings(高级设置)中配置脚本相对于代码仓库根目录的相对路径。

导出前和导出后方法

使用导出前和导出后方法可在 Unity 项目在云端构建之前和之后触发相应操作。这些方法必须存在于
Assets/Editor
文件夹中的类内。如果目录中不存在 Editor 文件夹,您可以创建一个。

导出前方法名称

要使用导出前方法,请在 Unity 项目中创建一个公共静态方法,其中包含要在 Unity 编辑器导出项目之前和 Unity 编辑器脚本编译阶段之后执行的代码。
public static void PreExport()
可以通过在方法签名中指定
BuildManifestObject
对象作为参数,使 Build Automation 将当前构建的构建清单传递给导出前方法。然后,可以在导出项目之前更改 Project(项目)或 Player(播放器) 设置。
public static void PreExport(UnityEngine.CloudBuild.BuildManifestObject manifest)
Unity Build Automation 调用该方法时,会将
BuildManifestObject
对象作为可选参数传递,并将
BuildManifestObject
作为当前构建的构建清单。

导出后方法名称

要使用导出后方法,请在 Unity 项目中创建一个公共静态方法,其中包含要在 Unity 编辑器导出项目后执行的代码。
public static void PostExport(string exportPath)
Unity Build Automation 调用该方法时,会传递一个字符串:
  • 对于非 iOS 构建目标,该字符串包含所导出项目的路径。
  • 对于 iOS 项目,该字符串包含导出的 Xcode 项目的路径。您可以使用该路径来找到导出的 Xcode 项目,以便在调用 Xcode 完成构建过程之前执行额外的预处理。

自定义脚本 #define 指令

使用 Build Automation 可以创建自定义脚本 #define 指令。在 Unity Dashboard 上,转到构建目标的 Advanced Settings(高级设置) Scripting Define Symbols(脚本定义符号) 字段中,可以将自己的自定义脚本 #define 指令添加到可用的内置选项中。对于每个构建目标,输入要定义的符号名称。然后,可以像使用内置符号一样,将这些符号用作 #if 指令中的条件。有关更多信息,请参阅条件编译

更改节点版本

构建机器上安装了 NVM,以便您可以在构建过程中切换到其他节点版本。以下示例脚本将安装并切换到 Node 16.13.0:
#!/usr/bin/env bash## Source profile##install-nvm-modules-and-set-version. ~/.profile## Install NVM modules and set version##output-node-version-usednvm install 16.13.0nvm use 16.13.0## Output Node version used##source-profilenode -vexit 0

使用其他 Ruby 版本

构建机器上安装了
RVM
gem
,以便您可以在构建过程中使用不同的 Ruby 版本。以下示例脚本将安装 Ruby 3.3.0 并使用
DO
执行命令,因此不会影响 UBA 工具所使用的系统 Ruby 安装。
#!/usr/bin/env bash## Source profilervm install ruby-3.3.0rvm ruby-3.3.0 do gem install fastlanervm ruby-3.3.0 do fastlane --helpexit 0
rvm install ruby-3.3.0 --with-openssl-dir=$(brew --prefix openssl@1.1)

设置环境变量

echo "{environment_variable_name}={value}" >> "$DEVOPS_ENV"
要使 Unity 构建和构建后脚本可以使用环境变量,请定义或更新环境变量并将此值写入
DEVOPS_ENV
环境文件。创建或更新环境变量的脚本无法访问新值,但所有后续进程都将可以访问。环境变量名称以大写形式存储(例如
testenv
会变为
TESTENV
)。仅支持单行环境变量。

将环境变量写入 DEVOPS_ENV 的示例

在构建前脚本中设置环境变量。
echo "TEST_ENV=Sample environment variable" >> $DEVOPS_ENV
然后在构建后脚本中输出该环境变量。
echo $TEST_ENV

在构建后脚本中访问构建 Artifact

您可以使用构建后脚本访问构建 Artifact,以便自动上传到应用商店,或使构建过程的某些部分实现自动化。如果在构建后脚本中使用环境变量将路径传递给 Windows 可执行文件,则必须使用 cygwin 路径。

获取播放器路径的示例脚本

#!/bin/bash#This is a sample that will simply output the path to the build artifactecho "START"PLAYER_PATH=$UNITY_PLAYER_PATH#If we are using a Windows Builder and using the path to pass it to a native Windows application, we need to properly convert the cygwin player path to windows formatif [[ "$BUILDER_OS" == "WINDOWS" ]]; thenPLAYER_PATH=$(cygpath -wa "$UNITY_PLAYER_PATH")fiecho "$PLAYER_PATH"

在日志中屏蔽值

屏蔽值可以防止字符串或变量在日志中打印出来。无论值内容如何,每个被屏蔽的值都会替换为
*****
。您可以将环境变量或原始值传递给 mask 命令。
要屏蔽字符串或环境变量,请使用
::mask-value::
命令。
echo "::mask-value::{value}"

示例:屏蔽值

要屏蔽值
"SuperS3cretPassword!"
,请为该值设置
::mask-value::
命令:
echo "::mask-value::SuperS3cretPassword!"
在日志中打印时,输出将显示为
"*****"

示例:屏蔽变量

要屏蔽变量
DB_PASSWORD
或变量值
"SuperS3cretPassword!"
,请为变量设置
::mask-value::
命令:
DB_PASSWORD=SuperS3cretPassword!echo "::mask-value::$DB_PASSWORD"
当这类内容打印到日志中时,输出将显示为
"*****"

示例:屏蔽环境变量

使用
$DEVOPS_ENV
设置的环境变量可以被屏蔽。设置环境变量的值,将其屏蔽,然后将该值输出到
$DEVOPS_ENV
文件中,以便在其他脚本中使用。
DB_PASSWORD=SuperS3cretPassword!echo "::mask-value::$DB_PASSWORD"echo "DB_PASSWORD=$DB_PASSWORD" >> $DEVOPS_ENV