Compartir vía


Publicación de paquetes NuGet con Azure Pipelines (YAML/clásico)

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019

Con Azure Pipelines, puede publicar los paquetes NuGet en las fuentes de Azure Artifacts de su organización, en otras organizaciones y en registros públicos como nuget.org, mediante canalizaciones clásicas o YAML. En este artículo, aprenderá a:

  • Publicación de paquetes en una fuente interna
  • Publicación de paquetes en una fuente de otra organización
  • Control de versiones de paquetes

Requisitos previos

Publicación de paquetes NuGet en una fuente de la misma organización

Nota:

Para publicar los paquetes en una fuente mediante Azure Pipelines, asegúrese de que tanto el Servicio de compilación de colecciones de proyectos como las identidades de Servicio de compilación del proyecto tengan el rol de Publicador de fuentes (colaborador) asignado en la configuración de la fuente. Consulte Administración de permisos para obtener más información.

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Pipelines y elija la definición correspondiente.

  3. Seleccione Editar y agregue el siguiente fragmento de código a la canalización YAML.

steps:
- task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
  displayName: 'NuGet Tool Installer'

- task: NuGetAuthenticate@0
  displayName: 'NuGet Authenticate'

- script: |
      nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
  displayName: Push
  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Pipelines y elija la definición correspondiente.

  3. Seleccione Editar y agregue el siguiente fragmento de código a la canalización YAML.

steps:
- task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
  displayName: 'NuGet Tool Installer'

- task: NuGetAuthenticate@1
  displayName: 'NuGet Authenticate'

- script: |
      nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
  displayName: Push

Publicación de paquetes NuGet en una fuente de otra organización

Para publicar los paquetes NuGet en una fuente de otra organización de Azure DevOps, primero debe crear un token de acceso personal (PAT) en la organización de destino. Vaya a la organización que hospeda la fuente de destino y Cree un token de acceso personal con el ámbito Empaquetado>Lectura y escritura. Una vez creado el PAT, copie y almacénelo en una ubicación segura, ya que lo necesitará en la sección siguiente para configurar una conexión de servicio.

  1. Inicie sesión en la organización de Azure DevOps donde se ejecutará la canalización y, a continuación, vaya al proyecto.

  2. Vaya a Configuración del proyecto>Conexiones de servicio.

  3. Seleccione Nueva conexión de servicio, NuGet y, a continuación, Siguiente.

  4. Seleccione Servidor externo de Azure DevOps como Método de autenticación y escriba la URL de la fuente de destino. Pegue el token de acceso personal que creó anteriormente, proporcione un nombre para la conexión de servicio y active Conceder permiso de acceso a todas las canalizaciones si es aplicable a su escenario.

  5. Cuando haya terminado, haga clic en Guardar.

    Captura de pantalla que muestra cómo configurar una conexión de servicio NuGet para autenticarse con una fuente externa en otra organización.

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Pipelines y elija la definición correspondiente.

  3. Seleccione Editar y agregue el siguiente fragmento de código a la canalización YAML.

    - task: NuGetToolInstaller@1                                # Minimum required NuGet version: 4.8.0.5385+.
      displayName: 'NuGet Tool Installer'
    
    - task: NuGetAuthenticate@1
      inputs:
        nuGetServiceConnections: <SERVICE_CONNECTION_NAME>
    
    - script: |
          nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
      displayName: Push       
    
  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Seleccione Pipelines y elija la definición correspondiente.

  3. Seleccione Editar y agregue el siguiente fragmento de código a la canalización YAML.

    - task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
      displayName: 'NuGet Tool Installer'
    
    - task: NuGetAuthenticate@0
      inputs:
        nuGetServiceConnections: <SERVICE_CONNECTION_NAME>
    
    - script: |
        nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
      displayName: Push          
    

Captura de pantalla que muestra el paquete publicado correctamente en una fuente de otra organización.

Control de versiones de paquetes de tareas NuGet

Azure Pipelines admite el control de versiones semánticas y ofrece las siguientes opciones de configuración para las tareas de NuGet:

  • Uso de la fecha y hora (clásico) | byPrereleaseNumber (YAML): la versión del paquete seguirá el formato: Major.Minor.Patch-ci-datetime , donde tiene la flexibilidad de personalizar los valores de principal, secundaria y revisión.

  • Uso de una variable de entorno (clásico) | byEnvVar (YAML): la versión del paquete se establece en el valor de la variable de entorno especificada.

  • Uso del número de compilación (clásico) | byBuildNumber (YAML): la versión del paquete se establece en el número de compilación. Asegúrese de definir el formato del número de compilación en las Opciones de canalización como $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r). Para especificar el formato en YAML, agregue una propiedad name: en la raíz de la canalización y defina el formato.

A continuación se muestra un ejemplo que muestra cómo usar el control de versiones de fecha y hora para generar un paquete compatible con SemVer con el formato: Major.Minor.Patch-ci-datetime.

variables:
  Major: '1'
  Minor: '0'
  Patch: '0'

steps:
- task: NuGetCommand@2
  inputs:
    command: pack
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'

Nota:

Los paquetes DotNetCore y DotNetStandard deben empaquetarse con la tarea DotNetCoreCLI@2 para evitar System.InvalidCastExceptions. Consulte la tarea de la CLI de .NET Core para obtener más detalles.

task: DotNetCoreCLI@2
inputs:
    command: pack
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'