Freigeben über


NuGetAuthenticate@1: NuGet authenticate v1 task

Konfigurieren Sie NuGet-Tools für die Authentifizierung bei Azure Artifacts und anderen NuGet-Repositorys. Erfordert NuGet >= 4.8.5385, dotnet >= 6 oder MSBuild >= 15.8.166.59604.

Syntax

# NuGet authenticate v1
# Configure NuGet tools to authenticate with Azure Artifacts and other NuGet repositories. Requires NuGet >= 4.8.5385, dotnet >= 6, or MSBuild >= 15.8.166.59604.
- task: NuGetAuthenticate@1
  inputs:
    #nuGetServiceConnections: # string. Service connection credentials for feeds outside this organization. 
    #forceReinstallCredentialProvider: false # boolean. Reinstall the credential provider even if already installed. Default: false.

Eingaben

nuGetServiceConnections - Anmeldeinformationen für Dienstverbindungen für Feeds außerhalb dieser Organisation
string.

Optional. Die durch Trennzeichen getrennte Liste der NuGet-Dienstverbindungsnamen für Feeds außerhalb dieser Organisation oder Sammlung. Lassen Sie für Feeds in dieser Organisation oder Sammlung dieses Feld leer. die Anmeldeinformationen des Builds werden automatisch verwendet.


forceReinstallCredentialProvider - Installieren Sie den Anmeldeinformationsanbieter neu, auch wenn sie bereits installiert ist.
boolean. Standardwert. false.

Optional. Installiert den Anmeldeinformationsanbieter erneut in das Benutzerprofilverzeichnis, auch wenn er bereits installiert ist. Wenn der Anmeldeinformationsanbieter bereits im Benutzerprofil installiert ist, bestimmt die Aufgabe, ob er mit dem vom Task bereitgestellten Anmeldeinformationsanbieter überschrieben wird. Dadurch kann der Anmeldeinformationsanbieter aktualisiert (oder möglicherweise herabgestuft werden).


Aufgabensteuerungsoptionen

Alle Aufgaben verfügen zusätzlich zu ihren Aufgabeneingaben über Steuerungsoptionen. Weitere Informationen finden Sie unter Steuerungsoptionen und allgemeine Aufgabeneigenschaften.

Ausgabevariablen

Keine.

Bemerkungen

Wichtig

Diese Aufgabe ist nur mit NuGet >= 4.8.0.5385, dotnet >= 6 oder MSBuild >= 15.8.166.59604 kompatibel.

Welche Tools sind mit dieser Aufgabe kompatibel?

Mit dieser Aufgabe werden Tools konfiguriert, die plattformübergreifende NuGet-Plug-Ins unterstützen. Die Tools umfassen derzeit nuget.exe, dotnet und neuere Versionen von MSBuild mit integrierter Unterstützung für die Wiederherstellung von NuGet-Paketen.

Mit dieser Aufgabe wird insbesondere Folgendes konfiguriert:

  • nuget.exe (Version 4.8.5385 oder höher)
  • dotnet/ .NET SDK 6 oder höher (eine frühere Version dieser Aufgabe, NuGetAuthenticateV0, erfordert .NET Core 2.1, die nicht mehr unterstützt wird)
  • MSBuild (Version 15.8.166.59604 oder höher)

Ein Upgrade auf die neueste stabile Version wird empfohlen, wenn Probleme auftreten.

Während einer Paketwiederherstellung erhalte ich den Fehler "A task was canceled".   Wie sollte ich vorgehen?

Bekannte Probleme in NuGet und im Azure Artifacts-Anmeldeinformationsanbieter können diese Art von Fehler verursachen, und das Aktualisieren auf das neueste NuGet kann hilfreich sein.

