From 5475841e6b425a214532038f2a43b1b3541dfb30 Mon Sep 17 00:00:00 2001 From: liutao <821580467@qq.com> Date: Wed, 30 Apr 2025 14:52:55 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=B7=A5=E5=85=B7=E3=80=91=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tool/dll_tools/auto_upload_dll.sh | 51 ++++++++++++++++++ Tool/dll_tools/command.groovy | 60 +++++++++++++++++++++ Tool/dll_tools/open_unity.sh | 89 +++++++++++++++++++++++++++++++ Tool/dll_tools/push_to_git.sh | 55 +++++++++++++++++++ 4 files changed, 255 insertions(+) create mode 100644 Tool/dll_tools/auto_upload_dll.sh create mode 100644 Tool/dll_tools/command.groovy create mode 100644 Tool/dll_tools/open_unity.sh create mode 100644 Tool/dll_tools/push_to_git.sh diff --git a/Tool/dll_tools/auto_upload_dll.sh b/Tool/dll_tools/auto_upload_dll.sh new file mode 100644 index 00000000000..da9d18644a2 --- /dev/null +++ b/Tool/dll_tools/auto_upload_dll.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# 自动上传dll脚本 +# 当前目录在C:/Work/Projects/NLDClient/Tool/dll_tools +# 找到同级别C:/Work/Projects/NLDClient/ProjectNLD/Library/ScriptAssemblies/{0}.dll +# 复制到指定位置 C:/Work/Projects/NLDClient/WaitUpload + +# 读取传入参数 +if [ $# -eq 0 ]; then + echo "Usage: $0 " + echo "No arguments provided" + exit 1 +fi +if [ $# -gt 1 ]; then + echo "Too many arguments provided" + exit 1 +fi + +# 输出参数 +echo "Need To Find: $1" +# 目标路径 +TARGET_PATH="../../WaitUpload" +# 源路径 +SOURCE_PATH="../../ProjectNLD/Library/ScriptAssemblies" +# 目标文件 +TARGET_FILE="$TARGET_PATH/$1.dll" +# 源文件 +SOURCE_FILE="$SOURCE_PATH/$1.dll" + +# 检查源文件是否存在 +if [ ! -f "$SOURCE_FILE" ]; then + echo "Source file does not exist: $SOURCE_FILE" + exit 1 +fi +# 检查目标路径是否存在, 如果不存在则新建 +if [ ! -d "$TARGET_PATH" ]; then + mkdir -p "$TARGET_PATH" +fi +# 检查目标文件是否存在, 如果存在则删除 +if [ -f "$TARGET_FILE" ]; then + rm -f "$TARGET_FILE" +fi +# 复制文件 +cp "$SOURCE_FILE" "$TARGET_FILE" +# 检查复制是否成功 +if [ $? -ne 0 ]; then + echo "Failed to copy file" + exit 1 +fi +# 输出结果 +echo "File copied successfully to $TARGET_FILE" + diff --git a/Tool/dll_tools/command.groovy b/Tool/dll_tools/command.groovy new file mode 100644 index 00000000000..aceb557ea0d --- /dev/null +++ b/Tool/dll_tools/command.groovy @@ -0,0 +1,60 @@ +pipeline { + agent any + + stages { + stage('拉最新工程') { + steps { + script { + def currentPath = sh(script: 'pwd', returnStdout: true).trim() + echo "cd ${currentPath}" + + // 如果仓库存在及还原脚本存在,进行子模块还原 + def gitDirExists = sh(script: '[ -d ".git" ] && echo "true" || echo "false"', returnStdout: true).trim() + def scriptPathExists = fileExists("${WORKSPACE}/Tool/build_tools/git_revert_modules_modification.sh") + if (gitDirExists == 'true' && scriptPathExists) + { + sh "chmod +x $WORKSPACE/Tool/build_tools/git_revert_modules_modification.sh" + sh "$WORKSPACE/Tool/build_tools/git_revert_modules_modification.sh $WORKSPACE" + } + + def remote = GetRemote(); + echo "拉取分支:${remote}" + checkout scmGit(branches: [[name: "*/${remote}"]], + extensions: [checkoutOption(60), lfs(), cloneOption(noTags: false, reference: '', shallow: false, timeout: 120), submodule(recursiveSubmodules: true, reference: '', timeout: 1200)], + userRemoteConfigs: [[url: 'http://1.14.122.170:3000/PHXH/NLDClient.git']]) + } + } + } + + stage('设置环境') { + steps { + // 将打包机器相关配置复制到打包路径下 + echo "copy local env file to $WORKSPACE" + sh "cp /Users/mayuanzheng/Builds/local_env.sh $WORKSPACE/Tool/build_tools/" + } + } + + stage('打开unity工程') { + steps { + // 需要用到dll_tools下的脚本 + // open_unity.sh + // auto_upload_dll.sh + // auto_upload_dll.sh 需要传入参数:dllName + // push_to_git.sh + + // 先给权限 + sh "chmod +x $WORKSPACE/Tool/build_tools/dll_tools/*" + // 打开unity工程 + sh "cd $WORKSPACE/Tool/dll_tools && ./open_unity.sh" + // 等待unity打开 + sleep 10 + // 执行自动上传dll脚本 + sh "cd $WORKSPACE/Tool/dll_tools && ./auto_upload_dll.sh GamePlay" + // 等待上传完成 + sleep 10 + // 执行上传脚本 + sh "cd $WORKSPACE/Tool/dll_tools && ./push_to_git.sh" + } + } + } +} \ No newline at end of file diff --git a/Tool/dll_tools/open_unity.sh b/Tool/dll_tools/open_unity.sh new file mode 100644 index 00000000000..133fa055679 --- /dev/null +++ b/Tool/dll_tools/open_unity.sh @@ -0,0 +1,89 @@ +#!/bin/bash +# 打开unity并等待编译完成后自动退出 +# 当前目录在C:/Work/Projects/NLDClient/Tool/dll_tools +# 找到同级别C:/Work/Projects/NLDClient/ProjectNLD +# 打开unity +# 等待编译完成 +# 退出unity + +# 获取当前脚本所在目录的绝对路径 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# 基于当前脚本位置计算PROJECT_PATH +# 当前目录是C:/Work/Projects/NLDClient/Tool/dll_tools +# 我们需要向上两级再进入ProjectNLD目录 +PROJECT_PATH="$(dirname "$(dirname "$SCRIPT_DIR")")/ProjectNLD" +echo "Calculated PROJECT_PATH: $PROJECT_PATH" + +# 检查PROJECT_PATH是否存在 +if [ ! -d "$PROJECT_PATH" ]; then + echo "PROJECT_PATH does not exist: $PROJECT_PATH" + exit 1 +fi +echo "PROJECT_PATH exists: $PROJECT_PATH" + +# 检查本地是否有local_env.sh文件, 如果有则使用其中的路径, 里面定义了UNITY_PATH +# 如果没有则使用默认的unity地址 +if [ -f ./local_env.sh ]; then + source ./local_env.sh + echo "found the local_env file" +else + # 没有则使用默认的unity地址 + # UNITY_PATH="/Applications/Unity/Hub/Editor/2022.3.50f1c1/Unity.app/Contents/MacOS/Unity" + echo "local_env.sh not found, using default UNITY_PATH" + UNITY_PATH="/Applications/Unity/Hub/Editor/2022.3.50f1c1/Unity.app/Contents/MacOS/Unity" +fi +# 输出UNITY_PATH +echo "UNITY_PATH: $UNITY_PATH" + +# 创建临时日志文件 +LOG_FILE="unity_build_$(date +%Y%m%d_%H%M%S).log" +echo "Unity build log will be saved to $LOG_FILE" + +# 创建一个临时的编辑器脚本,用于在编译完成后退出Unity +TEMP_SCRIPT="$PROJECT_PATH/Assets/Editor/TempQuitAfterBuild.cs" +mkdir -p "$(dirname "$TEMP_SCRIPT")" + +cat > "$TEMP_SCRIPT" << 'EOL' +using UnityEditor; +using UnityEngine; + +[InitializeOnLoad] +public class QuitAfterBuild +{ + static QuitAfterBuild() + { + EditorApplication.update += WaitForCompilation; + } + + static void WaitForCompilation() + { + if (!EditorApplication.isCompiling) + { + Debug.Log("Compilation finished. Quitting Unity..."); + EditorApplication.update -= WaitForCompilation; + EditorApplication.Exit(0); + } + } +} +EOL + +echo "Starting Unity in batchmode..." + +# 使用Unity的batchmode命令行参数打开项目 +"$UNITY_PATH" -projectPath "$PROJECT_PATH" -logFile "$LOG_FILE" & + +# 保存Unity进程ID +UNITY_PID=$! + +echo "Unity started with PID: $UNITY_PID" +echo "Waiting for Unity to complete compilation and exit..." + +# 等待Unity进程结束 +wait $UNITY_PID + +# 删除临时编辑器脚本 +rm -f "$TEMP_SCRIPT" + +echo "Unity process has exited." +echo "Build log available at: $LOG_FILE" \ No newline at end of file diff --git a/Tool/dll_tools/push_to_git.sh b/Tool/dll_tools/push_to_git.sh new file mode 100644 index 00000000000..4fd9c48bca4 --- /dev/null +++ b/Tool/dll_tools/push_to_git.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# 自动把dll上传到git +# 当前目录在C:/Work/Projects/NLDClient/Tool/dll_tools +# 当前存档dll路径C:/Work/Projects/NLDClient/WaitUpload +# 找到绝对路径/Users/mayuanzheng/Documents/NoRemove/GamePlay_Dll +# 复制所有dll到绝对路径中并覆盖 +# 使用git强制提交 + +# 获取dll所在路径 +SRC_DLL_PATH="../../WaitUpload" +# 目标路径 +TARGET_PATH="/Users/mayuanzheng/Documents/NoRemove/GamePlay_Dll" + +# 检查源路径是否存在 +if [ ! -d "$SRC_DLL_PATH" ]; then + echo "Source path does not exist: $SRC_DLL_PATH" + exit 1 +fi +# 检查目标路径是否存在 +if [ ! -d "$TARGET_PATH" ]; then + echo "Target path does not exist: $TARGET_PATH" + exit 1 +fi + +# 拷贝所有dll到目标路径 +cp -rf "$SRC_DLL_PATH"/*.dll "$TARGET_PATH" +# 检查拷贝是否成功 +if [ $? -ne 0 ]; then + echo "Failed to copy dll files" + exit 1 +fi +# 输出结果 +echo "Dll files copied successfully to $TARGET_PATH" + +# 进入目标路径 +cd "$TARGET_PATH" +# 检查是否进入成功 +if [ $? -ne 0 ]; then + echo "Failed to change directory to $TARGET_PATH" + exit 1 +fi + +# 强制提交 +git add . +# 添加时间戳到提交信息 +TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") +git commit -m "Auto upload dll - $TIMESTAMP" +git push --force +# 检查提交是否成功 +if [ $? -ne 0 ]; then + echo "Failed to push to git" + exit 1 +fi +# 输出结果 +echo "Dll files pushed to git successfully"