Как мы аутентифицируемся на защищенном сервере NuGet со сборкой Cake?

Мы работаем над автоматизацией наших сборок с помощью Cake Build и используем пакеты NuGet с nuget.org, но у нас также есть собственный сервер NuGet Feed, доступ к которому осуществляется с помощью аутентификации по имени пользователя и паролю. Как мы используем Cake Build с собственным сервером фидов NuGet с аутентификацией?


person Ensunder    schedule 07.08.2016    source источник


Ответы (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 для восстановления/установки, это конфиденциальная информация, поэтому не храните их в своих сценариях сборки, а скорее как, например, переменные среды.

person devlead    schedule 07.08.2016