Condividi tramite


NuGetAuthenticate@1 - Attività Autenticare NuGet v1

Configurare gli strumenti NuGet per l'autenticazione con Azure Artifacts e altri repository NuGet. Richiede nuGet >= 4.8.5385, dotnet >= 6 o MSBuild >= 15.8.166.59604.

Sintassi

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

Ingressi

forceReinstallCredentialProvider - Reinstallare il provider di credenziali anche se è già installato
boolean. Valore predefinito: false.

Opzionale. Reinstalla il provider di credenziali nella directory del profilo utente, anche se è già installato. Se il provider di credenziali è già installato nel profilo utente, l'attività determina se viene sovrascritta con il provider di credenziali fornito dall'attività. Questo potrebbe aggiornare (o potenzialmente effettuare il downgrade) del provider di credenziali.


nuGetServiceConnections - credenziali di connessione al servizio per i feed esterni all'organizzazione
string.

Opzionale. Elenco delimitato da virgole di connessione al servizio NuGet nomi per i feed esterni all'organizzazione o alla raccolta. Per i feed in questa organizzazione o raccolta, lasciare vuoto questo campo; le credenziali della compilazione vengono usate automaticamente.


Opzioni di controllo attività

Tutte le attività hanno opzioni di controllo oltre ai relativi input di attività. Per altre informazioni, vedere Opzioni di controllo e proprietà comuni delle attività.

Variabili di output

Nessuno.

Osservazioni

Importante

Questa attività è compatibile solo con NuGet >= 4.8.0.5385, dotnet >= 6 o MSBuild >= 15.8.166.59604.

Quali strumenti sono compatibili con questa attività?

Questa attività configura gli strumenti che supportano plug-in multipiattaforma NuGet. Gli strumenti includono attualmente nuget.exe, dotnet e versioni recenti di MSBuild con supporto predefinito per il ripristino di pacchetti NuGet.

In particolare, questa attività configurerà:

  • nuget.exe (versione 4.8.5385 o successiva)
  • dotnet / .NET 6 SDK o versione successiva (una versione precedente di questa attività, NuGetAuthenticateV0, richiede .NET Core 2.1, che non è più supportato)
  • MSBuild (versione 15.8.166.59604 o successiva)

Se si verificano problemi, è consigliabile eseguire l'aggiornamento alla versione stabile più recente.

Si verificano errori di annullamento di un'attività durante il ripristino del pacchetto. Cosa dovrei fare?

I problemi noti in NuGet e nel provider di credenziali di Azure Artifacts possono causare questo tipo di errore e l'aggiornamento alla versione più recente di NuGet può essere utile.

Un problema noto in alcune versioni di nuget/dotnet può causare questo errore, in particolare durante ripristini di grandi dimensioni nei computer con vincoli di risorse. Questo problema è stato risolto in NuGet 5.2e .NET Core SDK 2.1.80X e 2.2.40X. Se si usa una versione precedente, provare ad aggiornare la versione di NuGet o dotnet. L'programma di installazione dello strumento .NET Core attività può essere usata per installare una versione più recente di .NET Core SDK.

Esistono anche problemi noti con il provider di credenziali di Azure Artifacts (installato da questa attività), inclusi artifacts-credprovider/#77 e artifacts-credprovider/#108. Se si verificano questi problemi, assicurarsi di avere il provider di credenziali più recente impostando il forceReinstallCredentialProvider di input su true nell'attività Autenticazione NuGet. Questa impostazione garantisce anche che il provider di credenziali venga aggiornato automaticamente man mano che vengono risolti i problemi.

Se nessuno dei precedenti risolve il problema, abilitare plug-in Diagnostic Logging e segnalare il problema a NuGet e al provider di credenziali Azure Artifacts.

In che modo questa attività è diversa dalle attività NuGetCommand e DotNetCoreCLI?

Questa attività configura nuget.exe, dotnet e MSBuild per l'autenticazione con Azure Artifacts o altri repository che richiedono l'autenticazione. Dopo l'esecuzione di questa attività, è quindi possibile richiamare gli strumenti in un passaggio successivo (direttamente o tramite uno script) per ripristinare o eseguire il push dei pacchetti.

