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:
    #nuGetServiceConnections: # string. Service connection credentials for feeds outside this organization. 
    #forceReinstallCredentialProvider: false # boolean. Reinstall the credential provider even if already installed. Default: false.

Input

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

Facoltativa. Elenco delimitato da virgole dei nomi di connessione del servizio NuGet 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.


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

Facoltativa. 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 può aggiornare (o potenzialmente effettuare il downgrade) del provider di credenziali.


Opzioni di controllo attività

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

Variabili di output

No.

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

Durante un ripristino del pacchetto viene visualizzato un errore "Un'attività è stata annullata". Cosa devo 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, soprattutto durante ripristini di grandi dimensioni nei computer con vincoli di risorse. Questo problema è stato risolto in NuGet 5.2 e .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'attività Programma di installazione dello strumento .NET Core 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 l'input forceReinstallCredentialProvider su true nell'attività Autenticazione NuGet. Questa impostazione garantisce inoltre che il provider di credenziali venga aggiornato automaticamente man mano che vengono risolti i problemi.

Se nessuno dei precedenti risolve il problema, abilitare La registrazione diagnostica del plug-in e segnalare il problema a NuGet e al provider di credenziali di 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à, è 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 viene configurata solo entro la durata dell'attività. In questo modo è possibile impedire il ripristino o il push di pacchetti all'interno dello script. Può anche impedire di passare argomenti della riga di comando specifici 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 di 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.

Ricerca per categorie configurare un'origine del pacchetto NuGet che usa ApiKey ("chiavi API NuGet"), ad esempio nuget.org?

Alcune origini di pacchetti, ad esempio nuget.org usano le chiavi API per l'autenticazione durante il push dei pacchetti, anziché username/password le 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.

In alternativa:

  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 la variabile sia stata denominata myNuGetApiKey

L'agente è dietro un proxy Web. NuGetAuthenticate configurerà nuget.exe, dotnet e MSBuild per l'uso del proxy?

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

A tale scopo, è possibile:

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

    Attenzione:
    Le http_proxy variabili 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 lettere maiuscole. 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 riferimentonuget.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.

Ricerca per categorie eseguire il debug se si verificano problemi con questa attività?

Per ottenere log dettagliati dalla pipeline, aggiungere una variabile system.debug della pipeline 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 per i pacchetti in Azure Pipelines .

Questa operazione funziona 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 dei feed interni. Di conseguenza, verrà 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 è stata unita all'origine, una pipeline che viene 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

Esempio

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

L'URL dell'origine del pacchetto che punta a un feed di Elementi di Azure 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 e eseguire il push di pacchetti NuGet all'esterno dell'organizzazione

Se si usano feed di Artefatti di Azure da un'organizzazione diversa o si usa un repository di pacchetti autenticato di terze parti, è necessario configurare le connessioni del servizio NuGet e specificarle nell'input nuGetServiceConnections . I feed all'interno dell'organizzazione di Elementi di Azure 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 del servizio NuGet configurate e autorizzate per l'uso nella pipeline e hanno URL corrispondenti a quelli nell'argomento della riga di comando o nuget.config.

L'URL dell'origine del pacchetto che punta a un feed di Elementi di Azure 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.

Requisiti

Requisito Descrizione
Tipi di pipeline YAML, build classica, versione classica
Esecuzione in Agente, DeploymentGroup
Richieste Nessuno
Capabilities Questa attività non soddisfa le richieste per le attività successive nel processo.
Restrizioni dei comandi Qualsiasi
Variabili impostabili Qualsiasi
Versione agente 2.144.0 o versione successiva
Categoria attività Pacchetto
Requisito Descrizione
Tipi di pipeline YAML, build classica, versione classica
Esecuzione in Agente, DeploymentGroup
Richieste Nessuno
Capabilities Questa attività non soddisfa le richieste per le attività successive nel processo.
Restrizioni dei comandi Qualsiasi
Variabili impostabili Qualsiasi
Versione agente 2.120.0 o versione successiva
Categoria attività Pacchetto