NuGet-pakketten publiceren met Azure Pipelines (YAML/Klassiek)

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

In Azure Pipelines kunt u de klassieke editor of de YAML-taken gebruiken om uw NuGet-pakketten in uw pijplijn te publiceren, naar uw Azure Artifacts-feed of naar openbare registers zoals nuget.org.

Een NuGet-pakket maken

Er zijn verschillende manieren om uw NuGet-pakketten te maken, zoals het gebruik van Visual Studio om uw NuGet-pakketten in te pakken. Als u al MSBuild of een andere taak gebruikt om uw pakketten te maken, slaat u deze sectie over en gaat u naar de sectie NuGet-pakketten publiceren.

Als u een NuGet-pakket wilt maken, voegt u het volgende codefragment toe aan uw YAML-pijplijnbestand. Zie NuGet-taak voor meer informatie.

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: patroon om te zoeken naar csproj-mappen die moeten worden verpakt
  • packDestination: map waarin pakketten worden gemaakt

Pakketversiebeheer

NuGet-pakketten onderscheiden zich door hun namen en versienummers. Het gebruik van Semantic Versioning is een aanbevolen strategie voor het effectief beheren van pakketversies. Semantische versies bestaan uit drie numerieke onderdelen: Primaire, Secundaire en Patch.

De patch wordt verhoogd na het oplossen van een fout. Wanneer u een nieuwe functie die compatibel is met eerdere versies uitbrengt, gaat u de secundaire versie verhogen en de patchversie opnieuw instellen op 0. Wanneer u een incompatibele wijziging met eerdere versies aanbrengt, kunt u de primaire versie verhogen en de secundaire en patchversies opnieuw instellen op 0.

Met Semantic Versioning kunt u ook prereleaselabels gebruiken om uw pakketten te taggen. Voer hiervoor een afbreekstreepje in, gevolgd door uw prerelease-tag: bijvoorbeeld 1.0.0-beta. Semantic Versioning wordt ondersteund in Azure Pipelines en kan als volgt worden geconfigureerd in uw NuGet-taak:

  • Gebruik de datum en tijd (klassiek): byPrereleaseNumber (YAML). Uw pakketversie heeft de indeling Major.Minor.Patch-ci-datetime, waar u de flexibiliteit hebt om de waarden van uw primaire, secundaire en patch te kiezen.

  • Gebruik een omgevingsvariabele (klassiek): byEnvVar (YAML). Uw pakketversie is ingesteld op de waarde van de omgevingsvariabele die u opgeeft.

  • Gebruik het buildnummer (klassiek): byBuildNumber (YAML). Uw pakketversie is ingesteld op het buildnummer. Zorg ervoor dat u de buildnummernotatie onder de pijplijnopties instelt op $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r). Als u de indeling in YAML wilt instellen, voegt u een eigenschap name: toe aan de hoofdmap van uw pijplijn en voegt u de indeling toe.

In het volgende voorbeeld ziet u hoe u de optie voor versiebeheer voor datum en tijd gebruikt om een compatibele SemVer-versie te genereren die is opgemaakt als: 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)'

Notitie

DotNetCore en DotNetStandard pakketten moeten worden verpakt met de DotNetCoreCLI@2 taak om System.InvalidCastExceptions te voorkomen. Zie .NET Core CLI-taak voor meer informatie.

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

NuGet-pakketten publiceren

Als u pakketten vanuit uw pijplijn wilt publiceren naar een Azure Artifacts-feed, moet de pijplijnidentiteit de rol FeedUitgever (Inzender) hebben voor de feed. Zie Machtigingen voor pijplijnen voor meer informatie.

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

Als u een pakket wilt publiceren naar een externe NuGet-feed, moet u eerst een serviceverbinding maken om verbinding te maken met die feed. Een serviceverbinding maken:

  1. Ga naar Project settings>Service connections New service connections.>
  2. Selecteer NuGet en selecteer vervolgens Volgende.
  3. Vul het formulier in en selecteer Opslaan wanneer u klaar bent.

Zie Serviceverbindingen beheren voor meer informatie.

Notitie

De NuGetAuthenticate@1-taak ondersteunt een serviceverbinding met behulp van basisverificatie. De taak biedt geen ondersteuning voor Verificatie van NuGet-API-sleutels. Als uw serviceverbinding ApiKey gebruikt, moet u de NuGetCommand@2 taak gebruiken en de NuGet-API-sleutel opgeven in het argumentveld. Zie NuGet-taak voor meer informatie.

Als u een pakket wilt publiceren naar een externe NuGet-feed, voegt u het volgende codefragment toe aan uw YAML-pijplijn.

De opdrachtregeltaak gebruiken (met 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"          

De opdrachtregeltaak gebruiken (met 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"          

Notitie

Dit ApiKey is vereist, maar u kunt elke willekeurige waarde gebruiken bij het pushen naar Azure Artifacts-feeds.

Publiceren naar NuGet.org

  1. Genereer een API-sleutel.

  2. Navigeer naar uw Azure DevOps-project en selecteer tandwielpictogramvervolgens Project-instellingen.

  3. Selecteer Service Verbinding maken ions en selecteer vervolgens Nieuwe serviceverbinding.

  4. Selecteer NuGet en selecteer vervolgens Volgende.

  5. Selecteer ApiKey als verificatiemethode. Gebruik de volgende URL voor uw feed-URL: https://api.nuget.org/v3/index.json.

  6. Voer de ApiKey in die u eerder hebt gegenereerd en voer vervolgens een serviceverbindingsnaam in.

  7. Selecteer Toegang verlenen aan alle pijplijnen en selecteer Opslaan wanneer u klaar bent. Als u deze optie wilt selecteren, hebt u de serviceverbinding nodig Beheer istratorrol.

Voeg het volgende YAML-fragment toe aan uw pijplijndefinitie:

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