3D领域事务

工程院-3D领域事务-Unity3D文档


Unity3D-NPM提交流程

[TOC]

最后修订日期 2023-11-24
作者 林七佛
V1.3.0 创建文档

NPM 简介

    我们工程院使用的NPM的全称是Sonatype Nexus Repository Manager,它是一款强大的仓库管理器,可以用于存储和分发Maven、NuGet、npm、RubyGems等各种类型的软件包。它支持两种类型的仓库:代理仓库和托管仓库。

- 代理仓库:代理远程仓库,例如Maven Central,可以缓存远程仓库中的软件包,以减少对远程资源的依赖和提高本地开发的效率。 - 托管仓库:用于存储你自己开发的软件包,可以是私有的或公开的。

    Nexus Repository Manager的主要特点包括: 1. 组件管理:Nexus Repository Manager可以帮助你管理和组织软件组件,提供了丰富的元数据,以便于搜索和发现。 2. 安全和许可证合规:Nexus Repository Manager可以集成Sonatype的CLM,提供组件的安全和许可证合规性检查。 3. 集成和自动化:Nexus Repository Manager提供了REST API,可以方便地集成到CI/CD流程中。

共享平台的NPM地址:[仓库管理地址](http://nexus.sdp.nd/ "仓库管理地址")

说明

    虚拟实验室的组件构建和发包目前都是利用SDP进行的,下面的文档也是基于SDP服务。 此外,我们也编写了一些构建脚本,在本示例中都会给出说明。

前置工作

    Unity NPM发包的流程是针对U3D的UPM包的,所以我们从构建UPM包开始(构建的最后一个流程包括发NPM包),这里我们以[虚拟实验室]的[物件播放组件vlab-equipmentplayer]为例。如果只对发UPM包有兴趣,可以直接搜索npm publish命令

确保共享平台已创建U3D组件

[共享平台平台地址](https://d.101.com/ "共享平台地址") 请确保已经在共享平台上创建好【U3D组件】,如果没有就需要有权限的帮忙新建一个

确保工程目录中的代码结构符合UnityPackage包的规范

具体请参考[Unity官网](https://docs.unity.cn/cn/2019.4/Manual/cus-layout.html "Unity官网")

确保生产管理平台上有权限

可以打开下面的链接查看权限,若无权限,可以找林瑶申请

[生产管理平台地址](https://vlab-mes-web.sdp.101.com/#/ "流程工具地址")

类型实验室作为基础组件添加到流程平台

新增基础组件

[实验资源数据看板 (101.com)](https://nd99u.site.101.com/bcs/#/app-sharing/c1dab7c4669640ab9615a8d54e2c0ecf?&_share=true&bcsAppId=c1dab7c4669640ab84f76c5cd8c2cae4 "实验资源数据看板 (101.com)")

填写说明 组件编码:同共享平台组件编码,比如本页第一张图vlab-equipmentplayer SDP组件ID:同共享平台组件URL中的appid字段,参考本页第一张图的appId=652dfad729d65d021d015d30 SDP组件名称:同共享平台组件的名称 组件包ID集合:共享平台申请组件时用了namespace + "." + 组件编码 组件类型:根据类型选择交互或者播放

创建版本

[入口地址](https://vlab-mes-web.sdp.101.com/#/ "入口地址")

选择生产线:未来实验室基础组件研发 开发负责人:选择自己,注意这里选谁,单据就会下单到谁 是否需要测试:这里选择否 然后填上其余必要信息

提交后就可以下单到负责人

跑通线上构建流程

构建流程说明

构建时生产管理平台会发送对应的构建请求给到共享平台

@startuml
node 生产管理平台
node 共享平台
生产管理平台 ...> 共享平台

共享平台jekins构建流程(含发NPM包)

@startuml
start
:拉取代码;
:BeforeBuild.bat;
:Build sln;
:Nuget publish;
:AfterBuild.bat;
end
@enduml

工程目录结构如下所示:

BeforeBuild.bat 对应的是U3dBuildBeforeHook.bat Build sln 对应的是调用工程目录下的 【组件id】.sln文件来构建 Nuget publish 对应的是调用工程目录下的【组件id】.nuspec 文件来发布nuget包 AfterBuild.bat 对应的是调用工程目录下的U3dBuildBeforeHook.bat

基于上述流程,类型实验室组件的构建原理是:

目标是要要将类型实验室的代码发布Unity的pakcage包【UPM包】到工程院的NPM服务器上,因此 第一步:使用构建时的版本号,package内容如下

{
  "name": "com.nd.vlab-equipmentplayer",
  "displayName": "vlab-equipmentplayer",
  "version": "0.0.0-Version",
  "dependencies": {
  }
}

修改U3dBuildBeforeHook

git clean -fd
git reset --hard
@echo off & setlocal enabledelayedexpansion
rem set Version=1.2.3-pred_kdjfdkf
rem set CommitId=dd122343
cd /d %~dp0
for /f "eol=* tokens=*" %%j in (package.json) do ( 
    set a=%%j 
    set "a=!a:0.0.0-Version=%Version%!" 
    echo !a!
    echo !a!>>$
) 
move $ package.json

第二步:【Build sln】是共享平台一定要调用的,因此可以提供空的sln文件(如果要进行Sonar静态代码检查、代码覆盖率等,空的sln就不行了),保证构建能成功,不报错就行。 构建过程如果遇到问题,可以从反馈的日志文件中分析问题并解决。

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.32413.511
MinimumVisualStudioVersion = 10.0.40219.1
Global
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {DA2BAD2E-4048-424B-A0D8-74E39B53386F}
    EndGlobalSection
EndGlobal

第三步:添加.nugspec文件【Nuget publish】是共享平台一定要调用的,因此可以把当前组件的package.json文件发布到nuget上

<?xml version='1.0' encoding='UTF-8'?>
<package>
  <metadata>
    <id>$ID$</id>
    <version>$VERSION$</version>
    <title>vlab-equipmentplayer</title>
    <authors>HuangJinmin</authors>
    <owners>HuangJinmin</owners>
    <iconUrl>https://litjson.net/assets/img/logo.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>vlab-equipmentplayer</description>
    <releaseNotes>
    </releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags>vlab-equipmentplayer</tags>
  </metadata>

  <files>
    <file src="package.json" target="ref\npm\vlab-equipmentplayer\" />
  </files>
  </package>

第四步: 发布UPM包工程院的服务器上,在【AfterBuild.bat】中处理

del /Q jenkins_build_info.log
npm publish

第五步:可选,配置【.npmignore】文件,忽略不想发布到服务器上的文件

后续接入可以参考已经成功的样例:物件播放器配置方法 http://gerrit.sdp.nd/component-dll/vlab-equipmentplayer

按照上述思路提交代码后,可以尝试构建,直到构建成功,这步是最难的一步,有任何疑问可以咨询七佛或张煜园

构建结果确认

待构建成功后,可以到这个地址查看UPM包是否存在,如果存在就可以在Unity的PackageManager中看到对应的包 http://nexus.sdp.nd/repository/unity-upm/

为工程添加package

1.点击windows,选中Package Manager 可以看到刚发布的packager包,右下选择install

2.手动修改配置文件

如果在upm上能查到包,但是unity工程中的Package Manager查不到的话,可以通过修改配置文件来添加包

manifest中
"dependencies"字段下添加
"com.nd.vlab-equipmentplayer": "0.0.9-pre0"
packages-lock中
"dependencies"字段下添加
    "com.nd.vlab-equipmentplayer": {
      "version": "0.0.9-pre0",
      "depth": 0,
      "source": "registry",
      "dependencies": {},
      "url": "http://nexus.sdp.nd/repository/unity-upm"
    }

其他实验室组件参考样例

Action组件-原由金民负责设计,后交接周竑(2023-10)。

参考资料

https://www.showdoc.com.cn/VLab/9620843670268100 https://www.showdoc.com.cn/VLab/9569593866775911 https://www.showdoc.com.cn/VLab/9751206536322905

页面列表

ITEM_HTML