Partager via


NuGetAuthenticate@1 - Tâche d’authentification NuGet v1

Configurez les outils NuGet pour s’authentifier auprès d’Azure Artifacts et d’autres référentiels NuGet. Nécessite NuGet >= 4.8.5385, dotnet >= 6 ou MSBuild >= 15.8.166.59604.

Syntaxe

# 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.

Entrées

forceReinstallCredentialProvider - réinstaller le fournisseur d’informations d’identification même s’il est déjà installé
boolean. Valeur par défaut : false.

Optionnel. Réinstalle le fournisseur d’informations d’identification dans le répertoire de profil utilisateur, même s’il est déjà installé. Si le fournisseur d’informations d’identification est déjà installé dans le profil utilisateur, la tâche détermine si elle est remplacée par le fournisseur d’informations d’identification fourni par la tâche. Cela peut mettre à niveau (ou éventuellement rétrograder) le fournisseur d’informations d’identification.


informations d’identification de connexion de service nuGetServiceConnections - pour les flux en dehors de cette organisation
string.

Optionnel. Liste séparée par des virgules de connexion de service NuGet noms pour les flux en dehors de cette organisation ou de cette collection. Pour les flux de cette organisation ou de cette collection, laissez ce champ vide ; les informations d’identification de la build sont utilisées automatiquement.


Options de contrôle de tâche

Toutes les tâches ont des options de contrôle en plus de leurs entrées de tâche. Pour plus d’informations, consultez Options de contrôle et propriétés de tâche courantes.

Variables de sortie

Aucun.

Remarques

Important

Cette tâche est uniquement compatible avec NuGet >= 4.8.0.5385, dotnet >= 6 ou MSBuild >= 15.8.166.59604.

Quels outils sont compatibles avec cette tâche ?

Cette tâche configure les outils qui prennent en charge plug-ins NuGet multiplateformes. Les outils incluent actuellement nuget.exe, dotnet et versions récentes de MSBuild avec prise en charge intégrée de la restauration des packages NuGet.

Plus précisément, cette tâche configure les éléments suivants :

  • nuget.exe (version 4.8.5385 ou ultérieure)
  • dotnet / .NET 6 SDK ou version ultérieure (une version précédente de cette tâche, NuGetAuthenticateV0, nécessite .NET Core 2.1, qui n’est plus pris en charge)
  • MSBuild (version 15.8.166.59604 ou ultérieure)

La mise à niveau vers la dernière version stable est recommandée si vous rencontrez des problèmes.

J’obtiens les erreurs « Une tâche a été annulée » lors d’une restauration de package. Que dois-je faire ?

Les problèmes connus dans NuGet et dans le fournisseur d’informations d’identification Azure Artifacts peuvent entraîner ce type d’erreur et la mise à jour vers le dernier nuget peut vous aider.

Un problème connu dans certaines versions de nuget/dotnet peut entraîner cette erreur, en particulier lors de restaurations volumineuses sur des machines contraintes de ressources. Ce problème est résolu dans NuGet 5.2et le KIT SDK .NET Core 2.1.80X et 2.2.40X. Si vous utilisez une version antérieure, essayez de mettre à niveau votre version de NuGet ou dotnet. La tâche programme d’installation de l’outil .NET Core peut être utilisée pour installer une version plus récente du Kit de développement logiciel (SDK) .NET Core.

Il existe également des problèmes connus avec le fournisseur d’informations d’identification Azure Artifacts (installé par cette tâche), notamment artifacts-credprovider/#77 et artifacts-credprovider/#108. Si vous rencontrez ces problèmes, vérifiez que vous disposez du fournisseur d’informations d’identification le plus récent en définissant la forceReinstallCredentialProvider d’entrée sur true dans la tâche d’authentification NuGet. Ce paramètre garantit également que votre fournisseur d’informations d’identification est automatiquement mis à jour à mesure que les problèmes sont résolus.

Si aucun des éléments ci-dessus ne résout le problème, activez journalisation des diagnostics du plug-in et signalez le problème à NuGet et au fournisseur d’informations d’identification Azure Artifacts .

Comment cette tâche diffère-t-elle des tâches NuGetCommand et DotNetCoreCLI ?

Cette tâche configure nuget.exe, dotnet et MSBuild pour s’authentifier auprès d’Azure Artifacts ou d’autres référentiels qui nécessitent une authentification. Une fois cette tâche exécutée, vous pouvez appeler les outils à une étape ultérieure (directement ou via un script) pour restaurer ou envoyer (push) des packages.