Ein bekanntes Problem in einigen Versionen von nuget/dotnet kann diesen Fehler verursachen, insbesondere bei großen Wiederherstellungen auf Computern mit eingeschränkten Ressourcen. Dieses Problem wurde in NuGet 5.2 und .NET Core SDK 2.1.80X und 2.2.40X behoben. Wenn Sie eine ältere Version verwenden, versuchen Sie, ihre Version von NuGet oder dotnet zu aktualisieren. Der Task .NET Core Tool Installer kann verwendet werden, um eine neuere Version des .NET Core SDK zu installieren.

Es gibt auch bekannte Probleme mit dem Azure Artifacts-Anmeldeinformationsanbieter (von dieser Aufgabe installiert), einschließlich artifacts-credprovider/#77 und artifacts-credprovider/#108. Wenn diese Probleme auftreten, stellen Sie sicher, dass Sie über den neuesten Anmeldeinformationsanbieter verfügen, indem Sie die Eingabe forceReinstallCredentialProvider in der NuGet-Authentifizierungsaufgabe auf true festlegen. Mit dieser Einstellung wird auch sichergestellt, dass Ihr Anmeldeinformationsanbieter automatisch aktualisiert wird, wenn Probleme behoben werden.

Wenn das Problem durch keine der oben genannten Optionen behoben wird, aktivieren Sie die Plug-In-Diagnoseprotokollierung , und melden Sie das Problem an NuGet und den Azure Artifacts-Anmeldeinformationsanbieter.

Inwiefern unterscheidet sich diese Aufgabe von den Aufgaben NuGetCommand und DotNetCoreCLI?

Diese Aufgabe konfiguriert nuget.exe, dotnet und MSBuild für die Authentifizierung bei Azure Artifacts oder anderen Repositorys, die eine Authentifizierung erfordern. Nachdem diese Aufgabe ausgeführt wurde, können Sie die Tools in einem späteren Schritt aufrufen (entweder direkt oder über ein Skript), um Pakete wiederherzustellen oder zu pushen.

Die Aufgaben NuGetCommand und DotNetCoreCLI erfordern die Verwendung der Aufgabe zum Wiederherstellen oder Pushen von Paketen, da die Authentifizierung bei Azure Artifacts nur innerhalb der Lebensdauer der Aufgabe konfiguriert wird. Dies kann verhindern, dass Sie Pakete innerhalb Ihres eigenen Skripts wiederherstellen oder pushen. Es kann auch verhindern, dass Sie bestimmte Befehlszeilenargumente an das Tool übergeben.

Der NuGetAuthenticate-Task ist die empfohlene Möglichkeit, authentifizierte Feeds innerhalb einer Pipeline zu verwenden.

Wann sollte ich diese Aufgabe in meiner Pipeline ausführen?

Diese Aufgabe muss ausgeführt werden, bevor Sie ein NuGet-Tool zum Wiederherstellen oder Pushen von Paketen an eine authentifizierte Paketquelle wie Azure Artifacts verwenden. Es gibt keine weiteren Bestellanforderungen. Diese Aufgabe kann beispielsweise vor oder nach einem NuGet- oder .NET Core-Toolinstallationsprogrammtask sicher ausgeführt werden.

Gewusst wie eine NuGet-Paketquelle konfigurieren, die ApiKey ("NuGet-API-Schlüssel") verwendet, z. B. nuget.org?

Einige Paketquellen, z. B. nuget.org, verwenden API-Schlüssel für die Authentifizierung, wenn Pakete per Push übertragen werden, anstatt username/password Anmeldeinformationen zu übertragen. Aufgrund von Einschränkungen in NuGet kann diese Aufgabe nicht verwendet werden, um eine NuGet-Dienstverbindung einzurichten, die einen API-Schlüssel verwendet.

Alternative:

  1. Konfigurieren einer Geheimvariablen , die den ApiKey enthält
  2. Führen Sie den Paketpush mit nuget push -ApiKey $(myNuGetApiKey) oder dotnet nuget push --api-key $(myNuGetApiKey)aus, sofern Sie die Variable benannt haben. myNuGetApiKey

