Nuget 制品库

该文档介绍了Nuget制品库的使用方法,包括制品库的创建、访问令牌的获取、本地使用客户端的选择及相关凭据管理命令,还讲述了云原生构建和开发中的使用方式,以及常见问题解答,如401、403、409错误的可能原因和解决方案,同时说明了http支持的相关配置,最后指引查阅更多官方用法。

创建制品库

参考 创建制品库

获取制品库地址

参考 获取制品库的地址

创建令牌

云原生构建平台的所有资源(包括代码仓库、制品库、OPENAPI等),都需要通过访问令牌进行操作。 创建令牌

本地使用

客户端说明

客户端/工具dotnet CLInuget.exe
适用场景.NET Core/.NET 5+ 项目传统 .NET Framework 项目
跨平台支持原生支持需 Mono
安装随 .NET SDK自动安装,无需单独配置需要下载nuget.exe安装

凭据管理命令

您可以使用 CNB 的访问令牌作为登录凭据,配置命令:

::: tabs @tab dotnet CLI

1. 配置用户名/密码凭据

替换 <TOKEN> 为访问令牌,<TOKEN_NAME> 为凭据名称,<GROUP_NAME> 为组织名,<REPO_NAME> 为制品库名称

dotnet nuget add source https://nuget.cnb.cool/<GROUP_NAME>/<REPO_NAME>/-/packages/v3/index.json --name <TOKEN_NAME> --username cnb --password <TOKEN> --store-password-in-clear-text
# 示例: 添加凭据cnb.nuget
# dotnet nuget add source https://nuget.cnb.cool/cnb/nuget/-/packages/v3/index.json --name cnb.nuget --username cnb --password 29bGg84xqRf3ZweNpYlL92e7tDv --store-password-in-clear-text

2. 查看所有凭据

dotnet nuget list source

3. 删除凭据

替换 <TOKEN_NAME> 为凭据名称

dotnet nuget remove source <TOKEN_NAME>
# 示例: 删除凭据cnb.nuget
# dotnet nuget remove source cnb.nuget

4. 凭据存储位置

客户端/工具
Windows%AppData%\NuGet\NuGet.Config
Linux/macOS~/.config/NuGet/NuGet.Config or ~/.nuget/NuGet/NuGet.Config

@tab nuget.exe

1. 配置用户名/密码凭据

替换 <TOKEN> 为访问令牌,<TOKEN_NAME> 为凭据名称,<GROUP_NAME> 为组织名,<REPO_NAME> 为制品库名称

nuget sources add -source https://nuget.cnb.cool/<GROUP_NAME>/<REPO_NAME>/-/packages/v3/index.json -name <TOKEN_NAME> -username cnb -password <TOKEN> -StorePasswordInClearText
# 示例: 添加凭据cnb.nuget
# nuget sources add -source https://nuget.cnb.cool/cnb/nuget/-/packages/v3/index.json -name cnb.nuget -username cnb -password 29bGg84xqRf3ZweNpYlL92e7tDv -StorePasswordInClearText

2. 凭据配置api-key

替换 <TOKEN> 为访问令牌,<GROUP_NAME> 为组织名,<REPO_NAME> 为制品库名称

nuget setapikey <TOKEN> -source https://nuget.cnb.cool/<GROUP_NAME>/<REPO_NAME>/-/packages/v3/index.json
# 示例: 凭据添加 apikey
# nuget setapikey 29bGg84xqRf3ZweNpYlL92e7tDv -source https://nuget.cnb.cool/cnb/nuget/-/packages/v3/index.json

3. 查看所有凭据

nuget sources

4. 删除凭据

替换 <TOKEN_NAME> 为凭据名称

nuget sources remove -name <TOKEN_NAME>
# 示例: 删除凭据cnb.nuget
# nuget sources remove -name cnb.nuget

5. 凭据存储位置

客户端/工具
Windows%AppData%\NuGet\NuGet.Config
Linux/macOS~/.config/NuGet/NuGet.Config or ~/.nuget/NuGet/NuGet.Config

:::

制品管理命令

执行制品管理命令前请先配置好制品库凭据 ::: tabs @tab dotnet CLI

1. 拉取制品

替换 <PACKAGE_NAME> 为包名,<VERSION> 为版本号,<TOKEN_NAME> 为凭据名称

