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 查找问题),先停掉前台跑看报错:
bashbrew 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 # 升级