Как восстановить пакеты Nuget из частного NugetFeed в devcontainer на Windows? - PullRequest
2 голосов
/ 31 января 2020

Я использую Windows, установлен Docker (с использованием контейнеров l unix), установлен код VS и расширение devcontainer. Я загрузил проект, который использует Nugets из частного NugetFeed, и когда я пытаюсь (интерактивно) восстановить NugetPackages, я получаю ошибку 401 от моего NugetFeed.

/usr/share/dotnet/sdk/2.2.207/NuGet.targets(119,5): error : Unable to load the service index for source https://pkgs.dev.azure.com/[SomeFeedUrl]/nuget/v3/index.json. [/workspaces/[SomeSolution].sln]
/usr/share/dotnet/sdk/2.2.207/NuGet.targets(119,5): error :   Response status code does not indicate success: 401 (Unauthorized). [/workspaces/[SomeSolution].sln]

Я попробовал то же самое локально (поставщик учетных данных установлен), и все работает нормально. Я также попытался смонтировать путь Nugetpackages к devcontainer, восстановить локально, а затем запустить проект (так как это мое исправление для правильной работы восстановления на моем linux maschine).

Вот что мой devcontainer. json выглядит так:

// For format details, see https://aka.ms/vscode-remote/devcontainer.json or the definition README at
// https://github.com/microsoft/vscode-dev-containers/tree/master/containers/azure-functions-dotnetcore-2.2
{
    "name": "Azure Functions & C# (.NET Core 2.2)",
    "dockerFile": "Dockerfile",

    // Use 'settings' to set *default* container specific settings.json values on container create. 
    // You can edit these settings after create using File > Preferences > Settings > Remote.
    "settings": { 
        "terminal.integrated.shell.linux": "/bin/bash"
    },

    "mounts": [
        "source=C:/Users/[user]/.nuget,target=/home/vscode/.nuget,type=bind"
        // "source=${env:HOME}${env:USERPROFILE}/.aspnet/https,target=/home/vscode/.aspnet/https,type=bind"
    ],

    "remoteEnv": {
        // [Optional] Override the default HTTP endpoints - need to listen to '*' for appPort to work
        "ASPNETCORE_Kestrel__Endpoints__Http__Url": "http://*:5000"
        // "ASPNETCORE_Kestrel__Endpoints__Https__Url": "https://*:5001",
        // "ASPNETCORE_Kestrel__Certificates__Default__Password": "SecurePwdGoesHere",
        // "ASPNETCORE_Kestrel__Certificates__Default__Path": "/home/vscode/.aspnet/https/aspnetapp.pfx",
    },

    // Uncomment the next line to run commands after the container is created.
    // "postCreateCommand": "dotnet restore",

    // Uncomment the next line to have VS Code connect as an existing non-root user in the container. 
    // On Linux, by default, the container user's UID/GID will be updated to match your local user. See
    // https://aka.ms/vscode-remote/containers/non-root for details on adding a non-root user if none exist.
    // "remoteUser": "vscode",

    // Add the IDs of extensions you want installed when the container is created in the array below.
    "extensions": [
        "ms-azuretools.vscode-azurefunctions",
        "ms-vscode.csharp"
    ]
}

Я не трогал dockerfile, dockerfile все еще является стандартным dockerfile.

У кого-нибудь есть такая же проблема / знаете, как заставить его работать должным образом?

1 Ответ

0 голосов
/ 31 января 2020

В настоящее время нет чистого способа сделать это. Я думаю, что решение № 1 должно быть намного проще в настройке.

Решение № 1

  1. Открыть .devcontainer/devcontainer.json и добавить запись в раздел mounts (вы можете изменить значение src для чего-то другого - это имя тома, где будет храниться ваш токен):

    "src=credprovider-data,dst=${env:HOME}/.local/share/MicrosoftCredentialProvider,type=volume"

  2. Открыть .devcontainer/Dockerfile добавить в конце:
# Download and install Azure DevOps Credential provider
&& curl -sL https://raw.githubusercontent.com/microsoft/artifacts-credprovider/master/helpers/installcredprovider.sh | bash -
Сохраните оба файла и перестройте контейнер Откройте bash в контейнере и выполните: dotnet restore --interactive Нажмите на ссылку, которая должна открыть ваш браузер. Введите код и нажмите клавишу ВВОД. Теперь, зависит от того, вошли ли вы в систему, попросит вас войти в систему. После входа в ваши Azure DevOps вы увидите сообщение о том, что теперь вы можете закрыть окно. Через несколько секунд вы увидите в своем DevContainer, что dotnet restore продолжается и загружает ваш фид.

Этот метод должен быть постоянным после перезапусков, и даже контейнер перестраивается.

Решение # 2

Вы также можете передать PAT (токен личного доступа) в качестве среды VSS_NUGET_ACCESSTOKEN, URL-адреса фида, установить переменные среды VSS_NUGET_EXTERNAL_FEED_ENDPOINTS и NUGET_CREDENTIALPROVIDER_SESSIONTOKENCACHE_ENABLED в контейнере.

Пожалуйста проверьте также здесь: https://github.com/Microsoft/artifacts-credprovider#help

Github Вопросы, связанные с вашим вопросом:

...