Compartir a través de


NuGetAuthenticate@1: tarea autenticación de NuGet v1

Configura 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:
    #azureDevOpsServiceConnection: # string. Alias: workloadIdentityServiceConnection. Optional. Use when nuGetServiceConnections == ''. 'Azure DevOps' Service Connection. 
    #feedUrl: # string. Optional. Use when workloadIdentityServiceConnection != ''. Azure Artifacts URL. 
    #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.

Entradas

azureDevOpsServiceConnection - 'Azure DevOps' Conexión de Servicio
Alias de entrada: workloadIdentityServiceConnection. string. Opcional. Use cuando nuGetServiceConnections == ''.

Si esto está activado, feedUrl es obligatorio. Todas las demás entradas son ignoradas.


Azure Artifacts URL
string. Opcional. Use cuando workloadIdentityServiceConnection != ''.

Si esto está activado, workloadIdentityServiceConnection es obligatorio. Todas las demás entradas son ignoradas. No es compatible con nuGetServiceConnections. La URL del feed debe estar en formato de índice de servicio NuGet: https://pkgs.dev.azure.com/{ORG_NAME}/{PROJECT}/_packaging/{FEED_NAME}/nuget/v3/index.json.


forceReinstallCredentialProvider - Reinstalar el proveedor de credenciales incluso si ya está instalado
boolean. Valor predeterminado: false.

Si el proveedor de credenciales ya está instalado en el perfil de usuario, determina si está sobrescrito con el proveedor de credenciales proporcionado por la tarea. Esto puede actualizar (o potencialmente degradar) el proveedor de credenciales.


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

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


Opciones de control de tareas

Todas las tareas tienen opciones de control además de sus entradas de tarea. Para obtener más información, consulte 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 superior (una versión anterior de esta tarea, NuGetAuthenticateV0, requiere .NET Core 2.1, que ya no es compatible)
  • 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. ¿Qué debo hacer?

Problemas conocidos en NuGet y en el Azure Artifacts Credential Provider pueden causar este tipo de error, y actualizar a la última versión de Nuget puede ayudar.

Un problema conocido en algunas versiones de nuget/dotnet puede provocar este error, especialmente durante restauraciones de gran tamaño en máquinas restringidas de recursos. Este problema se soluciona en NuGet 5.2 y en .NET Core SDK 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 .NET Core Tool Installer puede usarse para instalar una versión más reciente del SDK .NET Core.

También existen problemas conocidos con el Proveedor de Credenciales Azure Artifacts (instalado por esta tarea), incluyendo artefacts-credprovider/#77 y artefacts-credprovider/#108. Si experimenta estos problemas, asegúrese de que tiene el proveedor de credenciales más reciente estableciendo el forceReinstallCredentialProvider de entrada en true 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, activa Plugin Diagnostic Logging y reporta el problema a NuGet y al Proveedor de Credenciales Azure Artifacts.

¿Cómo es esta tarea diferente de las tareas NuGetCommand y DotNetCoreCLI?

Esta tarea configura nuget.exe, dotnet y MSBuild para autenticarse con Azure Artifacts u otros repositorios que requieran 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 de NuGetCommand y DotNetCoreCLI requieren usar la tarea para restaurar o enviar paquetes, ya que la autenticación en Azure Artifacts solo se configura durante la vida útil 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 que utilices una herramienta NuGet para restaurar o enviar paquetes a un código fuente autenticado como Azure Artifacts. No hay ningún otro requisito de ordenación. Por ejemplo, esta tarea puede ejecutarse de forma segura tanto antes como después de una tarea de instalación de NuGet o .NET Core.

¿Cómo se configura un origen de paquete NuGet que usa 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 lugar de:

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

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 usar, no configura las herramientas de NuGet para usar el proxy.

Para ello, puede:

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

    precaución:
    Las variables http_proxy y no_proxy distinguen mayúsculas de minúsculas en sistemas operativos Linux y Mac y deben estar en minúsculas. Intentar usar una variable de 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 el equipo del agente autohospedado y reinicie el agente.

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

    precaución:
    La configuración del 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 puedo depurar si tengo problemas con esta tarea?

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

¿Cómo funciona esta tarea?

Esta tarea instala el Proveedor de Credenciales Azure Artifacts en el directorio de plugins de NuGet si no está ya 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 información.

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. Consulta Package en Azure Pipelines para más detalles.

¿Funcionará este trabajo 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, parecerá que la tarea de autenticación se realiza 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, una canalización que se desencadena desde ese evento se autenticará correctamente.

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

Si va a actualizar de 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 dotnet, NuGetAuthenticateV1 requiere .NET 6 en lugar de .NET Core 2.1, que es necesario en NuGetAuthenticateV0 y ya no es compatible. Para resolver el problema, usa 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 en la organización

Si todas las fuentes de Azure Artifacts que usas están en la misma organización que tu pipeline, puedes 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 entrada nuGetServiceConnections para 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 conexiones de servicio NuGet que se han configurado y autorizado para su uso en la canalización y tienen direcciones URL que coincidan con las de su argumento de línea de comandos o nuget.config.

La URL de código fuente del paquete que apunta a un feed de Azure Artifacts puede o no contener 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 fuentes con ámbito de proyecto.

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

Si usas Azure Artifacts feeds de otra organización o un repositorio de paquetes autenticado de terceros, tendrás que configurar conexiones de servicio NuGet y especificarlas en la entrada nuGetServiceConnections. Los feeds dentro de tu organización Azure Artifacts también serán autenticados 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 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 del argumento de línea de comandos o nuget.config.

La URL de código fuente del paquete que apunta a un feed de Azure Artifacts puede o no contener 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 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
demandas Ninguno
funcionalidades de Esta tarea no satisface ninguna demanda de tareas posteriores en el trabajo.
restricciones de comandos Cualquier
variables settable Cualquier
Versión del agente 2.144.0 o superior
Categoría de tarea Paquete
Requisito Descripción
Tipos de canalización YAML, compilación clásica, versión clásica
Se ejecuta en Agente, DeploymentGroup
demandas Ninguno
funcionalidades de Esta tarea no satisface ninguna demanda de tareas posteriores en el trabajo.
restricciones de comandos Cualquier
variables settable Cualquier
Versión del agente 2.120.0 o superior
Categoría de tarea Paquete