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

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.

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Pipelines und dann Ihre Pipelinedefinition aus.

  3. 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
  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Pipelines und dann Ihre Pipelinedefinition aus.

  3. 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.

  1. Melden Sie sich bei der Azure DevOps-Organisation an, in der Ihre Pipeline ausgeführt wird, und navigieren Sie dann zu Ihrem Projekt.

  2. Navigieren Sie zu den Project-Einstellungen>Dienstverbindungen.

  3. Wählen Sie Neue Dienstverbindung und anschließend NuGet, dann Weiter aus.

  4. 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.

  5. Wählen Sie Speichern aus, wenn Sie fertig sind.

    Screenshot, der zeigt, wie eine NuGet-Dienstverbindung für die Authentifizierung mit einem externen Feed in einer anderen Organisation eingerichtet wird.

  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Pipelines und dann Ihre Pipelinedefinition aus.

  3. 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       
    
  1. Melden Sie sich bei Ihrer Azure DevOps-Organisation an, und navigieren Sie dann zu Ihrem Projekt.

  2. Wählen Sie Pipelines und dann Ihre Pipelinedefinition aus.

  3. 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          
    

Screenshot, der das Paket erfolgreich in einem Feed in einer anderen Organisation veröffentlicht hat.

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 Eigenschaft name: 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)'