Les tâches NuGetCommand et DotNetCoreCLI nécessitent l’utilisation de la tâche pour restaurer ou envoyer (push) des packages, car l’authentification auprès d’Azure Artifacts est configurée uniquement pendant la durée de vie de la tâche. Cela peut vous empêcher de restaurer ou d’envoyer (push) des packages au sein de votre propre script. Il peut également vous empêcher de transmettre des arguments de ligne de commande spécifiques à l’outil.

La tâche NuGetAuthenticate est la méthode recommandée pour utiliser des flux authentifiés au sein d’un pipeline.

Quand dans mon pipeline dois-je exécuter cette tâche ?

Cette tâche doit s’exécuter avant d’utiliser un outil NuGet pour restaurer ou envoyer (push) des packages vers une source de package authentifiée telle qu’Azure Artifacts. Il n’existe aucune autre exigence de classement. Par exemple, cette tâche peut s’exécuter en toute sécurité avant ou après une tâche d’installation d’outil NuGet ou .NET Core.

Comment configurer une source de package NuGet qui utilise ApiKey (« clés API NuGet »), comme nuget.org ?

Certaines sources de package telles que nuget.org utiliser des clés API pour l’authentification lors de l’envoi de packages, plutôt que d'username/password informations d’identification. En raison de limitations dans NuGet, cette tâche ne peut pas être utilisée pour configurer une connexion de service NuGet qui utilise une clé API.

Au lieu de:

  1. Configurer une variable secrète contenant l’ApiKey
  2. Effectuez l’envoi (push) du package à l’aide de nuget push -ApiKey $(myNuGetApiKey) ou de dotnet nuget push --api-key $(myNuGetApiKey), en supposant que vous avez nommé la variable myNuGetApiKey

Mon agent se trouve derrière un proxy web. NuGetAuthenticate va-t-il configurer nuget.exe, dotnet et MSBuild pour utiliser mon proxy ?

Non. Bien que cette tâche elle-même fonctionne derrière un proxy web votre agent a été configuré pour utiliser, il ne configure pas les outils NuGet pour utiliser le proxy.

Pour ce faire, vous pouvez :

  • Définissez la variable d’environnement http_proxy et éventuellement no_proxy sur vos paramètres proxy. Pour plus d’informations, consultez variables d’environnement NuGet CLI. Ces variables sont couramment utilisées, que d’autres outils non NuGet (par exemple curl) peuvent également utiliser.

    Attention :
    Les variables http_proxy et no_proxy respectent la casse sur les systèmes d’exploitation Linux et Mac et doivent être en minuscules. La tentative d’utilisation d’une variable Azure Pipelines pour définir la variable d’environnement ne fonctionnera pas, car elle sera convertie en majuscules. Au lieu de cela, définissez les variables d’environnement sur l’ordinateur de l’agent auto-hébergé et redémarrez l’agent.

  • Ajoutez les paramètres de proxy au fichier nuget.configau niveau de l’utilisateur, manuellement ou à l’aide de nuget config -set, comme décrit dans la documentation de référence nuget.config.

    Attention :
    Les paramètres de proxy (tels que http_proxy) doivent être ajoutés à la configuration au niveau de l’utilisateur. Ils seront ignorés s’ils sont spécifiés dans un autre fichier nuget.config.

Comment déboguer si j’ai des problèmes avec cette tâche ?

Pour obtenir des journaux détaillés à partir du pipeline, ajoutez une variable de pipeline system.debug et définissez-la sur true.

Comment cette tâche fonctionne-t-elle ?

Cette tâche installe le fournisseur d’informations d’identification Azure Artifacts dans le répertoire des plug-ins NuGet s’il n’est pas déjà installé. Il définit ensuite des variables d’environnement telles que VSS_NUGET_URI_PREFIXES et VSS_NUGET_ACCESSTOKEN pour configurer le fournisseur d’informations d’identification. Ces variables restent définies pour la durée de vie du travail. Lors de la restauration ou de l’envoi de packages, un outil NuGet exécute le fournisseur d’informations d’identification, qui utilise les variables ci-dessus pour déterminer s’il doit retourner les informations d’identification à l’outil.

Pour plus d’informations, consultez la documentation du fournisseur d’informations d’identification.

Mon pipeline doit accéder à un flux dans un autre projet

Si le pipeline s’exécute dans un projet différent du projet hébergeant le flux, vous devez configurer l’autre projet pour accorder un accès en lecture/écriture au service de génération. Pour plus d’informations, consultez autorisations de package dans Azure Pipelines.

