久趣下载站

当前位置: 首页 » 游戏攻略 » 使用GitLab Package Registry管理NuGet包

使用GitLab Package Registry管理NuGet包

在服务器上构建项目时,可能需要引用nuget.org之外的包,如公司内部开发的或第三方未发布到nuget.org上的包。这时可以使用GitLab提供的Package Registry来解决这个问题。

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

上传NuGet包到指定项目中

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

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

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

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

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

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以上的支持。

添加GitLab上的NuGet源

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

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

管理NuGet包源

1. 在

%APPDATA%/NuGet/

中找到

NuGet.Config

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

2. 使用CLI添加过NuGet源,可以在配置文件中

packageSources

查看到。

<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

来进行包源映射设置。

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

参考资料

  • NuGet packages in the Package Registry
猜你喜欢
本类排行