Unity 基于Jenkins自动化打包流程

这篇具有很好参考价值的文章主要介绍了Unity 基于Jenkins自动化打包流程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是Jenkins?

        Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

Jenkins的下载与安卓

直接搜索jenkins进入官网下在LTS(稳定版本)下载地址:https://www.jenkins.io/download/

下载完成打开执行文件,点击下一步,修改安装目录,

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 下载JavaJDK,选中目录然后一直点击next完成安装

unity jenkins打包,Unity,jenkins,自动化,运维,unity

安装完成后 在网页打开 http://localhost:8080 端口号是安装时所选的端口号

 unity jenkins打包,Unity,jenkins,自动化,运维,unity

按提示找到密码输入,然后直接安装推荐插件,安装完成设置账号密码

 unity jenkins打包,Unity,jenkins,自动化,运维,unity

 unity jenkins打包,Unity,jenkins,自动化,运维,unity

配置本地的jenkins路径用于访问

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 然后访问配置路径 http://localhost:8080/  输入账号密码进入

unity jenkins打包,Unity,jenkins,自动化,运维,unity

unity 相关配置 

找到插件配置,添加Unity3d插件

unity jenkins打包,Unity,jenkins,自动化,运维,unity

unity jenkins打包,Unity,jenkins,自动化,运维,unity

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 找到全局配置 配置unity 安装路径

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 unity jenkins打包,Unity,jenkins,自动化,运维,unity

 新建项目

输入项目名称,选着项目类型,创建

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 配置项目

  1. 项目描述
  2. 项目显示名称
  3. 丢弃旧的构建(Discard old builds)
  4. 参数化构建过程(This project is parameterized)
  5. 使用自定义的工作空间(unity项目根目录)
  6. 定时构建(Build periodically)
  7. 添加window命令行(Build Steps/Execute Windows batch command)
  8. 添加unity版本(Build Steps/Invoke Unity3d Editor)
  9. 项目归档(Archive the artifacts)将打包出来的东西进行储存

一下会使用到window 命令行,对于命令行不熟悉的可以看下这篇文章:Window 命令行与bat批处理文件总结

使用到的命令在里面都能找到

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 SVN Server 下载与安装

Downloads | VisualSVN

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 创建SVN目录  右键Repositories->Create New Repository

unity jenkins打包,Unity,jenkins,自动化,运维,unity

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 右键 Uers 创建用户

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 本地SVN下载:Downloads · TortoiseSVN

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 下载后安装,文件夹下右键 SVN ->CheckOut,填入的路基是SVNServer项目路径

unity jenkins打包,Unity,jenkins,自动化,运维,unity

SVN 命令行

  • svn commit -m * 上传全部文件
  • svn add * 添加全部文件
  • svn update 更新目录所有文件及文件更新
  • svn cleanup 解锁
  • svn revert * 还原文件

Jenkins SVN更新配置

添加构建化参数,项目地址:

unity jenkins打包,Unity,jenkins,自动化,运维,unity

添加命令行构建步骤:

  •  svn 更新命令
  • 执行unity编辑器函数   

unity jenkins打包,Unity,jenkins,自动化,运维,unity

-projectpath %WorkPath% -quit -batchmode -executeMethod BuildApp.Build -logFile "D:\log.txt"
  • -projectpath %WorkPath% 工程路径

  • -quit 执行完后退出编辑器

  • -batchmode 执行unity的时候不会弹出Unity编辑器框

  • -executeMethod BuildApp.Build 编辑器方法

  • -logFile "D:\log.txt"    执行jenkins log输出位置

添加参数并将Jenkins参数传递给Unity

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 将参数传递给Unity:

使用定义的变量名加入到命令行中 Name=$Name 

-projectpath %WorkPath% -quit -batchmode -executeMethod BuildApp.BuildAndroid Name=$Name Version=$Version  HotCount=$HotCount ChanelType=$ChanelType -logFile "D:\log.txt"

Unity接收命令行参数并解析:

主要还是这段代码:

string[] parameters = Environment.GetCommandLineArgs();

public class BuildSettingCfg
{
    public string Name = "Res";
    public string Version = "1.0.1";
    public int HotCount = 1;
    public ChannelType ChannelType = ChannelType.OVERSEAS_SDK;    // 渠道宏定义
}

public enum ChannelType
{
    BAIBAO,
    OVERSEAS_SDK
}
public static BuildSettingCfg GetBuildSettingCfg()
        {
            // 获取命令行参数
            string[] parameters = Environment.GetCommandLineArgs();
            BuildSettingCfg buildSettingCfg = new BuildSettingCfg();
            for (int i = 0; i < parameters.Length; i++)
            {
                string str = parameters[i];
                string[] paramArr = str.Split('=');
                if (paramArr.Length <= 1)
                {
                    Debug.Log(paramArr.Length+":" +  paramArr[0]);
                    continue;
                }
                string param = paramArr[1];
                if(str.StartsWith("Name"))
                {
                    buildSettingCfg.Name = param;
                }
                else if(str.StartsWith("Version"))
                {
                    buildSettingCfg.Version = param;
                }
                else if(str.StartsWith("HotCount"))
                {
                    buildSettingCfg.HotCount = Convert.ToInt32(param);
                }
                else if (str.StartsWith("ChannelType"))
                {
                    buildSettingCfg.ChannelType = (ChannelType)Enum.Parse(typeof(ChannelType), param);
                }
            }

            return buildSettingCfg;
        }

