3
votes

NuGet restore fails 404 from feed on another project in same organization.

When using nuget restore from a pipeline the feed inside a different project is not found.

2

2 Answers

6
votes

After searching for a long time, these are the steps necessary to make it work consistently:

Setup permissions

  • Make sure the consuming project has this setting disabled
    • Project settings (bottom left) --> Pipelines --> Settings --> Limit Job authorization scope to current project (courtesy of another answer)
  • Make sure to add Build Service of the consuming project to the permissions of the feed

Setup build pipeline

  • Use the .Net Core CLI Task
  • Ideally you would use a nuget.config file and make sure to check it in
  • Set the feedsToUse to 'config'


azure-pipelines.yml

- task: DotNetCoreCLI@2
      displayName: DotNetCore-Restore
      inputs:
        command: 'restore'
        projects: '$(PathToSolution)'
        feedsToUse: 'config'
        nugetConfigPath: '$(PathToNugetConfig)/nuget.config'
        includeNuGetOrg: true


nuget.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="feed_name" value="feed_url" />
  </packageSources>
</configuration>



There is no need to add an authenticate task to the pipeline as the dotnet command does this by itself... However:

Most dotnet commands, including build, publish, and test include an implicit restore step. This will fail against authenticated feeds, even if you ran a successful dotnet restore in an earlier step, because the earlier step will have cleaned up the credentials it used.
- Source (.NET Core CLI task docs)

0
votes

You can refer to this doc to setup Azure Artifacts Credential Provider for usage across various tooling.