Unity游戏之Jenkins的安装部署应用

Unity游戏之Jenkins的安装部署应用

背景

mac 本地安装 Jenkins,跑 Unity 游戏自动化:出包 / 打AB / 操作 git等。 实战部分还原自一个 Unity 手游客户端仓库的 CI 脚本体系

环境

  • macOS,Apple Silicon(arm64),brew
  • Java:由 brew 公式拉取 openjdk@21
  • git 已就位

总体架构

bash 复制代码
┌──────────────┐   brew services    ┌───────────────────────┐
│ 浏览器 UI      │ ◄──── http://localhost:8080 ────│ Jenkins (LTS, Java 21) │
└──────────────┘                    └──────────┬────────────┘
                                               │ Pipeline 调构建脚本
                          ┌────────────────────┼────────────────────┐
                          ▼                    ▼                    ▼
                     git 拉取           Unity batchmode        构建产物
                 (env 参数下发)     (executeMethod 打包/打资源)   (CDN 上传 / 通知)

核心模块

模块 说明
brew jenkins-lts 安装即自带依赖 openjdk@21;brew services 管启停,默认端口 8080
JENKINS_HOME ~/.jenkins,配置 / job / 凭据都在这
Unity 3d 插件 Tools 里配编辑器路径,pipeline 里 tools { unity3d '版本名' } 引用
Credentials git 私有仓库凭据(SSH key 或用户名/密码/PAT)
打包脚本 项目内 jenkins/ 目录下,环境变量驱动,Jenkins job 参数下发到 shell env

安装步骤

bash 复制代码
brew install jenkins-lts        # 自动拉 openjdk@21 依赖
brew services start jenkins-lts # 启动,默认 8080
  • 浏览器 http://localhost:8080(首次弹防火墙允许)
  • 解锁密码:cat ~/.jenkins/secrets/initialAdminPassword
  • 装 Install suggested plugins,建 admin 用户

brew services 起不来(Java 查找问题),先停掉前台跑看报错:

bash 复制代码
brew services stop jenkins-lts
/opt/homebrew/opt/jenkins-lts/bin/jenkins-lts

Unity 侧配置

  • 装插件:Manage Jenkins → Plugins → Unity 3d(Git plugin 默认有)
  • 配工具:Manage Jenkins → Tools → Unity 3d installations → 填 /Applications/Unity/Hub/Editor/(unity版本号)/Unity.app
  • git 凭据:Manage Jenkins → Credentials,私有仓库优先 SSH key(本机公钥加到远端,Jenkins 填私钥)

Pipeline 模板

放仓库根目录 Jenkinsfile

groovy 复制代码
pipeline {
    agent any
    tools { unity3d '对应版本号' }          // 对应工具名

    stages {
        stage('拉取') {
            steps {
                git credentialsId: 'my-git-cred',
                    url: 'git@github.example.com:your/project.git'
            }
        }
        stage('打包') {
            steps {
                unity3d(
                    buildMethod: 'BuildScript.PerformBuild',
                    projectPath: '.',
                    buildTarget: 'StandaloneOSX'
                )
            }
        }
    }
    post { always { junit '**/TestResults/**/*.xml' } }
}

打ab资源:给 Unity 写 Editor 脚本作为 buildMethod(资源打包 / Addressables 都走自定义方法),统一走 buildMethod,不在 pipeline 里裸拼命令行。

实战篇:Unity 项目的 Jenkins 用法

Unity 手游项目把仓库内shell 脚本作为 Jenkins 调用的打包入口。

打包脚本体系举例

脚本 职责 Unity 入口
buildAB.sh AB 资源打包:拉取(checkout/clean/pull)→ batchmode 打 AB → 提交资源清单到git备份 → CDN 上传 xxx.buildAB
apk.sh Android APK 打包:reset StreamingAssets → 生产参数强制 → batchmode → 符号表上传,加固等其他必要设置 batchmode BuildAPK

三个关键机制

1. 参数环境变量化 ------ param.sh${VAR-默认值} 风格,Jenkins job 里配的参数直接作为 env 注入 shell,脚本天然带默认值:

bash 复制代码
IS_PROD=${IS_PROD-false}               # 正式包强制关 debug
BUILD_NUMBER=${BUILD_NUMBER-"99999"}   # Jenkins 自带全局变量直接复用

2. 参数透传给 Unity ------ shell 把参数转成 Unity batchmode 的命令行参数:

脚本示例:

bash 复制代码
"${UNITY_MACOS_PATH}" -batchmode \
    -projectPath "${PROJECT_PATH}" \
    -executeMethod "XXX/BuildAPK" \
    "-server=${SERVER_NAME}" \
    "-debug_build=${IS_DEBUG_BUILD}" \
    "-force_rebuild=${IS_FORCE_REBUILD}" \
    -quit

Unity 侧对应写一个 BuildAPK() 静态方法,用相同 -xxx= 前缀把参数解析出来,形成 shell → C# 的参数闭环。

3. 产物上传 + 通知 ------ 打包产物走 ossutil 传 CDN;结果走 webhook 机器人,成功/失败都可通知。

真实数据流示例

bash 复制代码
Jenkins job (打资源, 传参 env)
  └─ buildAB.sh
       ├─ GitUpdate: git checkout . / clean -df / pull   ← 拉取
       ├─ Unity batchmode xxx/buildAB         ← 打 AB
       ├─ GitUpload: 提交资源清单回仓库          ← 版本回写
       └─ UploadToCdn: ossutil 上传 AB 产物到 CDN或其他(如需要)

日常管理

bash 复制代码
brew services list                      # 状态
brew services stop|restart jenkins-lts
brew upgrade jenkins-lts                # 升级
相关推荐
SmalBox7 小时前
【节点】[Rotate节点]原理解析与实际应用
unity3d·游戏开发·图形学
甲维斯1 天前
国内外模型3D台球大赛,DS垫底,Claude最强!
人工智能·游戏开发
SmalBox1 天前
【节点】[RadialShear节点]原理解析与实际应用
unity3d·游戏开发·图形学
oden2 天前
一个不会游戏开发的人,用 AI 把一款小游戏做到上线了
ai编程·cocos creator·游戏开发
SmalBox2 天前
【节点】[PolarCoordinates节点]原理解析与实际应用
unity3d·游戏开发·图形学
优梦创客2 天前
游戏开发架构选型:第1篇|什么是架构?从进球事件看 MVC 的局限
unity·架构·游戏引擎·游戏开发
SmalBox3 天前
【节点】[PixelateUV节点]原理解析与实际应用
unity3d·游戏开发·图形学
_zhourui_h_3 天前
Unity 网络通信极限选型:TCP 和 UDP 到底该怎么分工,选错一次可能就是性能灾难?
unity3d
_ZHOURUI_H_4 天前
Unity TCP底层极限拆解:粘包、半包、CRC、序列号、双缓冲到底怎么一起工作的?
网络·网络协议·tcp/ip·游戏·unity·游戏引擎·游戏开发