Paquete: NuGet autenticación

Azure Pipelines

Configure NuGet herramientas para autenticarse con Azure Artifacts y otros NuGet repositorios.

Importante

Esta tarea solo es compatible con NuGet > = 4.8.0.5385, dotnet > = 2.1.400 o MSBuild > = 15.8.166.59604

Fragmento de código YAML

# Authenticate nuget.exe, dotnet, and MSBuild with Azure Artifacts and optionally other repositories
- task: NuGetAuthenticate@0
  #inputs:
    #nuGetServiceConnections: MyOtherOrganizationFeed, MyExternalPackageRepository # Optional
    #forceReinstallCredentialProvider: false # Optional

Argumentos

Argumento Descripción
nuGetServiceConnections
Credenciales de conexión de servicio para fuentes fuera de esta organización
(Opcional) Lista separada por comas de NuGet de conexión de servicio para las fuentes fuera de esta organización o colección que se configurarán adicionalmente. Si solo necesita fuentes en esta organización o colección, déjela en blanco. Las credenciales de la compilación se usan automáticamente.
forceReinstallCredentialProvider
Reinstalar el proveedor de credenciales incluso si ya está instalado
(Opcional) Vuelva a instalar el proveedor de credenciales en el directorio de perfil de usuario incluso si ya está instalado. Esto puede actualizar (o degradar potencialmente) el proveedor de credenciales.
Opciones de control

Ejemplos

Restauración e inserción NuGet paquetes dentro de la organización

Si todas las Azure Artifacts que usa están en la misma organización que la canalización, puede usar la tarea NuGetAuthenticate sin especificar ninguna entrada. En el caso de las fuentes con ámbito de proyecto que se encuentran en un proyecto diferente de donde se ejecuta la canalización, debe proporcionar manualmente al proyecto y a la fuente acceso al servicio de compilación del proyecto de la canalización.

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>

Para usar una conexión de servicio, especifique la conexión de servicio en la entrada para la nuGetServiceConnections NuGet autenticar. A continuación, puede hacer referencia a la conexión de servicio -ApiKey AzureArtifacts con en una tarea.

nuget.exe

- task: NuGetAuthenticate@0
  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@0
  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

En los ejemplos anteriores, y son los nombres de las conexiones de servicio de NuGet que se han configurado y autorizado para su uso en la canalización, y tienen direcciones URL que coinciden con las del argumento nuget.config o de la línea de OtherOrganizationFeedConnectionThirdPartyRepositoryConnection comandos. OtherOrganizationFeedConnection

La dirección URL de origen del paquete que apunta a Azure Artifacts fuente puede contener o no el proyecto. Una dirección URL para una fuente con ámbito de proyecto debe contener el proyecto y una dirección URL para una fuente con ámbito de organización no debe contener el proyecto. Más información.

Restauración e inserción NuGet paquetes fuera de la organización

Si usa fuentes Azure Artifacts de otra organización o usa un repositorio de paquetes autenticados de terceros, deberá configurar las conexiones de servicio NuGet y especificarlas en la entrada. Las fuentes dentro de Azure Artifacts organización también se autenticarán automáticamente.

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@0
  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@0
  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

OtherOrganizationFeedConnectiony son los nombres de las conexiones de servicio de NuGet que se han configurado y autorizado para su uso en la canalización, y tienen direcciones URL que coinciden con las del argumento nuget.config o de la línea ThirdPartyRepositoryConnection de comandos. OtherOrganizationFeedConnection

La dirección URL de origen del paquete que apunta a Azure Artifacts fuente puede contener o no el proyecto. Una dirección URL para una fuente con ámbito de proyecto debe contener el proyecto y una dirección URL para una fuente con ámbito de organización no debe contener el proyecto. Más información.

Código Abierto

Esta tarea es de código abierto en GitHub. Los comentarios y las contribuciones son bienvenidos.

Preguntas más frecuentes

¿Qué herramientas son compatibles con esta tarea?

Esta tarea configurará herramientas que admiten NuGet complementos multiplataforma. En la actualidad, esto incluye nuget.exe, dotnet y versiones recientes de MSBuild con compatibilidad integrada para restaurar NuGet paquetes.

En concreto, esta tarea configurará:

  • nuget.exe, versión 4.8.5385 o posterior
  • dotnet/SDK de .NET Core, versión 2.1.400 o posterior
  • MSBuild, versión 15.8.166.59604 o posterior

Sin embargo, se recomienda actualizar a la versión estable más reciente si se produce algún problema.

Se producen errores de "Se canceló una tarea" durante una restauración de paquetes. ¿Cuál debo hacer?

Los problemas conocidos NuGet y en el Azure Artifacts Proveedor de credenciales pueden provocar este tipo de error y la actualización a la versión más reciente de NuGet puede ayudar.

Un problema conocido en algunas versiones de nuget/dotnet puede producir este error, especialmente durante restauraciones grandes en máquinas con recursos restringidos. Este problema se ha corregido en NuGet 5.2,así como en SDK de .NET Core 2.1.80X y 2.2.40X. Si usa una versión anterior, intente actualizar la versión de NuGet o dotnet. La tarea Instalador de herramientas de .NET Core se puede usar para instalar una versión más reciente del SDK de .NET Core.

