背景简介

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 --publish 8082:8082 --publish 8083:8083 --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)类型,将会代理获取到所有包,就是包括私有和公有的一起。

附录

关于基于Nexus3和Docker搭建私有Nuget服务的探索的更多相关文章

  1. 温故知新,基于Nexus3和Docker搭建私有Docker Mirrors镜像库

    前言 接着上一篇文章关于基于Nexus3和Docker搭建私有Nuget服务的探索,我们可以进一步利用Nexus3来创建一个私有的Docker镜像库满足内部需求. 仓库类型 hosted: 本地存储, ...

  2. docker 部署私人 nuget 服务

    使用docker搭建私有Nuget服务 首先在linux服务器上创建两个容器挂着目录 mkdir /home/nuget/db mkdir /home/nuget/packages 并且对该目录指定写 ...

  3. NET Core:搭建私有Nuget服务器以及打包发布Nuget包

    docker 安装 https://www.cnblogs.com/liuxiaoji/p/11014329.html 1.使用docker搭建私有Nuget服务器 docker run -d -p ...

  4. 搭建内部NuGet服务

    简介 NuGet相当于Python中的pip,nodejs中的npm,用来管理.net/.net core的程序集版本,也叫包管理器.在框架化.模块化开发中使用nuget服务必不可少,尤其是在abp开 ...

  5. 搭建基于.NetFrameWork的私有nuget服务端及打包项目发布上传

    一.私有Nuget服务端搭建 1.创建一个.NetFramework web项目 2.在nuget管理中 安装 nuget.server包 3.安装完成后修改web.config里面的 apikey ...

  6. 搭建私有Nuget仓库

    使用Nexus搭建私有Nuget仓库 https://www.cnblogs.com/Erik_Xu/p/9211471.html 前言 Nuget是ASP .NET Gallery的一员,是免费.开 ...

  7. 搭建私有 Nuget 服务器教程(1)

    对于 .NET 开发者来说,nuget 是必不可少的程序包管理工具.相应地,大部分开发团队都需要在内部搭建 Nuget 服务器,以管理私有 nupkg 包.本教程所使用的 Nuget 服务器,不是微软 ...

  8. Docker 搭建私有仓库

    Docker 搭建私有仓库 环境: docker 版本 :18.09.1 主机地址:192.168.1.79 1.运行并创建私有仓库 docker run -d \ -v /opt/registry: ...

  9. 使用BaGet 搭建私有nuget 服务器

    使用BaGet 搭建私有nuget 服务器 netNugetBaGet 引言 为了增强代码的安全性和企业团队开发的高效性,搭建私有的package 包管理服务器是很有必要的,搭建私有的类库管理服务有以 ...

随机推荐

  1. MSSQL·查询存储过程中的关键字

    阅文时长 | 0.22分钟 字数统计 | 408字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·查询存储过程中的关键字』 编写人 | SCscHero 编写时间 | 20 ...

  2. .NET平台系列9 .NET Core 3.0 / .NET Core 3.1 详解

    系列目录     [已更新最新开发文章,点击查看详细] .NET Core 3.0 于 2019年9月23日发布,重点是增加对同时支持使用 Windwos Forms.WPF 和 Entity Frm ...

  3. IT菜鸟之虚拟机VMware的安装

    老师说过,如果想学好Linux,最好不要在实体机上安装Linux,因为学习需要经常折腾,在实体机上做实验,出现故障就要重新安装,这样绝大多数时间都会浪费在安装上. 这时我们需要一个工具,它就是虚拟机. ...

  4. mysql基础之数据库变量(参数)管理

    数据库的数据存放路径:[root@ren7 mysql]# pwd /var/lib/mysql [root@ren7 mysql]# ls aria_log.00000001 ibdata1 mul ...

  5. 使用Typora编写Markdown你真的会了吗

    目录 Typora 介绍 使用 常用快捷键 概述 标题 一级标题 二级标题 方式(推荐) 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 段落 粗体斜体删除线 下划线 注释 分割线 脚注 ...

  6. java内部类与静态内部类对比

    内部类 静态内部类 有一个隐式引用,指向实例化这个对象的外部类对象 没有这个附加指针 不支持静态字段(language15) 支持哦 不支持静态方法 (language15) 支持哦 接口中的内部类自 ...

  7. 用virtualenv建立Python独立开发环境

    1.用pip安装virtualenv sudo apt-get install python-virtualenv 2.1 创建python2的虚拟环境,进入要创建虚拟环境的目录下,我是放在/home ...

  8. 【六】K8s-Pod 水平自动扩缩实践(简称HPA)

    一.概述 Pod 水平自动扩缩(Horizontal Pod Autoscaler)简称 HPA,HPA 可以根据 CPU 利用率进行自动伸缩 Pod 副本数量,除了 CPU 利用率,也可以基于其他应 ...

  9. ThinkPHP 全局异常处理

    wqy的笔记:http://www.upwqy.com/details/273.html 在thinkphp6 和 thinkphp5 全局异常处理 稍有不同 ThinkPHP6 在 tp6 中 框架 ...

  10. [ Java面试题 ]Java 开发岗面试知识点解析

    如背景中介绍,作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向. 在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几个部分: Java 基础知识点 Jav ...