Le attività NuGetCommand e DotNetCoreCLI richiedono l'uso dell'attività per ripristinare o eseguire il push dei pacchetti, perché l'autenticazione in Azure Artifacts è configurata solo entro la durata dell'attività. Ciò può impedire il ripristino o il push dei pacchetti all'interno dello script. Può anche impedire il passaggio di argomenti specifici della riga di comando allo strumento.

L'attività NuGetAuthenticate è il modo consigliato per usare i feed autenticati all'interno di una pipeline.

Quando nella pipeline è necessario eseguire questa attività?

Questa attività deve essere eseguita prima di usare uno strumento NuGet per ripristinare o eseguire il push di pacchetti in un'origine pacchetto autenticata, ad esempio Azure Artifacts. Non esistono altri requisiti di ordinamento. Ad esempio, questa attività può essere eseguita in modo sicuro prima o dopo un'attività di installazione dello strumento NuGet o .NET Core.

Come si configura un'origine del pacchetto NuGet che usa ApiKey ("chiavi API NuGet"), ad esempio nuget.org?

Alcune origini di pacchetti, ad esempio nuget.org usano chiavi API per l'autenticazione durante il push dei pacchetti, anziché username/password credenziali. A causa delle limitazioni in NuGet, questa attività non può essere usata per configurare una connessione al servizio NuGet che usa una chiave API.

Invece:

  1. Configurare una variabile privata contenente ApiKey
  2. Eseguire il push del pacchetto usando nuget push -ApiKey $(myNuGetApiKey) o dotnet nuget push --api-key $(myNuGetApiKey), presupponendo che sia stata denominata la variabile myNuGetApiKey

L'agente si trova dietro un proxy Web. NuGetAuthenticate configura nuget.exe, dotnet e MSBuild per l'uso del proxy?

No. Anche se questa attività funzionerà dietro un proxy Web l'agente è stato configurato per l'uso di, non configura gli strumenti NuGet per l'uso del proxy.

A tale scopo, è possibile:

  • Impostare la variabile di ambiente http_proxy e, facoltativamente, no_proxy sulle impostazioni proxy. Per informazioni dettagliate, vedere variabili di ambiente dell'interfaccia della riga di comando nuGet. Queste variabili sono variabili comunemente usate che possono essere usate anche da altri strumenti non NuGet (ad esempio curl).

    attenzione:
    Le variabili http_proxy e no_proxy fanno distinzione tra maiuscole e minuscole nei sistemi operativi Linux e Mac e devono essere minuscole. Il tentativo di usare una variabile di Azure Pipelines per impostare la variabile di ambiente non funzionerà, perché verrà convertito in maiuscolo. Impostare invece le variabili di ambiente nel computer dell'agente self-hosted e riavviare l'agente.

  • Aggiungere le impostazioni proxy al file di nuget.configa livello di utente, manualmente o usando nuget config -set come descritto nella documentazione di riferimento nuget.config.

    attenzione:
    Le impostazioni proxy , ad esempio http_proxy, devono essere aggiunte alla configurazione a livello di utente. Verranno ignorati se specificati in un file di nuget.config diverso.

Come si esegue il debug se si verificano problemi con questa attività?

Per ottenere log dettagliati dalla pipeline, aggiungere una variabile della pipeline system.debug e impostare su true.

Come funziona questa attività?

Questa attività installa il provider di credenziali di Azure Artifacts nella directory dei plug-in NuGet, se non è già installato. Imposta quindi variabili di ambiente come VSS_NUGET_URI_PREFIXES e VSS_NUGET_ACCESSTOKEN per configurare il provider di credenziali. Queste variabili rimangono impostate per la durata del processo. Durante il ripristino o il push dei pacchetti, uno strumento NuGet esegue il provider di credenziali, che usa le variabili precedenti per determinare se deve restituire le credenziali allo strumento.

Per altri dettagli, vedere la documentazione del provider di credenziali.

La pipeline deve accedere a un feed in un progetto diverso

Se la pipeline è in esecuzione in un progetto diverso da quello che ospita il feed, è necessario configurare l'altro progetto per concedere l'accesso in lettura/scrittura al servizio di compilazione. Per altri dettagli, vedere autorizzazioni del pacchetto in Azure Pipelines.

Questa operazione funzionerà per le esecuzioni della pipeline attivate da un fork esterno?

