在构建过程中运行自定义脚本
Follow this workflow to run custom scripts before and after the build process.
阅读时间6 分钟最后更新于 19 天前
Build Automation 支持用户创建的构建前和构建后自定义脚本。要使用自定义脚本,请将这些脚本签入源代码仓库,然后在构建的 Advanced Settings(高级设置)中配置脚本相对于代码仓库根目录的相对路径。
导出前和导出后方法
使用导出前和导出后方法可在 Unity 项目在云端构建之前和之后触发相应操作。这些方法必须存在于Assets/Editor导出前方法名称
要使用导出前方法,请在 Unity 项目中创建一个公共静态方法,其中包含要在 Unity 编辑器导出项目之前和 Unity 编辑器脚本编译阶段之后执行的代码。可以通过在方法签名中指定public static void PreExport()
BuildManifestObjectUnity Build Automation 调用该方法时,会将public static void PreExport(UnityEngine.CloudBuild.BuildManifestObject manifest)
BuildManifestObjectBuildManifestObject导出后方法名称
要使用导出后方法,请在 Unity 项目中创建一个公共静态方法,其中包含要在 Unity 编辑器导出项目后执行的代码。Unity Build Automation 调用该方法时,会传递一个字符串:public static void PostExport(string exportPath)
- 对于非 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 版本
构建机器上安装了RVMgemDO#!/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)
设置环境变量
要使 Unity 构建和构建后脚本可以使用环境变量,请定义或更新环境变量并将此值写入echo "{environment_variable_name}={value}" >> "$DEVOPS_ENV"
DEVOPS_ENVtestenvTESTENV将环境变量写入 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-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_ENVDB_PASSWORD=SuperS3cretPassword!echo "::mask-value::$DB_PASSWORD"echo "DB_PASSWORD=$DB_PASSWORD" >> $DEVOPS_ENV