Mein Agent befindet sich hinter einem Webproxy. Richtet NuGetAuthenticate nuget.exe, dotnet und MSBuild ein, um meinen Proxy zu verwenden?

Nein. Obwohl diese Aufgabe selbst hinter einem Webproxy funktioniert, für den Ihr Agent konfiguriert wurde, werden keine NuGet-Tools für die Verwendung des Proxys konfiguriert.

Dazu haben Sie die folgenden Möglichkeiten:

  • Legen Sie die Umgebungsvariable http_proxy und optional no_proxy auf Ihre Proxyeinstellungen fest. Weitere Informationen finden Sie unter NuGet CLI-Umgebungsvariablen . Diese Variablen sind häufig verwendete Variablen, die auch andere Nicht-NuGet-Tools (z. B. curl) verwenden können.

    Vorsicht:
    Bei http_proxy den Variablen und no_proxy wird unter Linux- und Mac-Betriebssystemen zwischen Groß- und Kleinschreibung unterschieden. Der Versuch, eine Azure Pipelines-Variable zum Festlegen der Umgebungsvariablen zu verwenden, funktioniert nicht, da sie in Großbuchstaben konvertiert wird. Legen Sie stattdessen die Umgebungsvariablen auf dem Computer des selbstgehosteten Agents fest, und starten Sie den Agent neu.

  • Fügen Sie die Proxyeinstellungen der nuget.config-Datei auf Benutzerebene hinzu, entweder manuell oder mithilfe nuget config -set von, wie in der nuget.config Referenzdokumentation beschrieben.

    Vorsicht:
    Die Proxyeinstellungen (z http_proxy. B. ) müssen der Konfiguration auf Benutzerebene hinzugefügt werden. Sie werden ignoriert, wenn sie in einer anderen nuget.config-Datei angegeben werden.

Gewusst wie debuggen, wenn ich Probleme mit dieser Aufgabe habe?

Um ausführliche Protokolle aus der Pipeline abzurufen, fügen Sie eine Pipelinevariable system.debug hinzu, und legen Sie auf fest true.

Wie funktioniert diese Aufgabe?

Mit dieser Aufgabe wird der Azure Artifacts-Anmeldeinformationsanbieter im NuGet-Plug-In-Verzeichnis installiert, sofern er noch nicht installiert ist. Anschließend werden Umgebungsvariablen wie VSS_NUGET_URI_PREFIXES und VSS_NUGET_ACCESSTOKEN festgelegt, um den Anmeldeinformationsanbieter zu konfigurieren. Diese Variablen bleiben für die Lebensdauer des Auftrags festgelegt. Beim Wiederherstellen oder Pushen von Paketen führt ein NuGet-Tool den Anmeldeinformationsanbieter aus, der die oben genannten Variablen verwendet, um zu bestimmen, ob Anmeldeinformationen an das Tool zurückgegeben werden sollen.

Weitere Informationen finden Sie in der Dokumentation zum Anmeldeinformationsanbieter.

Meine Pipeline muss auf einen Feed in einem anderen Projekt zugreifen.

Wenn die Pipeline in einem anderen Projekt als dem Projekt ausgeführt wird, das den Feed hostet, müssen Sie das andere Projekt einrichten, um Lese-/Schreibzugriff auf den Builddienst zu gewähren. Weitere Informationen finden Sie unter Paketberechtigungen in Azure Pipelines .

Funktioniert dies bei Pipelineausführungen, die von einem externen Fork ausgelöst werden?

