Veröffentlichen von NuGet-Paketen mit Azure Pipelines (YAML/Klassisch)
Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2019
Mit Azure Pipelines können Sie Ihre NuGet-Pakete in Azure Artifacts-Feeds in Ihrer Organisation, in anderen Organisationen und in öffentlichen Registrierungen wie nuget.org veröffentlichen, indem Sie klassische oder YAML-Pipelines verwenden. In diesem Artikel lernen Sie Folgendes:
- Veröffentlichen von Paketen in einem internen Feed
- Veröffentlichen von Paketen in einem Feed in einer anderen Organisation
- Paketversionsverwaltung
Voraussetzungen
Erstellen Sie eine Azure DevOps-Organisation und ein Projekt, falls noch nicht geschehen.
Erstellen Sie einen neuen Feed, wenn Sie noch keinen haben.
Wenn Sie einen selbst gehosteten Agent verwenden, stellen Sie sicher, dass es das .NET Core SDK (2.1.400+) und NuGet (4.8.0.5385+) installiert hat.
Veröffentlichen von NuGet-Paketen in einem Feed in derselben Organisation
Hinweis
Um Ihre Pakete mithilfe von Azure Pipelines in einem Feed zu veröffentlichen, stellen Sie sicher, dass sowohl dem Project Collection Build Service als auch dem Build Service Ihres Projekts die in Ihren Feed-Einstellungen zugewiesene Rolle Feed Publisher (Contributor) zugewiesen ist. Weitere Details finden Sie unter Verwalten von Berechtigungen.
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Pipelines und dann Ihre Pipelinedefinition aus.
Wählen Sie Bearbeiten aus, und fügen Sie dann der YAML-Pipeline den folgenden Codeausschnitt hinzu.
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
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Pipelines und dann Ihre Pipelinedefinition aus.
Wählen Sie Bearbeiten aus, und fügen Sie dann der YAML-Pipeline den folgenden Codeausschnitt hinzu.
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
Veröffentlichen von NuGet-Paketen in einem Feed in einer anderen Organisation
Um Ihre NuGet-Pakete in einem Feed in einer anderen Azure DevOps-Organisation zu veröffentlichen, müssen Sie zuerst ein persönliches Zugriffstoken (Personal Access Token, PAT) in der Zielorganisation erstellen. Navigieren Sie zu der Organisation, die Ihren Zielfeed hosten, und erstellen Sie ein persönliches Zugriffstoken mit dem Bereich Verpacken>Lesen & Schreiben. Nachdem der PAT erstellt wurde, kopieren und speichern Sie ihn an einem sicheren Ort, da Sie ihn im folgenden Abschnitt benötigen, um eine Dienstverbindung einzurichten.
Melden Sie sich bei der Azure DevOps-Organisation an, in der Ihre Pipeline ausgeführt wird, und navigieren Sie dann zu Ihrem Projekt.
Navigieren Sie zu den Project-Einstellungen>Dienstverbindungen.
Wählen Sie Neue Dienstverbindung und anschließend NuGet, dann Weiter aus.
Wählen Sie Externen Azure DevOps-Server als Authentifizierungsmethode aus, und geben Sie dann Ihre Zielfeed-URL ein. Fügen Sie das zuvor erstellte persönliche Zugriffstoken ein, geben Sie einen Namen für Ihre Dienstverbindung ein, und überprüfen Sie , ob für Ihr Szenario zutreffend, Zugriffsberechtigungen für alle Pipelines gewähren.
Wählen Sie Speichern aus, wenn Sie fertig sind.
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Pipelines und dann Ihre Pipelinedefinition aus.
Wählen Sie Bearbeiten aus, und fügen Sie dann der YAML-Pipeline den folgenden Codeausschnitt hinzu.
- 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
Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.
Wählen Sie Pipelines und dann Ihre Pipelinedefinition aus.
Wählen Sie Bearbeiten aus, und fügen Sie dann der YAML-Pipeline den folgenden Codeausschnitt hinzu.
- 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
Versionierung von NuGet-Aufgabenpaketen
Azure Pipelines unterstützt die semantische Versionsverwaltung und bietet die folgenden Konfigurationsoptionen für NuGet-Aufgaben:
Verwenden Sie Datum und Uhrzeit (Classic) | byPrereleaseNumber (YAML): Ihre Paketversion folgt dem Format: Major.Minor.Patch-ci-datetime, wobei Sie die Haupt-, Neben- und Patch-Werte flexibel anpassen können.
Verwenden einer Umgebungsvariable (klassisch) | byEnvVar (YAML): Ihre Paketversion wird auf den Wert der angegebenen Umgebungsvariablen festgelegt.
Verwenden der Buildnummer (Classic) | byBuildNumber (YAML): Ihre Paketversion wird auf die Buildnummer festgelegt. Stellen Sie sicher, dass Sie das Buildnummernformat in Ihrer Pipeline Pipelineoptionen als
$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
definieren. Um das Format in YAML anzugeben, fügen Sie an der Stammadresse Ihrer Pipeline eine Eigenschaftname:
hinzu und definieren Sie Ihr Format.
Nachfolgend ein Beispiel, das zeigt, wie Sie mithilfe der Datums- und Uhrzeitversionierung ein SemVer-kompatibles Paket im Format Major.Minor.Patch-ci-datetime generieren.
variables:
Major: '1'
Minor: '0'
Patch: '0'
steps:
- task: NuGetCommand@2
inputs:
command: pack
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'
Hinweis
DotNetCore
- und DotNetStandard
-Pakete sollten mit der DotNetCoreCLI@2
-Aufgabe verpackt werden, um System.InvalidCastExceptions zu vermeiden. Weitere Informationen finden Sie in der .NET Core-CLI-Aufgabe.
task: DotNetCoreCLI@2
inputs:
command: pack
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'