Publicera NuGet-paket med Azure Pipelines (YAML/klassisk)
Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019
Med Hjälp av Azure Pipelines kan du publicera dina NuGet-paket till Azure Artifacts-feeds i din organisation, i andra organisationer och till offentliga register som nuget.org med hjälp av antingen klassiska pipelines eller YAML-pipelines. I den här artikeln får du lära dig att:
- Publicera paket till en intern feed
- Publicera paket till en feed i en annan organisation
- Paketversionshantering
Förutsättningar
Skapa en Azure DevOps-organisation och ett projekt om du inte redan har gjort det.
Skapa en ny feed om du inte redan har en.
Om du använder en lokalt installerad agent kontrollerar du att .NET Core SDK (2.1.400+) och NuGet (4.8.0.5385+) är installerade.
Publicera NuGet-paket till en feed i samma organisation
Kommentar
Om du vill publicera dina paket i ett flöde med Hjälp av Azure Pipelines kontrollerar du att både Project Collection Build Service och projektets Build Service-identiteter har tilldelats rollen Feed Publisher (deltagare) som tilldelats i feedinställningarna. Mer information finns i Hantera behörigheter .
Logga in på din Azure DevOps-organisation och navigera sedan till projektet.
Välj Pipelines och välj sedan din pipelinedefinition.
Välj Redigera och lägg sedan till följande kodfragment i YAML-pipelinen.
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
Logga in på din Azure DevOps-organisation och navigera sedan till projektet.
Välj Pipelines och välj sedan din pipelinedefinition.
Välj Redigera och lägg sedan till följande kodfragment i YAML-pipelinen.
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
Publicera NuGet-paket till en feed i en annan organisation
Om du vill publicera dina NuGet-paket till en feed i en annan Azure DevOps-organisation måste du först skapa en personlig åtkomsttoken (PAT) i målorganisationen. Navigera till den organisation som är värd för målflödet och Skapa en personlig åtkomsttoken med omfånget Paketeringsläsning>och skrivning. När PAT har skapats kopierar och lagrar du den på en säker plats, eftersom du behöver den i följande avsnitt för att konfigurera en tjänstanslutning.
Logga in på Den Azure DevOps-organisation där din pipeline ska köras och navigera sedan till projektet.
Gå till dina Project-inställningar>Tjänstanslutningar.
Välj Ny tjänstanslutning, välj NuGet och välj sedan Nästa.
Välj Extern Azure DevOps Server som autentiseringsmetod och ange sedan målflödes-URL :en. Klistra in den personliga åtkomsttoken som du skapade tidigare, ange ett namn för tjänstanslutningen och kontrollera Bevilja åtkomstbehörighet till alla pipelines om det är tillämpligt för ditt scenario.
Välj Spara när du är klar.
Logga in på din Azure DevOps-organisation och navigera sedan till projektet.
Välj Pipelines och välj sedan din pipelinedefinition.
Välj Redigera och lägg sedan till följande kodfragment i YAML-pipelinen.
- 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
Logga in på din Azure DevOps-organisation och navigera sedan till projektet.
Välj Pipelines och välj sedan din pipelinedefinition.
Välj Redigera och lägg sedan till följande kodfragment i YAML-pipelinen.
- 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
Versionshantering av NuGet-aktivitetspaket
Azure Pipelines stöder semantisk versionshantering och tillhandahåller följande konfigurationsalternativ för NuGet-uppgifter:
Använd datum och tid (klassisk) | byPrereleaseNumber (YAML): Paketversionen följer formatet: Major.Minor.Patch-ci-datetime där du har flexibiliteten att anpassa värdena Major, Minor och Patch.
Använda en miljövariabel (klassisk) | byEnvVar (YAML): Paketversionen är inställd på värdet för den angivna miljövariabeln.
Använd versionsnumret (klassisk) | byBuildNumber (YAML): Paketversionen är inställd på versionsnumret. Se till att du definierar versionsnummerformatet i pipelinealternativen som
$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
. Om du vill ange formatet i YAML lägger du till enname:
egenskap i roten av pipelinen och definierar formatet.
Följande är ett exempel som visar hur du använder versionshantering för datum och tid för att generera ett SemVer-kompatibelt paket formaterat som: 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)'
Kommentar
DotNetCore
och DotNetStandard
paket bör paketeras med uppgiften DotNetCoreCLI@2
för att undvika System.InvalidCastExceptions. Mer information finns i .NET Core CLI-uppgiften .
task: DotNetCoreCLI@2
inputs:
command: pack
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'