Мы работаем над автоматизацией наших сборок с помощью Cake Build и используем пакеты NuGet с nuget.org, но у нас также есть собственный сервер NuGet Feed, доступ к которому осуществляется с помощью аутентификации по имени пользователя и паролю. Как мы используем Cake Build с собственным сервером фидов NuGet с аутентификацией?
Как мы аутентифицируемся на защищенном сервере NuGet со сборкой Cake?
Ответы (1)
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
Затем ваши учетные данные сохраняются в виде обычного текста, который работает с тем недостатком, что ваши учетные данные сохраняются в виде простого текста.
Вы также можете переопределить параметры nuget.config
, указав конкретный источник для директив #tool
/#addin
и псевдонимов NuGet.
директива #tool
Ниже приведен пример, иллюстрирующий предоставление исходного кода для директивы #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 содержат такие команды, как NuGetAddSource и NuGetHasSource для работы непосредственно с источниками. Они отлично подходят, если вы, например, хотите добавить источники в ЭК перед шагом восстановления NuGet, как показано ниже:
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
, но вы также можете переопределить исходный код NuGet для NuGetInstall и NuGetRestore.
NuGetInstall
Псевдоним NuGetInstall имеет перегрузки, которые принимают класс настроек инструмента NuGetInstallSettings. который имеет свойство Source, которое можно использовать для переопределения какие фиды используются, например:
NuGetInstall("MyNugetPackage", new NuGetInstallSettings {
Source = new []{ "https://api.nuget.org/v3/index.json" }
});
NuGetRestore
Точно так же псевдоним NuGetRestore имеет перегрузки, которые позволяют указать NuGetRestoreSettings. который имеет свойство 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, указав источник, когда на вашем компьютере настроено несколько источников, но текущий проект использует только официальные, поскольку затем пропускает просмотр всех настроенных каналов и переходит прямо к источнику.
Но если ваш фид имеет аутентификацию, вам нужно будет добавить учетные данные для тех, кто использует nuget.exe
или NuGetAddSource псевдоним.
Совет для тех, кто использует MyGet: в нем есть предварительно аутентифицированные URL-адреса, которые вы можете использовать без добавления источника, а просто указав свойство Source для восстановления/установки, это конфиденциальная информация, поэтому не храните их в своих сценариях сборки, а скорее как, например, переменные среды.