Jenkins 打包Unity APK

Jenkins 打包Unity APK

新建一个Unity 工程,添加编辑器打包脚本

编辑器脚本 APKBuild.cs
编辑状态下调用 APKBuild中 Build 方法,执行打包,
测试成功开始编写 批处理脚本 Unity.bat 通过批处理脚本调用 APKBuild中 Build 方法 执行打包
执行批处理打包成功开始在Jenkins新建项目

APKBuild.cs 代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;


public class APKBuild : Editor
{

    [MenuItem("Tool/APKBuild")]
    public static void Build()
    {
        BuildTarget buildTarget = BuildTarget.Android;
        // 切换到 Android 平台
        EditorUserBuildSettings.SwitchActiveBuildTarget(buildTarget);

        // keystore 路径, G:\keystore\one.keystore
        PlayerSettings.Android.keystoreName = "G:\\keystore\\one.keystore";
        // one.keystore 密码
        PlayerSettings.Android.keystorePass = "123456";

        // one.keystore 别名
        PlayerSettings.Android.keyaliasName = "bieming1";
        // 别名密码
        PlayerSettings.Android.keyaliasPass = "123456";

        List<string> levels = new List<string>();
        foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes)
        {
            if (!scene.enabled) continue;
            // 获取有效的 Scene
            levels.Add(scene.path);
        }

        // 打包出 APK 名
        string apkName = string.Format("./{0}.apk", "Test");
        // 执行打包
        string res = BuildPipeline.BuildPlayer(levels.ToArray(), apkName, buildTarget, BuildOptions.None);

        AssetDatabase.Refresh();
    }
}

在编辑器下可以调用 Build() 方法执行打包 APK

新建批处理脚本 Unity.bat

H:\Unity\Unity\Editor\Unity.exe -projectPath G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo -quit -batchmode -executeMethod APKBuild.Build -logFile build.log

参数介绍

H:\Unity\Unity\Editor\Unity.exe 为Unity 安装执行文件

-projectPath 执行Unity游戏工程

G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo 为Unity 工程目录 Assets 上一层目录

-quit 表示执行结束自动退出

-executeMethod 表示执行 编辑器方法

APKBuild.Build  APKBuild 为编辑器脚本 APKBuild.cs , 中APKBuild.cs Build 函数名

最终 Unity.bat 脚本

@echo off  

echo 正在生成APK文件...  

REM H:\Unity\Unity\Editor\Unity.exe -projectPath G:\MyProject\AndroidSDKUnityDemo\AndroidSDKDemo -quit -batchmode -executeMethod APKBuild.Build -logFile build.log

%1 -projectPath %2 -quit -batchmode -executeMethod APKBuild.Build -logFile build.log

echo APK文件生成完毕!  
pause 

上面 %1 %2 我通过在执行批处理脚本的时候将参数传递进来

将 Unity.bat 放在 Unity 项目根目录(和 Assets 同级)
这里写图片描述

将Unity 工程上传到 SVN服务器

开始Jenkins
新建一个新工程
这里写图片描述

这里写图片描述

下一步弹出配置界面
这里写图片描述

源码管理

中选择 SubVersion 配置SVN 路径和用户名密码
这里写图片描述

点击 Add 添加一个用户名和密码
这里写图片描述

Check -out Strategy 中配置每次构建时执行的 SVN update命令(每次构建时会将SVN 中最新的项目更新到 Jenkins 的工作空间WORKSPACE)

如我本地的Jenkins 工作空间位置,Jenkins新建的项目都会放在 workspace 下

C:\Users\Dev\.jenkins\workspace\

构建中选择 Windows 批处理,
这里写图片描述
第一行打印一个 HelloWorld
第二行执行 Unity.bat 后边两个参数 分别传递给批处理中 %1,%2

%WORKSPACE% 是Jenkins 中可用的环境变量,表示该项目在Jnekins 中的目录位置
本项目在Jenkins 为 TestDemo则 %WORKSPACE% 在我本地为 C:\Users\Dev\.jenkins\workspace\TestDemo

配置完成保存,执行构建(构建时要将 Unity 关掉)
这里写图片描述

可以查看日志
这里写图片描述

等待构建
构建完成后打开工作空间,发现目录下生成一个 Test.apk 表示 APK 生成成功
这里写图片描述

下面来看下我的 Unity 工程和 Jenkins 工程的关系

Unity Demo工程目录如下
这里写图片描述

Unity Demo工程上传到 SVN 服务器

在 Jenkins 中新建TestDemo项目,在 TestDemo配置中 添加 Demo工程上传的 SVN 服务器路径

Jenkins 在构建构建时会从 SVN 服务器将 Demo 工程 CheckOut 到 Jenkins 的工作空间中 TestDemo 项目下
这里写图片描述

打开 TestDmeo 文件夹,我已经执行过构建了, Jenkins 已经从 SVN 上更新了最新的项目到 工作空间中
这里写图片描述

然后我在执行 Unity.bat 时,将 %WORKSPACE% 在我本地为(C:\Users\Dev.jenkins\workspace\TestDemo)传递了进去,即执行的 打包工程是Jenkins 工作空间的这个工程

每次修改Unity Demo 工程,将修改提交到 SVN,然后再执行 Jenkins 构建

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值