Freigeben über


NuGetAuthenticate@1 – NuGet-Authentifizierung v1-Aufgabe

Konfigurieren Sie NuGet-Tools so, dass sie mit Azure Artifacts und anderen NuGet-Repositories authentifizieren. 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:
    #azureDevOpsServiceConnection: # string. Alias: workloadIdentityServiceConnection. Optional. Use when nuGetServiceConnections == ''. 'Azure DevOps' Service Connection. 
    #feedUrl: # string. Optional. Use when workloadIdentityServiceConnection != ''. Azure Artifacts URL. 
    #forceReinstallCredentialProvider: false # boolean. Reinstall the credential provider even if already installed. Default: false.
    #nuGetServiceConnections: # string. Service connection credentials for feeds outside this organization.
# 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.

Eingänge

azureDevOpsServiceConnection - 'Azure DevOps' Serviceverbindung
Eingabealias: workloadIdentityServiceConnection. string. Wahlfrei. Wird verwendet, wenn nuGetServiceConnections == ''.

Wenn dies gesetzt ist, feedUrl ist erforderlich. Alle anderen Eingaben werden ignoriert.


feedUrl - Azure Artifacts URL
string. Wahlfrei. Wird verwendet, wenn workloadIdentityServiceConnection != ''.

Wenn dies gesetzt ist, workloadIdentityServiceConnection ist erforderlich. Alle anderen Eingaben werden ignoriert. Nicht kompatibel mit nuGetServiceConnections. Die Feed-URL sollte im NuGet-Service-Index-Format sein: https://pkgs.dev.azure.com/{ORG_NAME}/{PROJECT}/_packaging/{FEED_NAME}/nuget/v3/index.json.


forceReinstallCredentialProvider - installieren Sie den Anmeldeinformationsanbieter neu, auch wenn bereits
boolean. Standardwert: false.

Wenn der Zugangsdatenanbieter bereits im Benutzerprofil installiert ist, wird festgestellt, ob er mit dem task-bereitgestellten Zugangsdienstanbieter überschrieben wird. Dies kann das Upgrade (oder potenziell Downgrade) des Anmeldeinformationsanbieters durchführen.


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

Wahlfrei. Die durch Trennzeichen getrennte Liste der NuGet-Dienstverbindung Namen für Feeds außerhalb dieser Organisation oder Sammlung. Für Feeds in dieser Organisation oder Sammlung lassen Sie dieses Leerzeichen; die Anmeldeinformationen des Builds werden automatisch verwendet.


Aufgabensteuerungsoptionen

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

Ausgabevariablen

Nichts.

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?

Diese Aufgabe konfiguriert Tools, die Plattformübergreifende NuGet-Plug-Insunterstützen. Die Tools umfassen derzeit nuget.exe, dotnet und aktuelle Versionen von MSBuild mit integrierter Unterstützung für das Wiederherstellen von NuGet-Paketen.