设置解析后的对象,并设置Unity

        public static void SetAndroidSetting(BuildSettingCfg cfg)
        {
            PlayerSettings.productName = cfg.Name;
            PlayerSettings.bundleVersion = cfg.Version;
            PlayerSettings.Android.bundleVersionCode = cfg.HotCount;
            
            // 原有宏定义
            string symbol = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android);
            // 移除原来的渠道宏定义
            symbol = symbol.Replace(ChannelType.BAIBAO.ToString(), string.Empty)
                     .Replace(ChannelType.OVERSEAS_SDK.ToString(), string.Empty);
            
            PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android,symbol + ";" + cfg.ChannelType.ToString());
        }

打包完成,压缩安装包 

添加压缩命令行:

unity jenkins打包,Unity,jenkins,自动化,运维,unity

 打包需要时将apk文件路径保存到BuildName.txt文件中

@echo off
cd /d E:
cd E:\RAR解压软件
for /F "delims=;" %%i in (%WorkPath%\Build\BuildName.txt) do set name=%%i
WinRAR.exe a -r -ep1 %name%.rar %name%.apk
echo %name%.apk压缩完成
pause
  • 进入压缩软件安装的盘符
  • 进入压缩软件根目录
  • 读取文件路径
  • 对读取的文件进行压缩

贴一下buildApp代码吧文章来源地址https://www.toymoban.com/news/detail-714942.html

public class BuildApp
    {
        public static string VERSION_File_PATH = Application.dataPath + "/Resources/Version.xml";
        public static string AppName = "MyApp";
        public static string VERSION = "1.0.1";
        public static string PackageName = "DefaultCompany.ResourceManager";
        public static string ABMD5RootPath = Application.dataPath + "/../ABMD5/";
        public static string BuildPath = Directory.GetParent(Application.dataPath) + "/Build/";

        [MenuItem("Tools/一键打包PC")]
        public static void BuildPC()
        {
            // SaveVersion(VERSION,PackageName);
            BuildPipeline.BuildPlayer(EditorBuildSettings.scenes, BuildPath + AppName, BuildTarget.StandaloneWindows64,
                BuildOptions.None);
        }

        public static string GetABMD5FilePath()
        {
            return string.Format("%s%s/%s", ABMD5RootPath, EditorUserBuildSettings.activeBuildTarget.ToString(), VERSION);
        }
    
        public static void SaveVersion(string version, string packageName)
        {
            VersionInfo info = XmlSerializerOpt.DeserializeFile<VersionInfo>(VERSION_File_PATH);
            info.Version = version;
            info.PackageName = packageName;
            XmlSerializerOpt.SaveSerializerFile(VERSION_File_PATH,info);
            AssetDatabase.Refresh();
        }

        [MenuItem("Tools/一键打包Android")]
        public static void BuildAndroid()
        {
            // 获取命令行配置
            BuildSettingCfg buildSettingCfg = GetBuildSettingCfg();
            // 设置命令行
            SetAndroidSetting(buildSettingCfg);
            
            string appName = buildSettingCfg.Name + "_" + DateTime.Now.ToString("yyyy_MM_dd_hh_mm") + ".apk";
            string appFullName = BuildPath + "Android/" + appName;
            SaveAppName(appFullName.Replace(".apk",string.Empty));
            BuildPipeline.BuildPlayer(EditorBuildSettings.scenes, appName, BuildTarget.Android,
                BuildOptions.None);
        }

        public static void SaveAppName(string appFullName)
        {
            StreamWriter sr = File.CreateText(BuildPath + "BuildName.txt");
            sr.Write(appFullName);
            sr.Close();
        }

        public static BuildSettingCfg GetBuildSettingCfg()
        {
            // 获取命令行参数
            string[] parameters = Environment.GetCommandLineArgs();
            BuildSettingCfg buildSettingCfg = new BuildSettingCfg();
            for (int i = 0; i < parameters.Length; i++)
            {
                string str = parameters[i];
                string[] paramArr = str.Split('=');
                if (paramArr.Length <= 1)
                {
                    Debug.Log(paramArr.Length+":" +  paramArr[0]);
                    continue;
                }
                string param = paramArr[1];
                if(str.StartsWith("Name"))
                {
                    buildSettingCfg.Name = param;
                }
                else if(str.StartsWith("Version"))
                {
                    buildSettingCfg.Version = param;
                }
                else if(str.StartsWith("HotCount"))
                {
                    buildSettingCfg.HotCount = Convert.ToInt32(param);
                }
                else if (str.StartsWith("ChannelType"))
                {
                    buildSettingCfg.ChannelType = (ChannelType)Enum.Parse(typeof(ChannelType), param);
                }
            }

            return buildSettingCfg;
        }

        public static void SetAndroidSetting(BuildSettingCfg cfg)
        {
            PlayerSettings.productName = cfg.Name;
            PlayerSettings.bundleVersion = cfg.Version;
            PlayerSettings.Android.bundleVersionCode = cfg.HotCount;
            
            // 原有宏定义
            string symbol = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android);
            // 移除原来的渠道宏定义
            symbol = symbol.Replace(ChannelType.BAIBAO.ToString(), string.Empty)
                     .Replace(ChannelType.OVERSEAS_SDK.ToString(), string.Empty);
            
            PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Android,symbol + ";" + cfg.ChannelType.ToString());
        }
    }

