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

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

背景

mac 本地安装 Jenkins,跑 Unity 游戏自动化:出包 / 打AB / 操作 git等。

实战部分还原自一个 Unity 手游客户端仓库的 CI 脚本体系

环境

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

总体架构

复制代码
┌──────────────┐   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 机器人,成功/失败都可通知。

真实数据流示例

复制代码
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                # 升级
相关推荐
Msir_Modern21 分钟前
Noita 元胞沙盒笔记
算法·unity·c#·游戏引擎·元胞自动机
李航19832 小时前
虚拟盖房子,在游戏中学习房子的建造过程
人工智能·学习·游戏·计算机视觉·ai编程
充值内卷4 小时前
C++单文件迷宫游戏:TauriCPP 开发全记录
开发语言·c++·游戏
天天进步20154 小时前
Unity 2020.3 反复提示安全模式:一次 CS0009 与 DLL 文件占用的排查记录
unity·1024程序员节
郝学胜-神的一滴6 小时前
游戏设计:原型与开发 12:概率和反馈与数值平衡实战
人工智能·游戏·游戏程序·游戏策划·游戏设计
淡海水6 小时前
07-04-源码-.NET Core GC清扫与压缩
unity·架构·c#·.netcore·gc·1024程序员节
Solange__15 小时前
影视预演怎么用AI生成3D场景?从分镜、Blockout到镜头交付的完整流程
人工智能·游戏·3d·ai·自然语言处理·aigc·游戏策划
郝学胜-神的一滴20 小时前
游戏设计:原型与开发 11:用概率与电子表格搞定骰子系统
程序人生·游戏·游戏策划·1024程序员节·游戏设计
小贺儿开发20 小时前
《长征 · 征途》Unity 三维互动沙盘
科技·3d·unity·1024程序员节·地形·互动·沙盘
treesforest1 天前
游戏账号安全风险分层方案:IP信号分层与人机复核实践
tcp/ip·安全·游戏·1024程序员节