No. Le esecuzioni di pipeline attivate da un fork esterno non hanno accesso ai segreti appropriati per l'autenticazione del feed interno. Verrà quindi visualizzato come l'attività di autenticazione ha esito positivo, ma le attività successive che richiedono l'autenticazione (ad esempio il push NuGet) avranno esito negativo con un errore lungo le righe di: ##[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)). Dopo che la richiesta pull viene unita all'origine, quindi una pipeline attivata da tale evento verrà autenticata correttamente.

Aggiornamento da NuGetAuthenticateV0 a NuGetAuthenticateV1 e ora il comando dotnet ha esito negativo con 401

Se si esegue l'aggiornamento da NuGetAuthenticateV0 a NuGetAuthenticateV1 e viene visualizzato un errore durante l'esecuzione di un comando dotnet, cercare il messaggio It was not possible to find any compatible framework version dai log. Per gli utenti dotnet, NuGetAuthenticateV1 richiede .NET 6 anziché .NET Core 2.1, obbligatorio in NuGetAuthenticateV0 e non è più supportato. Per risolvere il problema, usare l'attività UseDotNet@2 prima del comando dotnet per installare .NET 6.

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

Esempi

Ripristinare ed eseguire il push di pacchetti NuGet all'interno dell'organizzazione

Se tutti i feed di Azure Artifacts usati si trovano nella stessa organizzazione della pipeline, è possibile usare l'attività NuGetAuthenticate senza specificare alcun input. Per i feed con ambito progetto che si trovano in un progetto diverso da quello in cui è in esecuzione la pipeline, è necessario assegnare manualmente al progetto e all'accesso del feed al servizio di compilazione del progetto della 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>

Per usare una connessione al servizio, specificare la connessione al servizio nell'input nuGetServiceConnections per l'attività Autenticazione NuGet. È quindi possibile fare riferimento alla connessione al servizio con -ApiKey AzureArtifacts in un'attività.

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

Negli esempi precedenti, OtherOrganizationFeedConnection e ThirdPartyRepositoryConnection sono i nomi delle connessioni al servizio NuGet configurate e autorizzate per l'uso nella pipeline e hanno URL corrispondenti a quelli nell'argomento della riga di comando o del nuget.config.

L'URL dell'origine del pacchetto che punta a un feed di Azure Artifacts può contenere o meno il progetto. Un URL per un feed con ambito progetto deve contenere il progetto e un URL per un feed con ambito organizzazione non deve contenere il progetto. Altre informazioni sui feed con ambito progetto.

Ripristinare ed eseguire il push di pacchetti NuGet all'esterno dell'organizzazione

Se si usano feed di Azure Artifacts da un'organizzazione diversa o si usa un repository di pacchetti autenticato di terze parti, sarà necessario configurare connessioni al servizio NuGet e specificarle nell'input nuGetServiceConnections. Anche i feed all'interno dell'organizzazione di Azure Artifacts verranno autenticati automaticamente.

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 e ThirdPartyRepositoryConnection sono i nomi delle connessioni al servizio NuGet configurate e autorizzate per l'uso nella pipeline e hanno URL corrispondenti a quelli nell'argomento nuget.config o della riga di comando.

L'URL dell'origine del pacchetto che punta a un feed di Azure Artifacts può contenere o meno il progetto. Un URL per un feed con ambito progetto deve contenere il progetto e un URL per un feed con ambito organizzazione non deve contenere il progetto. Altre informazioni sui feed con ambito progetto.

Fabbisogno

Requisito Descrizione
Tipi di pipeline YAML, build classica, versione classica
Viene eseguito in Agente, DeploymentGroup
richieste Nessuno
funzionalità di Questa attività non soddisfa alcuna richiesta di attività successive nel processo.
restrizioni dei comandi Qualunque
variabili impostabili Qualunque
Versione dell'agente 2.144.0 o versione successiva
Categoria attività Pacco
Requisito Descrizione
Tipi di pipeline YAML, build classica, versione classica
Viene eseguito in Agente, DeploymentGroup
richieste Nessuno
funzionalità di Questa attività non soddisfa alcuna richiesta di attività successive nel processo.
restrizioni dei comandi Qualunque
variabili impostabili Qualunque
Versione dell'agente 2.120.0 o versione successiva
Categoria attività Pacco