Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nuget restore not working with artifact feed in Azure Devops

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.

like image 780
SanBen Avatar asked Mar 02 '23 13:03

SanBen


1 Answers

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

Setup permissions

  • Make sure to add Build Service of the consuming project to the permissions of the feed
  • Make sure the consuming project has these two settings disabled
    • Project settings (bottom left) --> Pipelines --> Settings
      • Limit job authorization scope to current project for non-release pipelines
      • Limit job authorization scope to current project for release pipelines

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)
like image 195
SanBen Avatar answered Mar 05 '23 16:03

SanBen