我们如何使用 Cake build 对安全的 NuGet 服务器进行身份验证?
How do we authenticate against a secured NuGet server with Cake build?
我们正在努力使用 Cake Build 自动化我们的构建,我们使用来自 nuget.org 的 NuGet 包,但我们也有我们自己的 NuGet Feed 服务器,它有一个 username/password 身份验证来访问。我们如何将 Cake Build 与带有身份验证的自定义 NuGet 源服务器一起使用?
Cake 使用 NuGet.exe
安装工具、插件和 NuGet 别名。
除非您在 #tool
/#addin
指令中指定了源或提供给 NuGet 别名,否则 NuGet.exe
将在当前路径中查找 nuget.config
并且最终以当前用户全局设置结束(%AppData%\NuGet\NuGet.config
)。
您有几个选择,如果您不想更改 Cake 文件或您的存储库中的任何内容,那么您可以在全球范围内为您的用户存储您的凭据,NuGet.exe
将选择这些示例:
nuget sources Update -Name [name of source] -Source [uri to your source] -UserName [your username] -Password [your password]
免责声明某些版本的 NuGet.exe
和 dotnet CLI 存在加密密码问题,解决方法是像这样添加 -StorePasswordInClearText
:
nuget sources Update -Name [name of source] -Source [uri to your source] -UserName [your username] -Password [your password] -StorePasswordInClearText
然后您的凭据以纯文本格式保存,但缺点是您的凭据以 纯文本格式.
保存
您还可以通过为 #tool
/#addin
指令和 NuGet 别名指定特定来源来覆盖 nuget.config
设置。
#工具指令
下面是一个示例,用于说明为 #tool
指令
提供源
#tool "NUnit.ConsoleRunner"
or
#tool nuget:?package=NUnit.ConsoleRunner&version=3.4.0
变成
#tool nuget:[source]?package=NUnit.ConsoleRunner
or
#tool nuget:[source]?package=NUnit.ConsoleRunner&version=3.4.0
即官方 V2 nuget 提要
#tool nuget:https://www.nuget.org/api/v2?package=NUnit.ConsoleRunner
or
#tool nuget:https://www.nuget.org/api/v2?package=NUnit.ConsoleRunner&version=3.4.0
#addin 指令
下面是一个示例,用于说明为 #addin
指令
提供源
#addin "Cake.Slack"
or
#addin nuget:?package=Cake.Slack&version=0.4.0
变成
#addin nuget:[source]?package=Cake.Slack
or
#addin nuget:[source]?package=Cake.Slack&version=0.4.0
即官方 V2 nuget 提要
#addin nuget:https://www.nuget.org/api/v2?package=Cake.Slack
or
#addin nuget:https://www.nuget.org/api/v2?package=Cake.Slack&version=0.4.0
NuGet 别名
用于直接使用源代码的 NuGet aliases have commands like NuGetAddSource and NuGetHasSource,如果您希望在 NuGet 恢复步骤之前将源代码添加到 CI,这些非常有用:
var source = new {
Name = EnvironmentVariable("PRIVATE_FEED_NAME"),
Source = EnvironmentVariable("PRIVATE_FEED_SOURCE"),
ApiUserName = EnvironmentVariable("PRIVATE_FEED_USERNAME"),
ApiKey = EnvironmentVariable("PRIVATE_FEED_PASSWORD")
};
if (!NuGetHasSource(source.SourceUrl))
{
NuGetAddSource(
source.Name,
source.SourceUrl,
new NuGetSourcesSettings {
UserName = source.ApiUserName,
Password = source.ApiKey
}
);
}
以上只会将源添加到您现有的 nuget.config
,但您也可以覆盖 NuGetInstall & NuGetRestore 别名的 NuGet 源。
NuGetInstall
NuGetInstall 别名具有采用 NuGetInstallSettings tool settings class which has an Source 属性 的重载,您可以使用它来覆盖使用的提要,例如:
NuGetInstall("MyNugetPackage", new NuGetInstallSettings {
Source = new []{ "https://api.nuget.org/v3/index.json" }
});
NuGetRestore
同样,NuGetRestore 别名具有重载,可让您指定 NuGetRestoreSettings which has an Source 属性,您可以使用它来覆盖使用的提要,例如:
var solutions = GetFiles("./**/*.sln");
// Restore all NuGet packages.
foreach(var solution in solutions)
{
Information("Restoring {0}", solution);
NuGetRestore(
solution,
new NuGetRestoreSettings {
Source = new []{ "https://api.nuget.org/v3/index.json" }
}
);
}
结论
有几种方法可以解决您的问题。
当您的计算机上配置了多个源时,您还可以通过指定一个源来提高 NuGet restore/install 性能,但当前项目只使用官方源,因为它会 skips 查看所有配置的提要并直接转到 来源。
但是如果您的 Feed 有身份验证,那么您将需要为使用 nuget.exe
或 NuGetAddSource 别名的用户添加凭据。
给那些使用 MyGet, it has pre-authenticated url:s 的人的提示你可以在不添加源的情况下使用,而只需为 Restore/Install 指定源 属性,这是敏感信息,所以不要将它们存储在您的构建脚本中,而是作为环境变量.
我们正在努力使用 Cake Build 自动化我们的构建,我们使用来自 nuget.org 的 NuGet 包,但我们也有我们自己的 NuGet Feed 服务器,它有一个 username/password 身份验证来访问。我们如何将 Cake Build 与带有身份验证的自定义 NuGet 源服务器一起使用?
Cake 使用 NuGet.exe
安装工具、插件和 NuGet 别名。
除非您在 #tool
/#addin
指令中指定了源或提供给 NuGet 别名,否则 NuGet.exe
将在当前路径中查找 nuget.config
并且最终以当前用户全局设置结束(%AppData%\NuGet\NuGet.config
)。
您有几个选择,如果您不想更改 Cake 文件或您的存储库中的任何内容,那么您可以在全球范围内为您的用户存储您的凭据,NuGet.exe
将选择这些示例:
nuget sources Update -Name [name of source] -Source [uri to your source] -UserName [your username] -Password [your password]
免责声明某些版本的 NuGet.exe
和 dotnet CLI 存在加密密码问题,解决方法是像这样添加 -StorePasswordInClearText
:
nuget sources Update -Name [name of source] -Source [uri to your source] -UserName [your username] -Password [your password] -StorePasswordInClearText
然后您的凭据以纯文本格式保存,但缺点是您的凭据以 纯文本格式.
保存您还可以通过为 #tool
/#addin
指令和 NuGet 别名指定特定来源来覆盖 nuget.config
设置。
#工具指令
下面是一个示例,用于说明为 #tool
指令
#tool "NUnit.ConsoleRunner"
or
#tool nuget:?package=NUnit.ConsoleRunner&version=3.4.0
变成
#tool nuget:[source]?package=NUnit.ConsoleRunner
or
#tool nuget:[source]?package=NUnit.ConsoleRunner&version=3.4.0
即官方 V2 nuget 提要
#tool nuget:https://www.nuget.org/api/v2?package=NUnit.ConsoleRunner
or
#tool nuget:https://www.nuget.org/api/v2?package=NUnit.ConsoleRunner&version=3.4.0
#addin 指令
下面是一个示例,用于说明为 #addin
指令
#addin "Cake.Slack"
or
#addin nuget:?package=Cake.Slack&version=0.4.0
变成
#addin nuget:[source]?package=Cake.Slack
or
#addin nuget:[source]?package=Cake.Slack&version=0.4.0
即官方 V2 nuget 提要
#addin nuget:https://www.nuget.org/api/v2?package=Cake.Slack
or
#addin nuget:https://www.nuget.org/api/v2?package=Cake.Slack&version=0.4.0
NuGet 别名
用于直接使用源代码的 NuGet aliases have commands like NuGetAddSource and NuGetHasSource,如果您希望在 NuGet 恢复步骤之前将源代码添加到 CI,这些非常有用:
var source = new {
Name = EnvironmentVariable("PRIVATE_FEED_NAME"),
Source = EnvironmentVariable("PRIVATE_FEED_SOURCE"),
ApiUserName = EnvironmentVariable("PRIVATE_FEED_USERNAME"),
ApiKey = EnvironmentVariable("PRIVATE_FEED_PASSWORD")
};
if (!NuGetHasSource(source.SourceUrl))
{
NuGetAddSource(
source.Name,
source.SourceUrl,
new NuGetSourcesSettings {
UserName = source.ApiUserName,
Password = source.ApiKey
}
);
}
以上只会将源添加到您现有的 nuget.config
,但您也可以覆盖 NuGetInstall & NuGetRestore 别名的 NuGet 源。
NuGetInstall
NuGetInstall 别名具有采用 NuGetInstallSettings tool settings class which has an Source 属性 的重载,您可以使用它来覆盖使用的提要,例如:
NuGetInstall("MyNugetPackage", new NuGetInstallSettings {
Source = new []{ "https://api.nuget.org/v3/index.json" }
});
NuGetRestore
同样,NuGetRestore 别名具有重载,可让您指定 NuGetRestoreSettings which has an Source 属性,您可以使用它来覆盖使用的提要,例如:
var solutions = GetFiles("./**/*.sln");
// Restore all NuGet packages.
foreach(var solution in solutions)
{
Information("Restoring {0}", solution);
NuGetRestore(
solution,
new NuGetRestoreSettings {
Source = new []{ "https://api.nuget.org/v3/index.json" }
}
);
}
结论
有几种方法可以解决您的问题。
当您的计算机上配置了多个源时,您还可以通过指定一个源来提高 NuGet restore/install 性能,但当前项目只使用官方源,因为它会 skips 查看所有配置的提要并直接转到 来源。
但是如果您的 Feed 有身份验证,那么您将需要为使用 nuget.exe
或 NuGetAddSource 别名的用户添加凭据。
给那些使用 MyGet, it has pre-authenticated url:s 的人的提示你可以在不添加源的情况下使用,而只需为 Restore/Install 指定源 属性,这是敏感信息,所以不要将它们存储在您的构建脚本中,而是作为环境变量.