NuGetAuthenticate@1: tarea autenticación de NuGet v1

Configure las herramientas de NuGet para autenticarse con Azure Artifacts y otros repositorios de NuGet. Requiere NuGet >= 4.8.5385, dotnet >= 6 o MSBuild >= 15.8.166.59604.

Sintaxis

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

Entradas

nuGetServiceConnections - Credenciales de conexión de servicio para fuentes fuera de esta organización
string.

Opcional. Lista separada por comas de nombres de conexión de servicio NuGet para fuentes fuera de esta organización o colección. En el caso de las fuentes de esta organización o colección, deje este en blanco; Las credenciales de la compilación se usan automáticamente.


forceReinstallCredentialProvider - Vuelva a instalar el proveedor de credenciales aunque ya esté instalado.
boolean. Valor predeterminado: false.

Opcional. Vuelve a instalar el proveedor de credenciales en el directorio de perfiles de usuario, incluso si ya está instalado. Si el proveedor de credenciales ya está instalado en el perfil de usuario, la tarea determina si se sobrescribe con el proveedor de credenciales proporcionado por la tarea. Esto puede actualizar (o cambiar a una versión anterior) el proveedor de credenciales.


Opciones de control de tareas

Todas las tareas tienen opciones de control además de sus entradas de tareas. Para obtener más información, vea Opciones de control y propiedades de tareas comunes.

Variables de salida

Ninguno.

Observaciones

Importante

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

¿Qué herramientas son compatibles con esta tarea?

Esta tarea configura herramientas que admiten complementos multiplataforma de NuGet. Actualmente, las herramientas incluyen nuget.exe, dotnet y versiones recientes de MSBuild con compatibilidad integrada para restaurar paquetes NuGet.

En concreto, esta tarea configurará:

  • nuget.exe (versión 4.8.5385 o posterior)
  • dotnet / .NET 6 SDK o posterior (una versión anterior de esta tarea, NuGetAuthenticateV0, requiere .NET Core 2.1, que ya no se admite)
  • MSBuild (versión 15.8.166.59604 o posterior)

Se recomienda actualizar a la versión estable más reciente si encuentra algún problema.

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