dotnet add package <PACKAGE_NAME> --version <VERSION> --source <TOKEN_NAME>
# 示例: 从凭据名为 cnb.nuget 对应的制品仓库拉取 mynupkg 包的 1.0.0 版本
# dotnet pack mynupkg.csproj --configuration Release --output nupkgs

2. 构建制品

替换 <CSPROJ_PATH> 为 .csproj 文件路径, <PKG_PATH> 为 nupkg 包输出路径,<VERSION> 为版本号

dotnet pack <CSPROJ_PATH> -p:PackageVersion=<VERSION>  --configuration Release --output <PKG_PATH>
# 示例: 构建制品
# dotnet pack mynupkg.csproj --configuration Release --output nupkgs 
# 或 构建指定版本制品
# dotnet pack mynupkg.csproj -p:PackageVersion=1.0.0 --configuration Release --output nupkgs

3. 推送制品

替换 <NUPKG_PATH> 为 nupkg 包路径,<TOKEN_NAME> 为凭据名称

dotnet nuget push <NUPKG_PATH> --source <TOKEN_NAME>
# 示例: 推送 mynupkg 包的 1.0.0 版本到凭据名为 cnb.nuget 对应的制品仓库
# dotnet nuget push ./mynupkg.1.0.0.nupkg --source cnb.nuget

4. 删除制品

替换 <PACKAGE_NAME> 为包名,<VERSION> 为版本号,<TOKEN_NAME> 为凭据名称

dotnet nuget delete <PACKAGE_NAME> <VERSION> --source <TOKEN_NAME>
# 示例: 从凭据名为 cnb.nuget 对应的制品仓库删除 mynupkg 包的 1.0.0版本
# dotnet nuget delete mynupkg 1.0.0 --source cnb.nuget

5. 查询包信息

替换 <PACKAGE_NAME> 为包名,<TOKEN_NAME> 为凭据名称

dotnet package search <PACKAGE_NAME> --source <TOKEN_NAME>
# 示例: 从凭据名为 cnb.nuget 对应的制品仓库查询包名包含 mynuget 的包
# dotnet package search mynuget --source cnb.nuget

6. 清除本地 HTTP 请求缓存

dotnet nuget locals http-cache --clear

7. 清除本地所有缓存

dotnet nuget locals all --clear

@tab nuget.exe

1. 拉取制品

替换 <PACKAGE_NAME> 为包名,<VERSION> 为版本号,<TOKEN_NAME> 为凭据名称

nuget install <PACKAGE_NAME> -version <VERSION> -source <TOKEN_NAME>
# 示例: 从凭据名为 cnb.nuget 对应的制品仓库拉取 mynupkg 包的 1.0.0 版本
# nuget install mynupkg -version 1.0.0 -source cnb.nuget

2. 构建制品

替换 <CSPROJ_PATH> 为 .csproj 文件路径, <PKG_PATH> 为 nupkg 包输出路径

nuget pack <CSPROJ_PATH> -Version <VERSION>  -Properties Configuration=Release 
# 示例: 构建制品
# nuget pack mynupkg.csproj -Properties Configuration=Release
# 或 构建指定版本制品
# nuget pack mynupkg.csproj -Version 1.0.0 -Properties Configuration=Release

3. 推送制品

替换 <NUPKG_PATH> 为 nupkg 包路径,<TOKEN_NAME> 为凭据名称

nuget push <NUPKG_PATH> -source <TOKEN_NAME>
# 示例: 推送 mynupkg 包的 1.0.0 版本到凭据名为 cnb.nuget 对应的制品仓库
# nuget push ./mynupkg.1.0.0.nupkg -source cnb.nuget

4. 删除制品

替换 <PACKAGE_NAME> 为包名,<VERSION> 为版本号,<TOKEN_NAME> 为凭据名称

nuget delete <PACKAGE_NAME> <VERSION> -source <TOKEN_NAME>
# 示例: 从凭据名为 cnb.nuget 对应的制品仓库删除 mynupkg 包的 1.0.0版本
# nuget delete mynupkg 1.0.0 -source cnb.nuget

5. 查询包信息

替换 <PACKAGE_NAME> 为包名,<TOKEN_NAME> 为凭据名称

