zoukankan      html  css  js  c++  java
  • 关于基于Nexus3和Docker搭建私有Nuget服务的探索

    背景简介

    NuGet是Microsoft开发平台的程序集包管理器,它由客户端工具和服务端站点组成,客户端工具提供给用户管理和安装/卸载软件程序包,以及打包和发布程序包到NuGet服务端站点等功能,服务端站点存储已经发行的软件包,并为NuGet客户端软件包库提供服务,使软件包共享给其他的开发者。

    基于Docker来部署和创建一套可用的私有Nuget是我们的今天探索的主题,这在企业开发中是很重要的环节。我们将选用Nexus来搭建我们的私有Nuget服务。

    适用于任何现代开发平台的基本工具可充当一种机制,通过这种机制,开发人员可以创建、共享和使用有用的代码。 通常,此类代码捆绑到“包”中,其中包含编译的代码(如 DLL)以及在使用这些包的项目中所需的其他内容。

    对于.NET(包括 .NET Core),共享代码的 Microsoft 支持的机制则为 NuGet ,其定义如何创建、托管和使用面向 .NET 的包,并针对每个角色提供适用工具。

    简单来说,NuGet 包是具有 .nupkg 扩展的单个 ZIP 文件,此扩展包含编译代码 (Dll)、与该代码相关的其他文件以及描述性清单(包含包版本号等信息)。 使用代码的开发人员共享创建包,并将其发布到公用或专用主机。 包使用者从适合的主机获取这些包,将它们添加到项目,然后在其项目代码中调用包的功能。 随后,NuGet 自身负责处理所有中间详细信息。

    基于Docker On WSL2安装Nexus3

    创建持久化目录

    mkdir /opt/nexus && chown -R 200 /opt/nexus
    
    docker run --publish 8081:8081 --name nexus --restart always 
    --volume /opt/nexus:/nexus-data 
    sonatype/nexus3:latest
    

    http://localhost:8081

    登录Nexus

    从右上角,登陆管理员账号,默认的账号:admin,密码admin123

    ok,你会看到密码错误的提示,很好,实际上密码是放在/nexus-data/admin.password文件中了

    那根据我们之前的volume的绑定,实际这个文件在/opt/nexus/admin.password位置。

    vim /opt/nexus/admin.password
    

    将看到admin的真实密码,便可以拿去登录了

    查看内置源仓储

    进入Nexus后,点击顶部的设置按钮

    即可查看到内置的源仓储

    我们会看到Nuget已经默认支持了,并且创建了三个源仓储

    • 托管仓库(nuget-hosted),负责包的上传

    类型是hosted,表示托管仓库。我们一般把自己开发的包上传到该仓库中。

    • 代理仓库(nuget.org-proxy),负责包的代理

    类型是proxy,表示代理仓库。我们向它请求包(package)的时候,如果本地有,它就从本地提供,如果本地没有,它会从nuget.org下载到本地,然后给我提供这个包。

    • 仓库组(nuget-group),负责包的获取

    类型是group,表示仓库组,它集合了nuget.org-proxynuget-hosted,能对外提供上述两者中的包。

    设置并获取Nuget授权

    切换到Nexus的左侧菜单Security-Realms页面。

    Active realms列表中NuGet API-Key Realm项,选中后添加到右侧激活清单中。

    然后点击save即可。

    切换到Nexus的右侧顶部菜单admin用户页面的NuGet API Key子页面。

    点击Access API Key按钮,弹出管理员密码授权,输入后即可得到一个NuGet API Key

    如果你想一次设置以后都便捷使用,可以基于Nuget.exe做如下设置:

    nuget setapikey 2187ef44-****-3037-afb3-*******29c5 -source http://localhost:8081/repository/{repositoryname}/
    

    打包并上传

    准备

    先必须前往Nuget官方下载一个最新的程序回来。

    https://dist.nuget.org/win-x86-commandline/latest/nuget.exe

    官网:https://www.nuget.org/downloads

    我们需要将nuget.exe丢到环境变量里面去,这样才可以方便在终端中使用它,你可以前往系统环境变量那里去添加一项,亦或教你一招,直接把nuget.exe丢到C:Windows文件夹中即可。

    打包

    新建一个.Net Standard标准的类库程序,然后右键属性-打包,填写打包的版本和当前包版本描述和说明。

    通过右键项目,打包操作进行打包,亦或可以通过属性-打包中勾选在构建时生成Nuget包在编译,得到我们的示例包:DemoPackage.1.0.0.nupkg

    如果你习惯用命令行,也可以切换到项目文件夹路径执行以下打包终端命令:

    在操作之前,你需要切换项目模式到Release,并且执行一次编译。

    dotnet pack -c Release
    

    上传

    前往*.nupkg所在目录,或者得到其完整路径。

    参考命令模板:nuget push {dll}.nupkg {apiKey} -source {http://yourrepositorysource/}

    例如:

    nuget push DemoPackage.1.0.0.nupkg 2187ef44-****-3037-afb3-65b*******9c5 -source http://localhost:8081/repository/nuget-hosted/
    

    通过访问链接可查到到已经推送成功

    http://localhost:8081/repository/nuget-hosted/nuget

    使用

    打开Visual Studio,右键项目,选择管理Nuget程序包,在进入Nuget包管理界面右上角的设置页面。

    将前面的源地址添加进来,比如:http://localhost:8081/repository/nuget-hosted/

    确定添加后,回到包管理界面,切换到浏览视图,你将能看到刚刚上传好的包,选中即可安装使用。

    删除

    参考命令模板:nuget delete {dll} {version} -Source {http://yourrepositorysource/} -apikey {apiKey}

    例如:

    nuget delete DemoPackage 1.0.0 -Source http://localhost:8081/repository/nuget-hosted/ -apikey 2187ef44-****-3037-afb3-65b*******9c5
    

    自定义项目Nuget配置

    有时候,我们希望自定义的Nuget能跟着项目走,那么很好办,我们只需要在项目跟目录新建一个名叫NuGet.Config的文件即可

    文件内容比如:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <packageSources>
        <add key="nuget.org" value="https://www.nuget.org/api/v2" />
    	  <add key="MySource" value="http://localhost:8081/repository/nuget-hosted/" />
      </packageSources>
    </configuration>
    

    重启VS项目之后,选中项目,右键管理Nuget程序包,可以看到我们定义的Nuget源,一样的可以快速安装已上传的包。

    在Visual Studio Code中使用Nuget包管理插件

    新建自定义的包仓库(Nuget Repository)

    NexusRepository页面的Repositories中,可以点击创建按钮(Create Repository)

    找到仓库类型nuget(hosted)或者nuget(group)任意即可,默认建议前者即可。

    输入你想自定义的名称,比如:Demo,点击创建即可。

    注意,如果你选择的是nuget(group)类型,将会代理获取到所有包,就是包括私有和公有的一起。

    附录

  • 相关阅读:
    C
    A
    hdu 三部曲1 Popular Cows tarjan算法&&缩点&&拓扑排序
    hdu 三部曲 Going Home 最小费用最大流 EK算法
    hdu 三部曲 1Minimum Cost 最小费用最大流EK算法
    hdu 三部曲1 Is the Information Reliable? 差分约束 bellman_ford算法
    hdu 三部曲1 Intervals 差分约束问题 spfa算法
    hdu 三部曲 Crashing Robots
    hdu 三部曲2 Rebuilding Roads
    Codeforces 1277C As Simple as One and Two
  • 原文地址:https://www.cnblogs.com/craigtaylor/p/13727225.html
Copyright © 2011-2022 走看看