Nein. Pipelineausführungen, die von einem externen Fork ausgelöst werden, haben keinen Zugriff auf die richtigen Geheimnisse für die interne Feedauthentifizierung. Daher scheint die Authentifizierungsaufgabe erfolgreich zu sein, aber nachfolgende Aufgaben, die eine Authentifizierung erfordern (z. B. NuGet-Push), schlagen mit einem Fehler wie folgt fehl: ##[error]The nuget command failed with exit code(1) and error(Response status code does not indicate success: 500 (Internal Server Error - VS800075: The project with id 'vstfs:///Classification/TeamProject/341ec244-e856-40ad-845c-af31c33c2152' does not exist, or you do not have permission to access it. (DevOps Activity ID: C12C19DC-642C-469A-8F58-C89F2D81FEA7)). Nachdem der Pull Request mit dem Ursprung zusammengeführt wurde, wird eine Pipeline, die von diesem Ereignis ausgelöst wird, ordnungsgemäß authentifiziert.

Ich habe von NuGetAuthenticateV0 auf NuGetAuthenticateV1 aktualisiert, und jetzt schlägt mein dotnet-Befehl mit 401 fehl.

Wenn Sie von NuGetAuthenticateV0 auf NuGetAuthenticateV1 aktualisieren und einen Fehler beim Ausführen eines dotnet-Befehls erhalten, suchen Sie nach der Meldung It was not possible to find any compatible framework version aus den Protokollen. Für dotnet-Benutzer erfordert NuGetAuthenticateV1 .NET 6 anstelle von .NET Core 2.1, was in NuGetAuthenticateV0 erforderlich ist und nicht mehr unterstützt wird. Um das Problem zu beheben, verwenden Sie die aufgabe UseDotNet@2 vor dem befehl dotnet, um .NET 6 zu installieren.

- task: UseDotNet@2
  displayName: Use .NET 6 SDK
  inputs:
    packageType: sdk
    version: 6.x

Beispiele

Wiederherstellen und Pushen von NuGet-Paketen in Ihrer Organisation

Wenn sich alle von Ihnen verwendeten Azure Artifacts-Feeds in derselben Organisation wie Ihre Pipeline befinden, können Sie den NuGetAuthenticate-Task verwenden, ohne Eingaben anzugeben. Für projektbezogene Feeds, die sich in einem anderen Projekt befinden als in dem die Pipeline ausgeführt wird, müssen Sie dem Projekt und dem Feed manuell Zugriff auf den Builddienst des Pipelineprojekts gewähren.

nuget.config

<configuration>
  <packageSources>
    <!-- 
      Any Azure Artifacts feeds within your organization will automatically be authenticated. Both dev.azure.com and visualstudio.com domains are supported.
      Project scoped feed URL includes the project, organization scoped feed URL does not.
    -->
    <add key="MyProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyProjectFeed2" value="https://{organization}.pkgs.visualstudio.com/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyOtherProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed@view}/nuget/v3/index.json" />
    <add key="MyOrganizationFeed1" value="https://pkgs.dev.azure.com/{organization}/_packaging/{feed}/nuget/v3/index.json" />
  </packageSources>
</configuration>

Um eine Dienstverbindung zu verwenden, geben Sie die Dienstverbindung in der nuGetServiceConnections Eingabe für den NuGet-Authentifizierungstask an. Anschließend können Sie in einer Aufgabe auf die Dienstverbindung mit -ApiKey AzureArtifacts verweisen.

nuget.exe

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: NuGetToolInstaller@1 # Optional if nuget.exe >= 4.8.5385 is already on the path
  inputs:
    versionSpec: '*'
    checkLatest: true
- script: nuget restore
# ...
- script: nuget push -ApiKey AzureArtifacts -Source "MyProjectFeed1" MyProject.*.nupkg

dotnet

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: UseDotNet@2 # Optional if the .NET Core SDK is already installed
- script: dotnet restore
# ...
- script: dotnet nuget push --api-key AzureArtifacts --source https://pkgs.dev.azure.com/{organization}/_packaging/{feed1}/nuget/v3/index.json MyProject.*.nupkg