nuget search <PACKAGE_NAME> -source <TOKEN_NAME> 
# 示例: 从凭据名为 cnb.nuget 对应的制品仓库查询包名包含 mynuget 的包
# nuget search mynuget -source cnb.nuget

6. 清除本地 HTTP 请求缓存

nuget locals http-cache -clear

7. 清除本地所有缓存

nuget locals all -clear

:::

云原生构建中使用

流水中构建nupkg包,并推送到凭据名称对应的制品库

替换 <REPO_URL> 为制品库地址,<TOKEN_NAME> 为凭据名称,<CSPROJ_PATH> 为 .csproj 文件路径, <PKG_PATH> 为 nupkg 包输出路径,<NUPKG_NAME> 为 nupkg 包名

main:
  push:
    - docker:
        image: mcr.microsoft.com/dotnet/sdk:9.0
      stages:
        - name: 配置 nuget 仓库的地址、账号、密码
          script: dotnet nuget add source <REPO_URL> --name <TOKEN_NAME> --username cnb --password <TOKEN> --store-password-in-clear-text
        - name: 打包 nuget 制品 
          script: dotnet pack <CSPROJ_PATH> --configuration Release --output <PKG_PATH>  
        - name: 推送 nuget 制品到 CNB
          script: dotnet nuget push <PKG_PATH>/<NUPKG_NAME> --source <TOKEN_NAME>
  • 示例:
main: 
  push: 
    - docker: 
        image: mcr.microsoft.com/dotnet/sdk:9.0 
      stages: 
        - name: 配置 nuget 仓库的地址、账号、密码
          script: dotnet nuget add source https://nuget.cnb.cool/cnb/nuget/-/packages/v3/index.json --name cnb.nuget --username cnb --password cnb_token --store-password-in-clear-text 
        - name: 打包 nuget 制品
          script: dotnet pack mynupkg.csproj --configuration Release --output nupkgs 
        - name: 推送 nuget 制品到 CNB 
          script: dotnet nuget push nupkgs/*.nupkg --source cnb.nuget

云原生开发中使用

1. 在.cnb.yml中配置dotnet开发环境

$: 
  vscode:
    - docker:
        image: mcr.microsoft.com/dotnet/sdk:9.0

2. 配置 nuget 仓库的地址、账号、密码

替换 <REPO_URL> 为制品库地址,<TOKEN_NAME> 为凭据名称,<TOKEN> 为凭据

dotnet nuget add source <REPO_URL> --name <TOKEN_NAME> --username cnb --password <TOKEN> --store-password-in-clear-text
dotnet pack xxx.csproj --configuration Release --output nupkgs
dotnet nuget push "nupkgs/*.nupkg" --source <TOKEN_NAME>
  • 示例: 添加凭据 cnb.nuget,打包 nuget 制品并推送 nuget 制品到 CNB
dotnet nuget add source https://nuget.cnb.cool/cnb/nuget/-/packages/v3/index.json --name cnb.nuget --username cnb --password 29bGg84xqRf3ZweNpYlL92e7tDv --store-password-in-clear-text
dotnet pack mynupkg.csproj --configuration Release --output nupkgs
dotnet nuget push "nupkgs/*.nupkg" --source cnb.nuget

FAQ 常见问题

Q1:遇到 401 Forbidden 错误

可能原因:
凭据缺少权限

解决方案:
重新配置有操作权限的制品库访问令牌
token获取: 个人设置 -> 访问令牌 -> 添加访问令牌 -> 授权范围选择对应的制品库操作权限

Q2:遇到 403 Forbidden 错误

可能原因:
凭据配置错误

解决方案:
配置正确的制品库访问令牌
token获取: 个人设置 -> 访问令牌 -> 添加访问令牌 -> 授权范围选择对应的制品库操作权限

Q3:遇到 409 Forbidden 错误

可能原因:
包已存在且不允许覆盖

解决方案:
如需覆盖包,请进入对应制品仓库->制品库设置->策略管理->选择允许覆盖已有版本

Q4:如何支持HTTP

可能原因:
客户端默认只支持https

解决方案:

客户端/工具http支持
dotnet CLI添加制品库凭据时指定: --allow-insecure-connections
nuget.exe添加制品库凭据时指定: -AllowInsecureConnections

更多用法

更多 nuget 用法,请查阅官方文档

点评

点赞或评论
加载评论中...