También hay problemas conocidos con el Azure Artifacts Proveedor de credenciales (instalado por esta tarea), incluidos artifacts-credprovider/#77 y artifacts-credprovider/#108. Si experimenta estos problemas, asegúrese de que tiene el proveedor de credenciales más reciente estableciendo la entrada en en la forceReinstallCredentialProvidertrue NuGet autenticar. Esto también garantizará que el proveedor de credenciales se actualice automáticamente a medida que se resuelvan los problemas.

Si ninguno de los anteriores resuelve el problema, habilite el registro de diagnóstico del complemento e informe del problema a NuGet y al Azure Artifacts Proveedor de credenciales.

¿En qué se diferencia esta tarea de las tareas NuGetCommand y DotNetCoreCLI?

Esta tarea configura nuget.exe, dotnet y MSBuild autenticarse con Azure Artifacts otros repositorios que requieren autenticación. Después de ejecutar esta tarea, puede invocar las herramientas en un paso posterior (ya sea directamente o a través de un script) para restaurar o insertar paquetes.

Las tareas NuGetCommand y DotNetCoreCLI requieren el uso de la tarea para restaurar o insertar paquetes, ya que la autenticación para Azure Artifacts solo se configura dentro de la duración de la tarea. Esto puede impedir la restauración o la insertar paquetes dentro de su propio script. También puede impedir que pase argumentos específicos de la línea de comandos a la herramienta.

La tarea NuGetAuthenticate es la manera recomendada de usar fuentes autenticadas dentro de una canalización.

¿Cuándo debo ejecutar esta tarea en mi canalización?

Esta tarea debe ejecutarse antes de usar una herramienta NuGet para restaurar o insertar paquetes en un origen de paquete autenticado, como Azure Artifacts. No hay ningún otro requisito de ordenación. Por ejemplo, esta tarea se puede ejecutar de forma segura antes o después de una NuGet de instalación de herramientas de .NET Core o .

Cómo configurar un origen NuGet paquete que use ApiKey ("NuGet api keys"), como nuget.org?

Algunos orígenes de paquetes, como nuget.org claves de API para la autenticación al insertar paquetes, en lugar de credenciales de nombre de usuario y contraseña. Debido a las limitaciones de NuGet, esta tarea no se puede usar para configurar una conexión de servicio NuGet que usa una clave de API.

En su lugar:

  1. Configuración de una variable secreta que contiene ApiKey
  2. Realice la inserción del paquete nuget push -ApiKey $(myNuGetApiKey) mediante o , suponiendo que ha llamado a la dotnet nuget push --api-key $(myNuGetApiKey) variable. myNuGetApiKey

Mi agente está detrás de un proxy web. ¿Configurará NuGetAuthenticate nuget.exe, dotnet y MSBuild usar mi proxy?

No. Aunque esta propia tarea funcionará detrás de un proxyweb que el agente ha configurado para usar , no configura las herramientas NuGet para usar el proxy.

Para ello, puede:

  • Establezca la variable de http_proxy entorno y, opcionalmente, no_proxy en la configuración del proxy. Consulte NuGet variables de entorno de la CLI para obtener más información. Tenga en cuenta que se trata de variables de uso frecuente que otras herramientas no NuGet (por ejemplo, curl) también pueden usar.

    Precaución:
    Las http_proxyno_proxy variables y distinguen mayúsculas de minúsculas en los sistemas operativos Linux y Mac y deben estar en minúsculas. El intento de usar una variable Azure Pipelines para establecer la variable de entorno no funcionará, ya que se convertirá a mayúsculas. En su lugar, establezca las variables de entorno en la máquina del agente auto-hospedado y reinicie el agente.

  • Agregue la configuración de proxy al archivo de nuget.config usuario, ya sea manualmente o mediante, como se describe en lanuget.config de referencia.

    Precaución:
    La configuración de proxy (como http_proxy ) debe agregarse a la configuración de nivel de usuario. Se omitirán si se especifican en un archivo nuget.config diferente.

Cómo depurar si tengo problemas con esta tarea?

Para obtener registros detallados de la canalización, agregue una variable de canalización system.debug a true.

¿Cómo funciona esta tarea?

Esta tarea instala el Azure Artifacts Proveedor de credenciales en el directorio NuGet complementos si aún no está instalado.
A continuación, establece variables de entorno como VSS_NUGET_URI_PREFIXES , y para configurar el proveedor de VSS_NUGET_ACCESSTOKENVSS_NUGET_EXTERNAL_FEED_ENDPOINTS credenciales. Estas variables permanecen establecidas durante la duración del trabajo.
Al restaurar o insertar paquetes, una herramienta NuGet ejecuta el proveedor de credenciales, que usa las variables anteriores para determinar si debe devolver las credenciales a la herramienta.

Consulte la documentación del proveedor de credenciales para obtener más detalles.

Mi canalización debe acceder a una fuente en un proyecto diferente

Si la canalización se ejecuta en un proyecto diferente al que hospeda la fuente, debe configurar el otro proyecto para conceder acceso de lectura y escritura al servicio de compilación. Consulte Permisos de paquete en Azure Pipelines para obtener más detalles.