Publicera NuGet-paket med Azure Pipelines (YAML/klassisk)

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

I Azure Pipelines kan du använda den klassiska redigeraren eller YAML-uppgifterna för att publicera dina NuGet-paket i din pipeline, till ditt Azure Artifacts-flöde eller till offentliga register som nuget.org.

Skapa ett NuGet-paket

Det finns olika sätt att skapa dina NuGet-paket, till exempel att använda Visual Studio för att packa dina NuGet-paket. Om du redan använder MSBuild eller någon annan uppgift för att skapa dina paket hoppar du över det här avsnittet och går vidare till avsnittet Publicera NuGet-paket .

Om du vill skapa ett NuGet-paket lägger du till följande kodfragment i din YAML-pipelinefil. Mer information finns i NuGet-uppgift.

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: mönster för att söka efter csproj-kataloger att packa
  • packDestination: katalog där paket skapas

Paketversionshantering

NuGet-paket särskiljs av deras namn och versionsnummer. Att använda semantisk versionshantering är en rekommenderad strategi för att effektivt hantera paketversioner. Semantiska versioner består av tre numeriska komponenter: Major, Minor och Patch.

Korrigeringen ökas efter att en bugg har åtgärdats. När du släpper en ny bakåtkompatibel funktion ökar du delversionen och återställer korrigeringsversionen till 0. När du gör en bakåtkompatibel ändring ökar du huvudversionen och återställer delversionerna och korrigeringsversionerna till 0.

Med semantisk versionshantering kan du också använda förhandsversionsetiketter för att tagga dina paket. Om du vill göra det anger du ett bindestreck följt av taggen prerelease: T.ex. 1.0.0-beta. Semantisk versionshantering stöds i Azure Pipelines och kan konfigureras i din NuGet-uppgift på följande sätt:

  • Använd datum och tid (klassisk): byPrereleaseNumber (YAML). Paketversionen är i formatet: Major.Minor.Patch-ci-datetime där du har flexibiliteten att välja värdena för huvud-, del- och korrigeringsfilen.

  • Använd en miljövariabel (klassisk): byEnvVar (YAML). Paketversionen är inställd på värdet för den miljövariabel som du anger.

  • Använd versionsnumret (klassisk): byBuildNumber (YAML). Paketversionen är inställd på versionsnumret. Se till att du anger versionsnummerformatet under pipelinealternativen till $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r). Om du vill ange formatet i YAML lägger du till en egenskap name: i roten av pipelinen och lägger till formatet.

I följande exempel visas hur du använder versionsalternativet datum och tid för att generera en SemVer-kompatibel version formaterad 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-uppgift.

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

Publicera NuGet-paket

Om du vill publicera paket till en Azure Artifacts-feed från din pipeline måste pipelineidentiteten ha rollen Feed Publisher (deltagare) i flödet. Mer information finns i Pipelines-behörigheter.

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

Om du vill publicera ett paket till en extern NuGet-feed måste du först skapa en tjänstanslutning för att ansluta till feeden. Så här skapar du en tjänstanslutning:

  1. Gå till Projektinställningar>Tjänstanslutningar>Ny tjänstanslutning.
  2. Välj NuGet och välj sedan Nästa.
  3. Fyll i formuläret och välj sedan Spara när du är klar.

Mer information finns i Hantera tjänstanslutningar.

Kommentar

Uppgiften NuGetAuthenticate@1 stöder en tjänstanslutning med grundläggande autentisering. Uppgiften stöder inte NuGet API-nyckelautentisering. Om din tjänstanslutning använder ApiKey måste du använda uppgiften NuGetCommand@2 och ange NuGet API-nyckeln i fältet argument . Mer information finns i NuGet-uppgift.

Om du vill publicera ett paket i en extern NuGet-feed lägger du till följande kodfragment i YAML-pipelinen.

Använda kommandoradsaktiviteten (med NuGet.exe):

  - 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"          

Använda kommandoradsaktiviteten (med dotnet):

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

  - script: |
      dotnet build <CSPROJ_PATH> --configuration <CONFIGURATION>
      dotnet pack <CSPROJ_PATH> -p:PackageVersion=<YOUR_PACKAGE_VERSION> --output <OUTPUT_DIRECTORY> --configuration <CONFIGURATION>
      dotnet nuget push <PACKAGE_PATH> --source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --api-key <ANY_STRING>
    displayName: "Build, pack and push"          

Kommentar

ApiKey Krävs, men du kan använda valfritt godtyckligt värde vid push-överföring till Azure Artifacts-feeds.

Publicera till NuGet.org

  1. Generera en API-nyckel.

  2. Gå till ditt Azure DevOps-projekt och välj kugghjulsikonsedan Projektinställningar.

  3. Välj Tjänst Anslut ions och välj sedan Ny tjänstanslutning.

  4. Välj NuGet och välj sedan Nästa.

  5. Välj ApiKey som autentiseringsmetod. Använd följande URL för din feed-URL: https://api.nuget.org/v3/index.json.

  6. Ange den ApiKey som du genererade tidigare och ange sedan ett tjänstanslutningsnamn.

  7. Välj Bevilja åtkomstbehörighet till alla pipelines och välj sedan Spara när du är klar. Om du vill välja det här alternativet behöver du rollen Administratör för tjänstanslutning.

Lägg till följande YAML-kodfragment i pipelinedefinitionen:

steps:
- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    nuGetFeedType: external
    publishFeedCredentials: nuget.org