In den obigen Beispielen OtherOrganizationFeedConnection sind und ThirdPartyRepositoryConnection die Namen von NuGet-Dienstverbindungen , die für die Verwendung in Ihrer Pipeline konfiguriert und autorisiert wurden, und urLs aufweisen, die mit denen in Ihrem nuget.config Befehlszeilenargument oder übereinstimmen.

Die Paketquell-URL, die auf einen Azure Artifacts-Feed verweist, kann das Projekt enthalten oder nicht. Eine URL für einen projektbezogenen Feed muss das Projekt enthalten, und eine URL für einen Organisationsfeed darf das Projekt nicht enthalten. Erfahren Sie mehr über projektbezogene Feeds.

Wiederherstellen und Pushen von NuGet-Paketen außerhalb Ihrer Organisation

Wenn Sie Azure Artifacts-Feeds aus einer anderen Organisation oder ein authentifiziertes Paketrepository eines Drittanbieters verwenden, müssen Sie NuGet-Dienstverbindungen einrichten und in der nuGetServiceConnections Eingabe angeben. Feeds in Ihrer Azure Artifacts-Organisation werden ebenfalls automatisch authentifiziert.

nuget.config

<configuration>
  <packageSources>
    <!-- Any Azure Artifacts feeds within your organization will automatically be authenticated -->
    <add key="MyProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyOrganizationFeed" value="https://pkgs.dev.azure.com/{organization}/_packaging/{feed}/nuget/v3/index.json" />
    <!-- Any package source listed here whose URL matches the URL of a service connection in nuGetServiceConnections will also be authenticated.
         The key name here does not need to match the name of the service connection. -->
    <add key="OtherOrganizationFeed" value="https://pkgs.dev.azure.com/{otherorganization}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="ThirdPartyRepository" value="https://{thirdPartyRepository}/index.json" />
  </packageSources>
</configuration>

nuget.exe

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: NuGetToolInstaller@1 # Optional if nuget.exe >= 4.8.5385 is already on the path
  inputs:
    versionSpec: '*'
    checkLatest: true
- script: nuget restore
# ...
- script: nuget push -ApiKey AzureArtifacts -Source "MyProjectFeed1" MyProject.*.nupkg

dotnet

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: UseDotNet@2 # Optional if the .NET Core SDK is already installed
- script: dotnet restore
# ...
- script: dotnet nuget push --api-key AzureArtifacts --source "MyProjectFeed1"  MyProject.*.nupkg

OtherOrganizationFeedConnection und ThirdPartyRepositoryConnection sind die Namen von NuGet-Dienstverbindungen , die für die Verwendung in Ihrer Pipeline konfiguriert und autorisiert wurden, und über URLs verfügen, die mit denen in Ihrem nuget.config- oder Befehlszeilenargument übereinstimmen.

Die Paketquell-URL, die auf einen Azure Artifacts-Feed verweist, kann das Projekt enthalten oder nicht. Eine URL für einen projektbezogenen Feed muss das Projekt enthalten, und eine URL für einen Organisationsfeed darf das Projekt nicht enthalten. Erfahren Sie mehr über projektbezogene Feeds.

Anforderungen

Anforderung BESCHREIBUNG
Pipelinetypen YAML, Klassischer Build, klassisches Release
Wird ausgeführt auf Agent, DeploymentGroup
Forderungen Keine
Capabilities Diese Aufgabe erfüllt keine Anforderungen an nachfolgende Aufgaben im Auftrag.
Befehlseinschränkungen Any
Setzbare Variablen Any
Agent-Version 2.144.0 oder höher
Aufgabenkategorie Paket
Anforderung BESCHREIBUNG
Pipelinetypen YAML, Klassischer Build, klassisches Release
Wird ausgeführt auf Agent, DeploymentGroup
Forderungen Keine
Capabilities Diese Aufgabe erfüllt keine Anforderungen an nachfolgende Aufgaben im Auftrag.
Befehlseinschränkungen Any
Setzbare Variablen Any
Agent-Version 2.120.0 oder höher
Aufgabenkategorie Paket