Insbesondere konfiguriert diese Aufgabe Folgendes:

  • nuget.exe (Version 4.8.5385 oder höher)
  • dotnet / .NET 6 SDK oder höher (eine frühere Version dieser Aufgabe, NuGetAuthenticateV0, benötigt .NET Core 2.1, das 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.

Ich erhalte fehler "Eine Aufgabe wurde abgebrochen" während einer Paketwiederherstellung. Was soll ich tun?

Bekannte Probleme in NuGet und im Azure Artifacts Credential Provider können solche Fehler verursachen, und ein Update zum neuesten Nuget kann helfen.

Ein bekanntes Problem in einigen Versionen von nuget/dotnet kann diesen Fehler verursachen, insbesondere während großer Wiederherstellungen auf ressourcenbeschränkten Computern. Dieses Problem ist in NuGet 5.2 sowie .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. Die Aufgabe .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 Credential Provider (der von dieser Aufgabe installiert wird), darunter 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 auf true in der NuGet-Authentifizierungsaufgabe festlegen. Diese Einstellung stellt außerdem sicher, dass Ihr Anmeldeinformationsanbieter automatisch aktualisiert wird, wenn Probleme behoben werden.

Wenn keines der oben genannten Probleme das Problem löst, aktiviere Plugin Diagnostic Logging und melde das Problem an NuGet sowie den Azure Artifacts Credential Provider.

Wie unterscheidet sich dieser Vorgang von den Aufgaben NuGetCommand und DotNetCoreCLI?

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

Die NuGetCommand- und DotNetCoreCLI-Aufgaben erfordern, dass die Aufgabe zur Wiederherstellung oder zum Pushen von Paketen verwendet wird, da die Authentifizierung für Azure Artifacts nur innerhalb der Lebensdauer der Aufgabe konfiguriert ist. Dies kann verhindern, dass Sie Pakete in Ihrem eigenen Skript wiederherstellen oder pushen. Es kann auch verhindern, dass Sie bestimmte Befehlszeilenargumente an das Tool übergeben.

Die NuGetAuthenticate-Aufgabe ist die empfohlene Methode, authentifizierte Feeds in 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 verwenden, um Pakete an eine authentifizierte Paketquelle wie Azure Artifacts wiederherzustellen oder zu pushen. Es gibt keine weiteren Bestellanforderungen. Zum Beispiel kann diese Aufgabe sicher entweder vor oder nach einer NuGet- oder .NET Core-Tool-Installer-Aufgabe ausgeführt werden.

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

Einige Paketquellen wie nuget.org verwenden API-Schlüssel für die Authentifizierung beim Pushen von Paketen und nicht username/password Anmeldeinformationen. Aufgrund von Einschränkungen in NuGet kann diese Aufgabe nicht zum Einrichten einer NuGet-Dienstverbindung verwendet werden, die einen API-Schlüssel verwendet.

Stattdessen:

  1. Konfigurieren einer geheimen Variablen mit apiKey
  2. Führen Sie den Paket-Push mithilfe von nuget push -ApiKey $(myNuGetApiKey) oder dotnet nuget push --api-key $(myNuGetApiKey)aus, vorausgesetzt, Sie haben die Variable myNuGetApiKey

Mein Agent liegt hinter einem Webproxy. Wird NuGetAuthenticate nuget.exe, dotnet und MSBuild für die Verwendung meines Proxys eingerichtet?

Nein. Während diese Aufgabe selbst hinter einem Webproxy funktioniert, Ihr Agent für die Verwendungkonfiguriert wurde, konfiguriert er nuGet-Tools nicht für die Verwendung des Proxys.

Dazu können Sie eine der folgenden Aktionen ausführen:

  • Legen Sie die Umgebungsvariable http_proxy fest und no_proxy optional auf Ihre Proxyeinstellungen. 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 den http_proxy- und no_proxy Variablen wird die Groß-/Kleinschreibung auf Linux- und Mac-Betriebssystemen beachtet und muss Kleinbuchstaben sein. Der Versuch, eine Azure Pipelines-Variable zu verwenden, um die Environment-Variable zu setzen, funktioniert nicht, da sie dann in Großbuchstaben umgewandelt wird. Legen Sie stattdessen die Umgebungsvariablen auf dem Computer des selbst gehosteten Agents fest, und starten Sie den Agent neu.

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

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

Wie kann ich 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 sie auf truefest.

Wie funktioniert diese Aufgabe?

Diese Aufgabe installiert den Azure Artifacts Credential Provider in das NuGet-Plugins-Verzeichnis, falls er noch nicht installiert ist. Anschließend werden Umgebungsvariablen wie VSS_NUGET_URI_PREFIXES und VSS_NUGET_ACCESSTOKEN zum Konfigurieren des Anmeldeinformationsanbieters festgelegt. 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 zurück an das Tool zurückgegeben werden sollen.

Weitere Details 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 ausgeführt wird als das Projekt, das den Feed hostet, müssen Sie das andere Projekt einrichten, um Lese-/Schreibzugriff auf den Builddienst zu gewähren. Weitere Details finden Sie Paketberechtigungen in Azure Pipelines.

Funktioniert dies für Pipelineausführungen, die von einer externen Verzweigung ausgelöst werden?

Nein. Pipelineausführungen, die von einer externen Verzweigung ausgelöst werden, haben keinen Zugriff auf die richtigen geheimen Schlüssel 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 in den folgenden Zeilen 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 die Pullanforderung mit dem Ursprung zusammengeführt wurde, dann 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 in den Protokollen nach der Meldung It was not possible to find any compatible framework version. Für Dotnet-Nutzer benötigt NuGetAuthenticateV1 .NET 6 anstelle von .NET Core 2.1, das in NuGetAuthenticateV0 erforderlich ist und nicht mehr unterstützt wird. Um das Problem zu beheben, verwenden Sie die UseDotNet@2 Aufgabe vor dem dotnet-Befehl, 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 innerhalb Ihrer Organisation

Wenn alle Azure Artifacts-Feeds, die du verwendest, in derselben Organisation wie deine Pipeline sind, kannst du die NuGetAuthenticate-Aufgabe verwenden, ohne Eingaben anzugeben. Bei Projektbereichsfeeds, die sich in einem anderen Projekt befinden als bei der Ausführung der Pipeline, müssen Sie dem Projekt und dem Feed Zugriff auf den Builddienst des Projekts der Pipeline geben.

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 die NuGet-Authentifizierungsaufgabe an. Anschließend können Sie auf die Dienstverbindung mit -ApiKey AzureArtifacts in einer Aufgabe 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 sind OtherOrganizationFeedConnection und ThirdPartyRepositoryConnection die Namen von NuGet-Dienstverbindungen, die für die Verwendung in Ihrer Pipeline konfiguriert und autorisiert wurden, und urLs enthalten, die mit denen in Ihrem nuget.config- oder Befehlszeilenargument übereinstimmen.

Die URL des Paketquellen, die auf einen Azure Artifacts-Feed verweist, kann das Projekt enthalten oder auch nicht. Eine URL für einen Projektbereichsfeed muss das Projekt enthalten, und eine URL für einen feed mit Organisationsbereich darf das Projekt nicht enthalten. Erfahren Sie mehr über projektbezogenen Feeds.

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

Wenn Sie Azure Artifacts Feeds einer anderen Organisation verwenden oder ein authentifiziertes Drittanbieter-Paket-Repository verwenden, müssen Sie NuGet Service Connections einrichten und diese im nuGetServiceConnections Input angeben. Auch die Feeds in Ihrer Azure Artifacts-Organisation werden 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 URLs haben, die mit denen in Ihrem nuget.config- oder Befehlszeilenargument übereinstimmen.

Die URL des Paketquellen, die auf einen Azure Artifacts-Feed verweist, kann das Projekt enthalten oder auch nicht. Eine URL für einen Projektbereichsfeed muss das Projekt enthalten, und eine URL für einen feed mit Organisationsbereich darf das Projekt nicht enthalten. Erfahren Sie mehr über projektbezogenen Feeds.

Anforderungen

Anforderung Beschreibung
Pipelinetypen YAML, Classic Build, Classic Release
Läuft auf Agent, DeploymentGroup
Anforderungen Nichts
Funktionen Dieser Vorgang erfüllt keine Anforderungen für nachfolgende Vorgänge im Auftrag.
Befehlseinschränkungen Jegliche
Settable-Variablen Jegliche
Agentversion 2.144.0 oder höher
Vorgangskategorie Paket
Anforderung Beschreibung
Pipelinetypen YAML, Classic Build, Classic Release
Läuft auf Agent, DeploymentGroup
Anforderungen Nichts
Funktionen Dieser Vorgang erfüllt keine Anforderungen für nachfolgende Vorgänge im Auftrag.
Befehlseinschränkungen Jegliche
Settable-Variablen Jegliche
Agentversion 2.120.0 oder höher
Vorgangskategorie Paket