教程:使用 NuGet 源搭建 kmpkg 二进制缓存
本教程使用托管于 Azure Artifacts 的 NuGet 源,但只需稍作修改,这些步骤也适用于其他 NuGet 源提供程序(例如 GitHub Packages)。
kmpkg 支持使用 NuGet 包源便捷地上传和还原二进制包。
NuGet 包源具备访问控制功能,非常适合限制组织或工作组内的资源访问。多个云存储提供商均支持 NuGet 源,例如 Azure Artifacts 和 GitHub 包注册表。
前提条件
- cmd-powershell
- bash
1 - 搭建 NuGet 源
若已有现成的 NuGet 包源,可跳过此步骤。
请按照相关说明搭建 Azure Artifacts NuGet 源。
你也可以选择其他任意 NuGet 包源提供程序。
2 - 添加 NuGet 源
- bash
Linux 系统中需要
mono来运行nuget.exe。你可以通过系统包管理器安装mono。
kmpkg 会自行获取 nuget.exe 可执行文件,用于二进制缓存操作。本教程使用 kmpkg 获取的 nuget.exe。kmpkg fetch nuget 命令会输出该 nuget.exe 的路径(必要时会自动下载)。
运行以下命令添加你的 NuGet 源,将 <feed name> 替换为任意名称,<feed url> 替换为你的 NuGet 源 URL:
- powershell
- cmd
- bash
.$(kmpkg fetch nuget) sources add -Name <feed name> -Source <feed url>
首先执行以下命令获取 NuGet 可执行文件的路径:
kmpkg fetch nuget
输出结果类似 C:\path\to\nuget.exe,请记录该路径。
使用获取到的路径,运行以下命令:
C:\path\to\nuget.exe sources add -Name <feed name> -Source <feed url>
mono `kmpkg fetch nuget | tail -n 1` sources add -Name <feed name> -Source <feed url>
提供 API 密钥
部分提供程序要求推送 NuGet 包到源时使用 API 密钥。例如,GitHub Packages 要求使用 GitHub PAT(个人访问令牌)作为 API 密钥;若使用 Azure Artifacts,则 API 密钥为 AzureDevOps。
运行以下命令为推送到 NuGet 源的所有包设置 API 密钥,将 <apiKey> 替换为你的源的 API 密钥:
- powershell
- cmd
- bash
.$(kmpkg fetch nuget) setapikey <apikey> -Source <feed url>
首先执行以下命令获取 NuGet 可执行文件的路径:
kmpkg fetch nuget
输出结果类似 C:\path\to\nuget.exe,请记录该路径。
使用获取到的路径,运行以下命令:
C:\path\to\nuget.exe setapikey <apikey> -Source <feed url>
mono `kmpkg fetch nuget | tail -n 1` setapikey <apiKey> -Source <feed url>
提供认证凭据
你的 NuGet 源可能需要认证才能下载和上传包。若如此,可在 nuget sources add 命令中添加凭据参数:
示例:
nuget sources add -Name my-packages -Source https://my.nuget.feed/kmpkg-cache/index.json -UserName myusername -Password mypassword -StorePasswordInClearText
Azure Artifacts 等部分提供程序可能需要不同的认证方式,如需了解更多信息,请参阅 认证私有 NuGet 源。
使用 nuget.config 文件
你也可以通过 nuget.config 文件配置 NuGet 源,模板如下:
nuget.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="defaultPushSource" value="<feed url>" />
</config>
<apiKeys>
<add key="<feed url>" value="<apikey>" />
</apiKeys>
<packageSources>
<clear />
<add key="<feed name>" value="<feed url>" disableTLSCertificateValidation="false" />
</packageSources>
<packageSourceCredentials>
<<feed name>>
<add key="Username" value="<username>" />
<add key="ClearTextPassword" value="<password>" />
</<feed name>>
</packageSourceCredentials>
</configuration>
nuget.config 文件示例:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="defaultPushSource" value="https://contoso.org/packages/" />
</config>
<apiKeys>
<add key="https://contoso.org/packages/" value="encrypted_api_key" />
</apiKeys>
<packageSources>
<clear />
<add key="Contoso" value="https://contoso.org/packages/" disableTLSCertificateValidation="false" />
</packageSources>
<packageSourceCredentials>
<Contoso>
<add key="Username" value="user" />
<add key="ClearTextPassword" value="..." />
</Contoso>
</packageSourceCredentials>
</configuration>
kmpkg 要求你在 nuget.config 文件中设置 defaultPushSource,请将你的 NuGet 源 URL 作为推送二进制包的默认源。
若要将包上传到 Azure Artifacts NuGet 源,需运行 nuget setApiKey AzureDevOps -Source <feed url> -ConfigFile <path to nuget.config>,将源的 API 密钥设为 AzureDevOps;否则,若你的源有对应的 API 密钥,请替换为该值。
若使用自签名证书,可能需要禁用 TLS 证书验证。此选项仅可通过 nuget.config 文件配置。
添加 <clear /> 可忽略之前配置的其他源。若需定义多个源,可为每个源添加一条 <add key="<feed name>" value="<feed url>" /> 条目。
3 - 配置 kmpkg 以使用你的 NuGet 源
按如下方式设置 KMPKG_BINARY_SOURCES 环境变量:
- powershell
- cmd
- bash
$env:KMPKG_BINARY_SOURCES="clear;nuget,<feed url>,readwrite"
若使用 nuget.config 文件,则执行:
$env:KMPKG_BINARY_SOURCES="clear;nugetconfig,<path to nuget.config>"
set "KMPKG_BINARY_SOURCES=clear;nuget,<feed url>,readwrite"
若使用 nuget.config 文件,则执行:
set "KMPKG_BINARY_SOURCES=clear;nugetconfig,<path to nuget.config>"
使用
export命令设置的KMPKG_BINARY_SOURCES仅对当前 Shell 会话生效。若要让变更对所有会话永久生效,需将该export命令添加到 Shell 的配置脚本中(例如~/.bashrc或~/.zshrc)。
export KMPKG_BINARY_SOURCES="clear;nuget,<feed url>,readwrite"
若使用 nuget.config 文件,则执行:
export KMPKG_BINARY_SOURCES="clear;nugetconfig,<path to nuget.config>,readwrite"
至此配置完成!kmpkg 现在会从你的 NuGet 源上传或还原包。
后续步骤
你可尝试完成以下后续操作: