首页 > 编程语言 > 详细

Unity2018.3 + Jenkins 自动化打包方案(Windows)

时间:2020-06-07 12:06:02      阅读:238      评论:0      收藏:0      [点我收藏+]

项目需要自动打包.策划想要以出包形式及时看到主干提交内容.(漏提交报错/少资源等问题仍然无法避免)

 

1,你了解Jenkins吗?

  Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。主要功能包括:1、持续的软件版本发布/测试项目。2、监控外部调用执行的工作。这么说比较官方,说白了,它就是一种集承了多种常用的插件于一身的工具平台,通过这个平台你能很方便的管控你的项目!它的强大之处在于它能直接调用外部的shell指令和bat,那么今天我们一起去解开一点点它的什么面纱,为什么说是一点点呢?因为它太强大了,太深了!
 
 
本次使用Jenkins版本2.222.4
安装完毕后 会自动打开浏览器 http://localhost:8080/login?from=%2F
提示输入以下内容的密码
D:\Program Files (x86)\Jenkins\secrets\initialAdminPassword
技术分享图片

 

 

 

输入密码后等待自己加载.安装插件
先安装推荐的插件
技术分享图片

 

可见. 其中包含了 汉化,git,svn,ant,gradle等必要插件

 

创建管理员(不能使用默认名admin)

技术分享图片

 

安装完成后,打开系统设置。

 

 

 

 

(似乎是因为安装目录有空格  变成了一个大坑 导致问题1 2)
要构架Unity脚本先要安装Unity插件,在插件管理–寻找插件–Unity 下载安装

技术分享图片

 

 

 

 技术分享图片

 

增加全局变量 支持中文UTF8

技术分享图片

 

 

 

 

 

 

 

 

配置Unity安装目录

技术分享图片

 

 创建一个自由风格的任务

技术分享图片

 

 

 

配置源码管理 SVN地址和本地项目位置 SVN用户


技术分享图片

 

这里疑似发生SVN目录的层级问题.实际项目目录并未跟Unity根目录同级别 .尝试编译.无法通过并创建了空的Assets 等目录

可能是是Jenkins SVN插件和本地SVN同时参与了工作目录导致的冲突

技术分享图片

 

 

 

 

 

 

 

配置构建工具

写入构建命令行参数

 

1 使用Unity插件构建

技术分享图片

 

 

2 使用bat命令行来构建

在Editor目录增加对应的Jenkis打包脚本 接受构建命令行参数来控制打包流程

 

@echo off
set UnityPath="D:\Program Files\Unity\Editor\Unity.exe"


echo Start Build Package
REM BuildAssetBundle
%UnityPath% -projectPath -quit -batchmode  -logFile D:\tmp\build.log -executeMethod PerformBuild.CommandLineBuild ver-%SVN_REVISION% build-%buildoption%
echo Build Package Finished

if not %errorlevel%==0 ( goto fail ) else ( goto success )
 
:success
echo Build Windows OK
REM Copr Dir
goto end
 
:fail
echo Build Windows Fail
echo errorlevel = %errorlevel%
goto end
 
:end

  

  对应的PerformBuild打包脚本

using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
/// <summary>
/// Jenkis打包工具配置脚本
/// </summary>

public class PerformBuild
{
    static string[] GetBuildScenes()
    {
        List<string> names = new List<string>();

        foreach (EditorBuildSettingsScene e in EditorBuildSettings.scenes)
        {
            if (e == null)
                continue;

            if (e.enabled)
                names.Add(e.path);
        }
        return names.ToArray();
    }

    static string path = "D:/tmp/";

    /// <summary>
        /// 此方法是从jienkins上接受  数据的 方法
        /// </summary>
    public static void CommandLineBuild()
    {
        try
        {
                        
            Debug.Log("Command line build\n------------------\n------------------");
            
            string[] scenes = GetBuildScenes();
            string buildOption = GetJenkinsParameter("buildoption");//这里的路径是打包的参数定义
            Debug.Log(buildOption);

            string ver = GetJenkinsParameter("ver");//这里的路径是打包版本定义
            Debug.Log(ver);
            BuildOptions option = BuildOptions.None;
            if(buildOption == "dev")
                option = BuildOptions.Development;

            for (int i = 0; i < scenes.Length; ++i)
            {
                Debug.Log(string.Format("Scene[{0}]: \"{1}\"", i, scenes[i]));
            }
            //ProjectPackageEditor.BuildByJenkins(GetJenkinsParameter("Platform"), GetJenkinsParameter("AppID"), GetJenkinsParameter("Version"), GetJenkinsParameter("IPAddress"));
            Debug.Log("Starting Build!");


            BuildPipeline.BuildPlayer(scenes, path + buildOption + "_" + ver, BuildTarget.StandaloneWindows, option);
            Debug.Log("Starting End!");
        }
        catch (Exception err)
        {
            Console.WriteLine("方法F中捕捉到:" + err.Message);
            throw;//重新抛出当前正在由catch块处理的异常err
        }
        finally
        {
            Debug.Log("---------->  I am copying!   <--------------");
        }
    }


    /// <summary>
        ///解释jekins 传输的参数
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
    static string GetJenkinsParameter(string name)
    {
        foreach (string arg in Environment.GetCommandLineArgs())
        {
            if (arg.StartsWith(name))
            {
                return arg.Split("-"[0])[1];
            }
        }
        return null;
    }
}

  

增加构建后的操作

 

 

修改Jenkins 主目录  (失败,会导致jenkins配置失效无法启动的问题)

一、Windows环境更改Jenkins的主目录

Windows环境中,Jenkins主目录默认在C:\Documents and Settings\AAA\.jenkins 。

可以通过设置环境变量来修改,例如: JENKINS_HOME=C:\jenkins,然后重新启动jenkins。

Jenkins.xml 修改
env name=“JENKINS_HOME” value="%BASE%"

env name=“JENKINS_HOME” value="%JENKINS_HOME%"

 

 重启指令API

http://localhost:8080/restart

 

jenkins 启动指令

cmd 命令行  到jenkins目录下启动服务  net start jenkins

 

问题汇总

1 Windows环境中,Jenkins可能会找不到绝对路径的目录.SVN配置的local moudle directory 会提示找不到路径.....改为使用默认路径 D:\Program Files (x86)\Jenkins\workspace\TestUnity(项目名)

傻傻的路径 拼接问题 " Couldn‘t set project path to: D:/Program Files (x86)/Jenkins/workspace/TestUnity/D:/鐗堟湰搴?/jenkins_out"

"Couldn‘t set project path to: D:/Program Files (x86)/Jenkins/workspace/TestUnity/jenkins_out"  路径名还不能有空格 使用 路径最好使用引号"D:\jenkins_out"

您需要格式化 -projectPath="D:\jenkins_out" 选项,并且在 -projectPath 之间使用等号和路径,而不是文档中指出的空格

 

2 Unity3d插件导致目录权限问题   改用bat命令行来进行打包

executeMethod class ‘PerformBuild‘ could not be found.
Argument was -executeMethod PerformBuild.CommandLineBuild

折腾一大圈最后确认时-projectPath配置应该是项目Assets上一级目录 .如果目录不正确则找不到PerformBuild脚本

 

 

Unity2018.3 + Jenkins 自动化打包方案(Windows)

原文:https://www.cnblogs.com/xiloweiEVE/p/13054785.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!