Condividi tramite


Pubblicare pacchetti NuGet con Azure Pipelines (YAML/versione classica)

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

Usando Azure Pipelines, è possibile pubblicare i pacchetti NuGet nei feed di Azure Artifacts nell'organizzazione, in altre organizzazioni e nei registri pubblici, ad esempio nuget.org, usando pipeline classiche o YAML. In questo articolo si apprenderà come:

  • Pubblicare pacchetti in un feed interno
  • Pubblicare pacchetti in un feed in un'organizzazione diversa
  • Controllo delle versioni dei pacchetti

Prerequisiti

Pubblicare pacchetti NuGet in un feed nella stessa organizzazione

Nota

Per pubblicare i pacchetti in un feed usando Azure Pipelines, assicurarsi che sia il servizio di compilazione della raccolta di progetti che le identità del servizio di compilazione del progetto abbiano il ruolo Autore feed (Collaboratore) assegnato nelle impostazioni del feed. Per altri dettagli, vedere Gestire le autorizzazioni .

  1. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Selezionare Pipeline e quindi selezionare la definizione della pipeline.

  3. Selezionare Modifica e quindi aggiungere il frammento di codice seguente alla pipeline 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. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Selezionare Pipeline e quindi selezionare la definizione della pipeline.

  3. Selezionare Modifica e quindi aggiungere il frammento di codice seguente alla pipeline 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

Pubblicare pacchetti NuGet in un feed in un'altra organizzazione

Per pubblicare i pacchetti NuGet in un feed in un'organizzazione Azure DevOps diversa, è prima necessario creare un token di accesso personale nell'organizzazione di destinazione. Passare all'organizzazione che ospita il feed di destinazione e Creare un token di accesso personale con ambito di lettura e scrittura per la creazione di pacchetti>. Dopo aver creato il pat, copiarlo e archiviarlo in una posizione sicura, perché sarà necessario nella sezione seguente per configurare una connessione al servizio.

  1. Accedere all'organizzazione di Azure DevOps in cui verrà eseguita la pipeline e quindi passare al progetto.

  2. Passare alle connessioni del servizio impostazioni>progetto.

  3. Selezionare Nuova connessione al servizio, selezionare NuGet e quindi avanti.

  4. Selezionare External Azure DevOps Server come metodo di autenticazione e quindi immettere l'URL del feed di destinazione. Incollare il token di accesso personale creato in precedenza, specificare un nome per la connessione al servizio e selezionare Concedi l'autorizzazione di accesso a tutte le pipeline , se applicabile allo scenario.

  5. Al termine, seleziona Salva.

    Screenshot che mostra come configurare una connessione al servizio NuGet per l'autenticazione con un feed esterno in un'organizzazione diversa.

  1. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Selezionare Pipeline e quindi selezionare la definizione della pipeline.

  3. Selezionare Modifica e quindi aggiungere il frammento di codice seguente alla pipeline 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. Accedere all'organizzazione di Azure DevOps e passare al progetto.

  2. Selezionare Pipeline e quindi selezionare la definizione della pipeline.

  3. Selezionare Modifica e quindi aggiungere il frammento di codice seguente alla pipeline 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          
    

Screenshot che mostra il pacchetto pubblicato correttamente in un feed in un'organizzazione diversa.

Controllo delle versioni dei pacchetti di attività NuGet

Azure Pipelines supporta il controllo delle versioni semantiche e offre le opzioni di configurazione seguenti per le attività NuGet:

  • Usare la data e l'ora (versione classica) | byPrereleaseNumber (YAML): la versione del pacchetto seguirà il formato Major.Minor.Patch-ci-datetime in cui è possibile personalizzare i valori Major, Minor e Patch.

  • Usare una variabile di ambiente (classica) | byEnvVar (YAML): la versione del pacchetto è impostata sul valore della variabile di ambiente specificata.

  • Usare il numero di build (versione classica) | byBuildNumber (YAML): la versione del pacchetto è impostata sul numero di build. Assicurarsi di definire il formato del numero di build nelle opzioni della pipeline come $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r). Per specificare il formato in YAML, aggiungere una name: proprietà nella radice della pipeline e definire il formato.

Di seguito è riportato un esempio che illustra come usare il controllo delle versioni di data e ora per generare un pacchetto conforme a SemVer formattato come 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

DotNetCore i pacchetti e DotNetStandard devono essere inseriti in un pacchetto con l'attività DotNetCoreCLI@2 per evitare System.InvalidCastExceptions. Per altri dettagli, vedere l'attività dell'interfaccia della riga di comando di .NET Core.

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