到了这里,关于Unity 基于Jenkins自动化打包流程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jenkins自动化打包脚本

    jenkins可以设置定时任务打包,也已手动点按钮打包,还可以通过执行http请求打包,今天我们就通过shell脚本,通过curl命令进行jenkins打包。 2.1 在jenkins上构建项目 设置触发器

    2024年02月13日
    浏览(40)
  • jenkins-自动化打包部署

    环境:         centos 7.2或者更新         rmp包:官方下载地址 Redhat Jenkins Packages         java-1.8.0 安装: 配置:jenkins 配置文件 /etc/sysconfig/jenkins  ,可以根据需求自行修改 访问web 并进行配置 稍等一会,就可以正常登录了 根据需要安装自定义插件,本次选择是推

    2024年02月13日
    浏览(45)
  • Android使用Jenkins自动化打包

    了解Jenkins工具 Jenkins在Windows系统下的环境搭建 Jenkins 的Android 构建环境配置 创建FreeProject Item,配置Android Gradle工程构建环境 Jenkins格言: Build great things at any scale 。 Jenkins是一款开源CICD软件,提供超过1000个插件用于支持各种自动化任务,包括构建、测试和部署软件。 Jenkins 支

    2024年02月10日
    浏览(43)
  • jenkins编译打包及自动化部署

    一:简介 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 官网文档:https://www.jenkins.io/zh/doc/ 二:下载及安装(Windows为例) 下载Jenkins安装包 需要安装jdk(11和17版本

    2024年03月21日
    浏览(50)
  • 17.Jenkins完成自动化 拉取,编译,打包,部署

    1.1安装gitee插件到jenkins  gitee默认不允许内网触发。----必须要配置内网穿透 NATAPP -       思考: 我们的项目和jenkins是不是都在一台服务器上。因为jenkins它所在的服务器非常耗费资源,因为jenkins本身要集成很多软件。如果这时项目也部署到当作jenkins所在的服务器,势必会导致

    2024年02月04日
    浏览(46)
  • Jenkins自动化部署搭建流程

    进入Jenkins官网下载地址点击Docker,并且记住Jenkins最新稳定版本(LTS) 点击Docker后会自动跳转到 Jenkins的镜像下载页面 ,然后找到刚刚的稳定版本,copy docker pull jenkins/jenkins:2.440.2-lts 语句 -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker 将宿主机的docker环境映射到容器中

    2024年04月12日
    浏览(43)
  • Jenkins的环境部署,(打包、发布、部署、自动化测试)

    一、Tomcat环境安装 1.安装JDK(Java环境) JDK下载地址:Java Downloads | Oracle 安装好后在系统环境变量里配置环境变量: ①添加JAVA_HOME 变量名:JAVA_HOME 变量值:C:Program FilesJavajdk1.8.0_181(根据自己的实际路径配置) ②添加CLASSPATH 变量名:CLASSPATH 变量值:.;%JAVA_HOME%libdt.jar;%J

    2024年01月18日
    浏览(41)
  • uniapp:HbuildeX项目实现jenkins自动化打包上传

    前序: 基于HBuilderX创建的项目。 配置uniapp 指令式打包APP、微信小程序、H5。 ubuntu系统上的jenkins部署基础指令,发送给windows服务器上,windows服务器使用HBuilderX软件的cli.exe执行相关cli命令打包,然后jenkins再调用接口下载打包后的文件。 可实现多线程同时打包。 大致流程:

    2024年02月16日
    浏览(62)
  • Jenkins+Maven+Gitlab+Tomcat 自动化构建打包,部署

    1、安装服务 Jenkins工具、环境、插件配置 全局变量配置 Manage JenkinstoolsJDK 安装 安装插件 Deploy to container 安装此插件,才能将打好的包部署到tomcat上     配置国内mvn源 创建maven项目 1  2   3    4    5    6    7    8     9 10  

    2024年02月05日
    浏览(54)
  • 前端项目打包和自动化部署(jenkins+gitee+nginx)

    1. 传统的开发模式 在传统的开发模式中,开发的整个过程是按部就班就行: 但是这种模式存在很大的弊端: 工作的不协调:开发人员在开发阶段,测试和运维人员其实是处于等待的状态。等到测试阶段,开发人员等待测试反馈bug,也会处于等待状态。 线上bug的隐患:项目准

    2024年02月01日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包