Veröffentlichen von NuGet-Paketen mit Azure Pipelines (YAML/Klassisch)

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

In Azure Pipelines können Sie den klassischen Editor oder die YAML-Aufgaben verwenden, um Ihre NuGet Pakete in Ihrer Pipeline, in Ihrem Azure Artifacts Feed oder in öffentlichen Registrierungen wie nuget.org zu veröffentlichen.

Erstellen eines NuGet-Pakets

Es gibt verschiedene Möglichkeiten, ihre NuGet Pakete zu erstellen, z. B. mithilfe von Visual Studio, um Ihre NuGet Pakete zu packen. Wenn Sie bereits MSBuild oder eine andere Aufgabe zum Erstellen Ihrer Pakete verwenden, überspringen Sie diesen Abschnitt, und springen Sie zum Abschnitt "Pakete veröffentlichen".

Um ein NuGet-Paket zu erstellen, fügen Sie der Pipeline-YAML-Datei den folgenden Codeausschnitt hinzu. Weitere Informationen finden Sie unter NuGet Aufgabe.

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: Muster zum Suchen nach csproj-Verzeichnissen zum Packen
  • packDestination: Verzeichnis, in dem Pakete erstellt werden

YAML wird in TFS nicht unterstützt.

Paketversionsverwaltung

NuGet Pakete werden anhand ihrer Namen und Versionsnummern identifiziert. Ein empfohlener Ansatz für die Versionsverwaltung Ihrer Pakete besteht darin, semantische Versionsverwaltung zu verwenden. Semantische Versionen verfügen über drei numerische Komponenten: Major, Minor und Patch.

Der Patch wird normalerweise nach dem Beheben eines Fehlers erhöht (z. B. 1.0.0 ->1.0.1). Wenn Sie ein neues abwärtskompatibles Feature freigeben, erhöhen Sie die Nebenversion, und setzen Sie die Patchversion auf 0 zurück (z. B. 1.4.17 ->1.5.0). Wenn Sie eine abwärtskompatible Änderung vornehmen, erhöhen Sie die Hauptversion, und setzen Sie die Neben- und Patchversionen auf 0 zurück (z. B. 2.6.5 ->3.0.0).

Mit der semantischen Versionsverwaltung können Sie auch Vorabbeschriftungen verwenden, um Ihre Pakete zu kennzeichnen. Wenn Sie Präleasebeschriftungen verwenden möchten, geben Sie einen Bindestrich gefolgt von den buchstaben(n) oder Zahlen ein, die Sie auswählen: Z.B. 1.0.0-Beta.

Die semantische Versionsverwaltung wird in Azure Pipelines unterstützt und kann in Ihrer NuGet Aufgabe konfiguriert werden:

  • Verwenden Sie dasselbe Versionsverwaltungsschema für Ihre Builds und Pakete:

    • $(Major).$(Minor).$(rev:.r), wobei Major zwei Minor Variablen in Ihrer Pipeline definiert sind. Dieses Format erhöht automatisch die Buildnummer und die Paketversion mit einer neuen Patchnummer. Die Haupt- und Nebenversionen werden beibehalten, bis Sie sie manuell ändern.
    • $(Major).$(Minor).$(Patch).$(date:yyyyMMdd), wo Major, Minorund Patch sind Variablen in Ihrer Pipeline definiert. Dieses Format erstellt eine neue Prärelease-Bezeichnung für den Build und das Paket, während die Haupt-, Neben- und Patchversionen konstant bleiben.
  • Verwenden Sie ein benutzerdefiniertes Versionsverwaltungsschema. Sie können die Haupt-, Neben- und Patchversionen für Ihre Pakete anpassen und die NuGet Aufgabe eine eindeutige Prärelease-Bezeichnung basierend auf dem Datum und der Uhrzeit generieren lassen.

  • Verwenden Sie ein Skript in Ihrer Buildpipeline, um die Version zu generieren.

In diesem Beispiel wird gezeigt, wie Sie das Datum und die Uhrzeit als Präreleasebeschriftung verwenden.

variables:
  Major: '1'
  Minor: '0'
  Patch: '0'

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

YAML wird in TFS nicht unterstützt.

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)'

Veröffentlichen eines Pakets

Um Pakete in einem Azure Artifacts Feed aus Ihrer Pipeline zu veröffentlichen, müssen Sie die Identität des Project Sammlungsbuilddiensts als Mitwirkender in Ihrem Feed festlegen. Weitere Details finden Sie unter "Konfigurieren von Feedeinstellungen ".

steps:
- task: NuGetAuthenticate@0
  displayName: 'NuGet Authenticate'
- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    publishVstsFeed: '<projectName>/<feed>'
    allowPackageConflicts: true

Zum Veröffentlichen eines Pakets in einem externen NuGet Feed müssen Sie zuerst eine Dienstverbindung erstellen, um eine Verbindung mit diesem Feed herzustellen. Dazu wechseln Sie zu Project Einstellungen>Dienstverbindungen>Neue Dienstverbindung. Wählen Sie NuGet aus, und wählen Sie dann "Weiter" aus. Füllen Sie das Formular aus, und wählen Sie dann "Speichern" aus, wenn Sie fertig sind. Weitere Informationen finden Sie unter Verwalten von Dienstverbindungen .

Um ein Paket in einem externen NuGet Feed zu veröffentlichen, fügen Sie der YAML-Pipeline den folgenden Codeausschnitt hinzu.

- task: NuGetAuthenticate@0
  inputs:
    nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>
- task: NuGetCommand@2
  inputs:
    command: push
    nuGetFeedType: external
    versioningScheme: byEnvVar
    versionEnvVar: <VERSION_ENVIRONMENT_VARIABLE>

Beispiel für dieBefehlszeilenaufgabe:

  - task: NuGetAuthenticate@1
    inputs:
      nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>

  - script: |
      nuget push <PACKAGE_PATH> -src https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json -ApiKey <ANY_STRING>
    displayName: "Push"          

Hinweis

Dies ApiKey wird nur als Platzhalter verwendet.

YAML wird in TFS nicht unterstützt.