Partager via


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

Configurez les outils NuGet pour vous 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:
    #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

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

facultatif. Liste séparée par des virgules des noms de connexion de service NuGet 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.


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

facultatif. Réinstalle le fournisseur d’informations d’identification dans le répertoire du 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 s’il est remplacé 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.


Options de contrôle des tâches

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

Variables de sortie

Aucun.

Notes

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 les plug-ins multiplateformes NuGet. Les outils incluent actuellement nuget.exe, dotnet et les 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 configurera les éléments suivants :

  • nuget.exe (version 4.8.5385 ou ultérieure)
  • Dotnet/.NET 6 SDK ou version ultérieure (une version antérieure 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 provoquer ce type d’erreur, et la mise à jour vers la dernière version de nuget peut vous aider.

Un problème connu dans certaines versions de nuget/dotnet peut provoquer cette erreur, en particulier lors de restaurations volumineuses sur des ordinateurs à ressources limitées. Ce problème est résolu dans NuGet 5.2 et le 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 du 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 l’entrée forceReinstallCredentialProvider 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 la journalisation des diagnostics du plug-in et signalez le problème à NuGet et au fournisseur d’informations d’identification Azure Artifacts.

En quoi 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. Après l’exécution de cette tâche, vous pouvez appeler les outils dans une étape ultérieure (soit directement, soit 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 dans la durée de vie de la tâche. Cela peut vous empêcher de restaurer ou d’envoyer (push) des packages dans votre propre script. Cela 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 dans un pipeline.

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

Cette tâche doit s’exécuter avant d’utiliser un outil NuGet pour restaurer ou envoyer (push) des packages à 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 de l’outil NuGet ou .NET Core.

Comment faire 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 username/password des informations d’identification. En raison des limitations de 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 cela :

  1. Configurer une variable secrète contenant l’ApiKey
  2. Effectuer l’envoi (push) du package à l’aide nuget push -ApiKey $(myNuGetApiKey) de ou 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 configurera-t-il nuget.exe, dotnet et MSBuild pour utiliser mon proxy ?

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

Pour ce faire, vous pouvez :

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

    Attention :
    Les http_proxy variables 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 la machine 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 nuget config -set de la documentation de référencenuget.config .

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

Comment faire déboguer si je rencontre des problèmes avec cette tâche ?

Pour obtenir des journaux détaillés à partir du pipeline, ajoutez une variable system.debug de pipeline et définissez 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 pendant la durée de vie du travail. Lors de la restauration ou de l’envoi (push) 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 build. 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’une duplication externe ?

Non. Les exécutions de pipeline déclenchées à partir d’une duplication externe n’ont pas accès aux secrets appropriés pour l’authentification de flux interne. Par conséquent, il semble que la tâche d’authentification a réussi, mais les tâches suivantes qui nécessitent une authentification (par exemple, Nuget push) échouent avec une erreur du type : ##[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 effectué une mise à jour de NuGetAuthenticateV0 vers NuGetAuthenticateV1 et 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 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ée. Pour les flux délimités au projet qui se trouvent dans un projet différent de celui où 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 pour une utilisation dans votre pipeline, et ont des URL qui correspondent à ceux de votre nuget.config argument de ligne de commande ou .

L’URL source du package pointant vers un flux Azure Artifacts peut contenir ou non le projet. Une URL pour un flux délimité au projet doit contenir le projet, et une URL pour un flux étendu à l’organisation ne doit pas contenir le projet. En savoir plus sur les flux délimités au 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 un référentiel de packages authentifiés tiers, vous devez configurer les connexions au 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 nuget.config ou de votre argument de ligne de commande.

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

Spécifications

Condition requise Description
Types de pipelines YAML, build classique, version classique
S’exécute sur Agent, DeploymentGroup
Demandes None
Capabilities Cette tâche ne répond à aucune demande pour les tâches suivantes dans le travail.
Restrictions de commande Quelconque
Variables paramétrables Quelconque
Version de l’agent 2.144.0 ou version ultérieure
Catégorie de la tâche Package
Condition requise Description
Types de pipelines YAML, build classique, version classique
S’exécute sur Agent, DeploymentGroup
Demandes None
Capabilities Cette tâche ne répond à aucune demande pour les tâches suivantes dans le travail.
Restrictions de commande Quelconque
Variables paramétrables Quelconque
Version de l’agent 2.120.0 ou version ultérieure
Catégorie de la tâche Package