Los problemas conocidos en NuGet y en el proveedor de credenciales de Azure Artifacts 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 provocar este error, especialmente durante restauraciones grandes en máquinas con recursos restringidos. Este problema se ha corregido en NuGet 5.2 y el SDK de .NET Core 2.1.80X y 2.2.40X. Si usa una versión anterior, pruebe a 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 proveedor de credenciales de Azure Artifacts (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 forceReinstallCredentialProvidertrue en en la tarea Autenticación de NuGet. Esta configuración 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 y notifique el problema a NuGet y al proveedor de credenciales de Azure Artifacts.

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

Esta tarea configura nuget.exe, dotnet y MSBuild para autenticarse con Azure Artifacts u otros repositorios que requieren autenticación. Una vez que se ejecuta 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 en Azure Artifacts solo está configurada dentro de la duración de la tarea. Esto puede impedir que restaure o inserte paquetes dentro de su propio script. También puede impedir que pase argumentos de línea de comandos específicos 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 puede ejecutarse de forma segura antes o después de una tarea de instalador de herramientas de NuGet o .NET Core.

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

Algunos orígenes de paquetes, como nuget.org usan claves de API para la autenticación al insertar paquetes, en lugar de username/password credenciales. Debido a las limitaciones de NuGet, esta tarea no se puede usar para configurar una conexión de servicio NuGet que use una clave de API.

En su lugar:

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

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

No. Aunque esta tarea funcionará detrás de un proxy web, el agente se ha configurado para su uso, no configura las herramientas de NuGet para usar el proxy.

Para ello, puede:

  • Establezca la variable http_proxy de entorno y, opcionalmente no_proxy , en la configuración del proxy. Consulte Variables de entorno de la CLI de NuGet para más información. Estas variables se usan normalmente, que otras herramientas que no son de NuGet (por ejemplo, curl) también pueden usar.

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

  • Agregue la configuración de proxy al archivo de nuget.configde nivel de usuario , ya sea manualmente o usando nuget config -set como se describe en la documentación de referencia denuget.config .

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

Cómo depurar si tengo problemas con esta tarea?

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

¿Cómo funciona esta tarea?

Esta tarea instala el proveedor de credenciales de Azure Artifacts en el directorio de complementos de NuGet si aún no está instalado. A continuación, establece variables de entorno como VSS_NUGET_URI_PREFIXES y VSS_NUGET_ACCESSTOKEN para configurar el proveedor de credenciales. Estas variables permanecen establecidas durante la vigencia 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 necesita 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. Para más información , consulte Permisos de paquete en Azure Pipelines .

¿Funcionará esto para las ejecuciones de canalización que se desencadenan desde una bifurcación externa?

No. Las ejecuciones de canalización que se desencadenan desde una bifurcación externa no tienen acceso a los secretos adecuados para la autenticación de fuente interna. Por lo tanto, aparecerá como si la tarea de autenticación se realizara correctamente, pero las tareas posteriores que requieren autenticación (como la inserción de NuGet) producirán un error a lo largo de las líneas de: ##[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)). Después de combinar la solicitud de incorporación de cambios en el origen, se autenticará correctamente una canalización que se desencadene desde ese evento.

He actualizado de NuGetAuthenticateV0 a NuGetAuthenticateV1 y ahora se produce un error en el comando dotnet con 401.

Si va a actualizar desde NuGetAuthenticateV0 a NuGetAuthenticateV1 y recibe un error al ejecutar un comando dotnet, busque el mensaje It was not possible to find any compatible framework version de los registros. Para los usuarios de dotnet, NuGetAuthenticateV1 requiere .NET 6 en lugar de .NET Core 2.1, que es necesario en NuGetAuthenticateV0 y ya no se admite. Para resolver el problema, use la tarea UseDotNet@2 antes del comando dotnet para instalar .NET 6.

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

Ejemplos

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

Si todas las fuentes de 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 al en el que 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 nuGetServiceConnections entrada de la tarea Autenticación de NuGet. A continuación, puede hacer referencia a la conexión de servicio con -ApiKey AzureArtifacts en una tarea.

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

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

La dirección URL del origen del paquete que apunta a una fuente de Azure Artifacts puede contener o no el proyecto. Una dirección URL de 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. Obtenga más información sobre las fuentes con ámbito de proyecto.

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

Si usa fuentes de Azure Artifacts de otra organización o usa un repositorio de paquetes autenticado de terceros, deberá configurar las conexiones del servicio NuGet y especificarlas en la nuGetServiceConnections entrada. Las fuentes de la organización de Azure Artifacts 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@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 y ThirdPartyRepositoryConnection son los nombres de las conexiones de servicio NuGet que se han configurado y autorizado para su uso en la canalización, y tienen direcciones URL que coinciden con las de su nuget.config o argumento de línea de comandos.

La dirección URL del origen del paquete que apunta a una fuente de Azure Artifacts puede contener o no el proyecto. Una dirección URL de 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. Obtenga más información sobre las fuentes con ámbito de proyecto.

Requisitos

Requisito Descripción
Tipos de canalización YAML, compilación clásica, versión clásica
Se ejecuta en Agente, DeploymentGroup
Peticiones None
Capabilities Esta tarea no satisface ninguna demanda de tareas posteriores en el trabajo.
Restricciones de comandos Any
Variables que se pueden establecer Any
Versión del agente 2.144.0 o superior
Categoría de la tarea: Paquete
Requisito Descripción
Tipos de canalización YAML, compilación clásica, versión clásica
Se ejecuta en Agente, DeploymentGroup
Peticiones None
Capabilities Esta tarea no satisface ninguna demanda de tareas posteriores en el trabajo.
Restricciones de comandos Any
Variables que se pueden establecer Any
Versión del agente 2.120.0 o superior
Categoría de la tarea: Paquete