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
Creare un'organizzazione Azure DevOps e un progetto, se non è già stato fatto.
Crea un nuovo feed se non ne hai già uno.
Se si usa un agente self-hosted, assicurarsi che sia installato .NET Core SDK (2.1.400+) e NuGet (4.8.0.5385+).
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 .
Accedere all'organizzazione di Azure DevOps e passare al progetto.
Selezionare Pipeline e quindi selezionare la definizione della pipeline.
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
Accedere all'organizzazione di Azure DevOps e passare al progetto.
Selezionare Pipeline e quindi selezionare la definizione della pipeline.
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.
Accedere all'organizzazione di Azure DevOps in cui verrà eseguita la pipeline e quindi passare al progetto.
Passare alle connessioni del servizio impostazioni>progetto.
Selezionare Nuova connessione al servizio, selezionare NuGet e quindi avanti.
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.
Al termine, seleziona Salva.
Accedere all'organizzazione di Azure DevOps e passare al progetto.
Selezionare Pipeline e quindi selezionare la definizione della pipeline.
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
Accedere all'organizzazione di Azure DevOps e passare al progetto.
Selezionare Pipeline e quindi selezionare la definizione della pipeline.
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
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 unaname:
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)'