Cela fonctionnera-t-il pour les exécutions de pipeline déclenchées à partir d’un fork externe ?

Non. Les exécutions de pipeline déclenchées à partir d’un fork externe n’ont pas accès aux secrets appropriés pour l’authentification de flux interne. Ainsi, elle apparaît comme si la tâche d’authentification réussit, mais les tâches suivantes qui nécessitent l’authentification (par exemple, Nuget Push) échouent avec une erreur sur les lignes suivantes : ##[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)). Une fois la demande de tirage fusionnée dans l’origine, un pipeline déclenché à partir de cet événement s’authentifie correctement.

J’ai mis à jour nuGetAuthenticateV0 vers NuGetAuthenticateV1 et maintenant ma commande dotnet échoue avec 401

Si vous effectuez une mise à jour de NuGetAuthenticateV0 vers NuGetAuthenticateV1 et que vous obtenez une erreur lors de l’exécution d’une commande dotnet, recherchez le message It was not possible to find any compatible framework version à partir des journaux. Pour les utilisateurs dotnet, NuGetAuthenticateV1 nécessite .NET 6 au lieu de .NET Core 2.1, qui est requis dans NuGetAuthenticateV0 et n’est plus pris en charge. Pour résoudre le problème, utilisez la tâche UseDotNet@2 avant la commande dotnet pour installer .NET 6.

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

Exemples

Restaurer et envoyer (push) des packages NuGet au sein de votre organisation

Si tous les flux Azure Artifacts que vous utilisez se trouvent dans la même organisation que votre pipeline, vous pouvez utiliser la tâche NuGetAuthenticate sans spécifier d’entrées. Pour les flux délimités par le projet qui se trouvent dans un projet différent de celui dans lequel le pipeline s’exécute, vous devez donner manuellement au projet et au flux l’accès au service de génération du projet du pipeline.

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>

Pour utiliser une connexion de service, spécifiez la connexion de service dans l’entrée nuGetServiceConnections pour la tâche d’authentification NuGet. Vous pouvez ensuite référencer la connexion de service avec -ApiKey AzureArtifacts dans une tâche.

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

Dans les exemples ci-dessus, OtherOrganizationFeedConnection et ThirdPartyRepositoryConnection sont les noms des connexions de service NuGet qui ont été configurées et autorisées à être utilisées dans votre pipeline, et ont des URL qui correspondent à celles de votre argument de ligne de commande ou de nuget.config.

L’URL source du package pointant vers un flux Azure Artifacts peut ou non contenir le projet. Une URL pour un flux délimité par un projet doit contenir le projet, et une URL pour un flux délimité par l’organisation ne doit pas contenir le projet. En savoir plus sur flux délimités par le projet.

Restaurer et envoyer (push) des packages NuGet en dehors de votre organisation

Si vous utilisez des flux Azure Artifacts d’une autre organisation ou utilisez un référentiel de package authentifié tiers, vous devez configurer connexions de service NuGet et les spécifier dans l’entrée nuGetServiceConnections. Les flux au sein de votre organisation Azure Artifacts sont également authentifiés automatiquement.

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 et ThirdPartyRepositoryConnection sont les noms des connexions de service NuGet qui ont été configurées et autorisées à être utilisées dans votre pipeline, et ont des URL qui correspondent à celles de votre argument de ligne de commande ou de nuget.config.

L’URL source du package pointant vers un flux Azure Artifacts peut ou non contenir le projet. Une URL pour un flux délimité par un projet doit contenir le projet, et une URL pour un flux délimité par l’organisation ne doit pas contenir le projet. En savoir plus sur flux délimités par le projet.

Exigences

Exigence Description
Types de pipelines YAML, Build Classique, Version Classique
Exécutions sur Agent, DeploymentGroup
demandes Aucun
fonctionnalités de Cette tâche ne répond à aucune demande de tâches ultérieures dans le travail.
restrictions de commande Quelconque
variables settables Quelconque
Version de l’agent 2.144.0 ou version ultérieure
Catégorie de tâche Colis
Exigence Description
Types de pipelines YAML, Build Classique, Version Classique
Exécutions sur Agent, DeploymentGroup
demandes Aucun
fonctionnalités de Cette tâche ne répond à aucune demande de tâches ultérieures dans le travail.
restrictions de commande Quelconque
variables settables Quelconque
Version de l’agent 2.120.0 ou version ultérieure
Catégorie de tâche Colis