NuGetAuthenticate@1 – NuGet-Authentifizierung v1-Aufgabe
Konfigurieren Sie NuGet-Tools für die Authentifizierung mit 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:
#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
forceReinstallCredentialProvider
-
installieren Sie den Anmeldeinformationsanbieter neu, auch wenn bereits
boolean
. Standardwert: false
.
Wahlfrei. 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 Vorgang bereitgestellten Anmeldeinformationsanbieter ü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, 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.
Ich erhalte fehler "Eine Aufgabe wurde abgebrochen" während einer Paketwiederherstellung. Was soll ich tun?
Bekannte Probleme in NuGet und im Azure Artifacts-Anmeldeinformationsanbieter können diesen Fehlertyp 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 während großer Wiederherstellungen auf ressourcenbeschränkten Computern. Dieses Problem wurde in NuGet 5.2und .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 .NET Core Tool Installer Aufgabe kann verwendet werden, um eine neuere Version des .NET Core SDK zu installieren.
Es gibt auch bekannte Probleme mit dem Azure Artifacts Credential Provider (installiert durch diese Aufgabe), einschließlich Artefakte-credprovider/#77 und Artefakte-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 keins der oben genannten Probleme behoben wird, aktivieren Sie Plug-In-Diagnoseprotokollierung, und melden Sie das Problem an NuGet- und den Azure Artifacts Credential Provider.
Wie unterscheidet sich dieser Vorgang von den Aufgaben NuGetCommand und DotNetCoreCLI?
Diese Aufgabe konfiguriert nuget.exe, dotnet und MSBuild für die Authentifizierung mit 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 (entweder direkt oder über ein Skript) aufrufen, um Pakete wiederherzustellen oder zu pushen.
Die Aufgaben NuGetCommand und DotNetCoreCLI erfordern die Verwendung der Aufgabe zum Wiederherstellen oder Pushpaketen, da die Authentifizierung bei 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 zum Wiederherstellen oder Pushen von Paketen an eine authentifizierte Paketquelle wie Azure Artifacts verwenden. Es gibt keine weiteren Bestellanforderungen. Diese Aufgabe kann z. B. vor oder nach einer NuGet- oder .NET Core-Toolinstallationsaufgabe sicher 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:
- Konfigurieren einer geheimen Variablen mit apiKey
- Führen Sie den Paket-Push mithilfe von
nuget push -ApiKey $(myNuGetApiKey)
oderdotnet nuget push --api-key $(myNuGetApiKey)
aus, vorausgesetzt, Sie haben die VariablemyNuGetApiKey
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 undno_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 denhttp_proxy
- undno_proxy
Variablen wird die Groß-/Kleinschreibung auf Linux- und Mac-Betriebssystemen beachtet und muss Kleinbuchstaben sein. Der Versuch, eine Azure Pipelines-Variable zum Festlegen der Umgebungsvariable zu verwenden, funktioniert nicht, da sie in Großbuchstaben konvertiert 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 true
fest.
Wie funktioniert diese Aufgabe?
Diese Aufgabe installiert den Azure Artifacts Credential Provider in das NuGet-Plug-In-Verzeichnis, wenn 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 Informationen finden Sie unter 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-Benutzer erfordert 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 sich alle von Ihnen verwendeten Azure Artifacts-Feeds in derselben Organisation wie Ihre Pipeline befinden, können Sie 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 Paketquell-URL, die auf einen Azure Artifacts-Feed verweist, kann das Projekt enthalten oder 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 aus einer anderen Organisation verwenden oder ein authentifiziertes Paket-Repository eines Drittanbieters verwenden, müssen Sie NuGet-Dienstverbindungen einrichten und in der nuGetServiceConnections
Eingabe angeben.
Feeds innerhalb 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 URLs haben, 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 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 |