GitLab 管理 NuGet 包

1 概览

在服务器上构建项目时,需要引用 nuget.org 之外的包,如公司内部开发的、第三方未发布到 nuget.org 上的。怎么办?

GitLab 提供了 Package Registry 来解决这个问题。

2 上传 NuGet 包到指定项目中

  1. 新建或使用一个已有项目,作为存放 NuGet 包的项目,为其他需要引用对应 NuGet 包的项目提供 Nuget 源和源上所有包的依赖。

  2. 在该项目的【仓库】设置中,设置【部署令牌(Deploy Token)】

  3. 首先设置一个权限为【write_package_registry】的令牌,允许对软件包库进行读取、写入和删除访问。定义一个合适的名称和到期日期,到期日期不设置则默认永不过期。用户名选填。记录服务器为令牌生成的密码,该密码只会在设置时出现,之后无法再次查看。用于上传包。

  4. 再设置一个权限为【read_package_registry】的令牌,允许对软件包仓库进行只读访问。定义一个合适的名称和到期日期,到期日期不设置则默认永不过期。必须填写一个合适的用户名,如 DEPLOY_READ。记录服务器为令牌生成的密码,该密码只会在设置时出现,之后无法再次查看。用于添加源。

  5. 定位到所需上传的 Nuget 包,如在本地磁盘目录下,执行命令:

    bash 复制代码
    dotnet nuget push <待上传的Nuget包> --source https://gitlab.example.com/api/v4/projects/<your_project_id>/packages/nuget/index.json --api-key <write_package_registry的令牌密码>

    api-key 还可以是个人访问令牌或者流水线作业令牌,该指令需要 GitLab v16.1 以上的支持

3 添加 GitLab 上的 NuGet 源

  1. 构建前,为项目所在构建环境内添加新的 NuGet 源,执行命令:

    bash 复制代码
    dotnet nuget add source "https://gitlab.example.com/api/v4/projects/<项目ID>/packages/nuget/index.json" --name <源名称> --username <read_package_registry的令牌用户名> --password <read_package_registry的令牌密码>

    源名称可以是任意合适的名称,如 gitlab-software-group-projects

4 管理 NuGet 包源

  1. %APPDATA%/NuGet/ 中找到 NuGet.Config,进行编辑。也可以在如 Visual Studio 这样的 IDE 中找到对应的【NuGet 包管理器设置】,从而在 UI 界面选项中对配置文件进行修改。

  2. 使用 CLI 添加过 NuGet 源,可以在配置文件中 packageSources 查看到。

    xml 复制代码
    <packageSources>
      <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
      <add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
      <add key="gitlab-software-group-projects" value="https://gitlab.example.com/api/v4/projects/<项目ID>/packages/nuget/index.json" />
    </packageSources>
  3. 出于安全考虑,NuGet 现要求对程序包进行包源映射,告知机器某个程序包应该访问哪个包源进行下载,避免不法分子利用同名的程序包链接到未知的地址。配置文件中编辑 packageSourceMapping 来进行包源映射设置。

    xml 复制代码
    <packageSourceMapping>
      <packageSource key="nuget.org">
        <package pattern="*" />
      </packageSource>
      <packageSource key="gitlab-software-group-projects">
        <package pattern="A.*" />
        <package pattern="B.*" />
      </packageSource>
    </packageSourceMapping>

5 参考资料

相关推荐
rockey6276 小时前
AScript异步执行与await关键字
c#·.net·script·eval·expression·异步执行·动态脚本
叫我少年8 小时前
ASP.NET Core 最小 API 快速参考
.net·api
木雷坞17 小时前
csdn-enterpriseGitLab Runner docker pull 慢:并行流水线镜像拉取排查
运维·docker·容器·gitlab
一只大袋鼠17 小时前
Git (三):Tag 标签管理、图形工具、IDEA 集成与 GitLab 私有化部署
开发语言·git·gitlab
步步为营DotNet17 小时前
深入.NET 11:C# 14 在边缘计算数据处理的优化与实践
c#·.net·边缘计算
步步为营DotNet2 天前
洞悉.NET 11:Blazor 与 Microsoft.Extensions.AI 的融合创新实践
人工智能·microsoft·.net
回忆2012初秋2 天前
.NET 8.0 实战:基于 MQTTnet 封装高可用的 MQTT 发布/订阅工具类
开发语言·mqtt·.net
回忆2012初秋2 天前
.NET 8.0 工业物联网实战:基于 S7netplus 封装高可用西门子 PLC 通信类
物联网·.net
学以智用3 天前
.NET Core 仓储模式(Repository Pattern)完整教程
后端·.net
.NET修仙日记3 天前
.NET EFCore批量插入性能优化实战:30秒 → 0.5秒
性能优化·c#·.net·.netcore·微软技术·efcore·踩坑实录