Nuget 制品库
1856 字约 6 分钟
创建制品库
参考 创建制品库
获取制品库地址
参考 获取制品库的地址
创建令牌
云原生构建平台的所有资源(包括代码仓库、制品库、OPENAPI等),都需要通过访问令牌进行操作。 创建令牌
本地使用
客户端说明
客户端/工具 | dotnet CLI | nuget.exe |
---|---|---|
适用场景 | .NET Core/.NET 5+ 项目 | 传统 .NET Framework 项目 |
跨平台支持 | 原生支持 | 需 Mono |
安装 | 随 .NET SDK自动安装,无需单独配置 | 需要下载nuget.exe安装 |
凭据管理命令
您可以使用 CNB 的访问令牌作为登录凭据,配置命令:
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 |
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 |
制品管理命令
执行制品管理命令前请先配置好制品库凭据
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
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 用法,请查阅官方文档