Delen via


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

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

Met Azure Pipelines kunt u klassieke of YAML-pijplijnen gebruiken om uw NuGet-pakketten te publiceren naar uw Azure Artifacts-feed, externe feeds of openbare registers, zoals nuget.org. In dit artikel leert u het volgende:

  • Een NuGet-pakket genereren in Azure Pipelines
  • Pakketten publiceren naar interne en externe feeds
  • Pakketten publiceren naar NuGet.org

Vereisten

Een NuGet-pakket maken

Er zijn verschillende manieren om uw NuGet-pakketten te maken, zoals het dotnet of nuget.exe CLI om uw pakketten in te pakken. Als u al MSBuild of andere taken gebruikt om uw pakketten te maken, kunt u deze sectie overslaan en doorgaan naar de volgende.

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

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: het patroon dat de taak gebruikt om te zoeken naar csproj-mappen die moeten worden verpakt.
  • packDestination: map waarin pakketten worden gemaakt. Als deze leeg zijn, worden pakketten gemaakt in de bronhoofdmap.

Pakketversiebeheer

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

Het patchnummer wordt verhoogd na het oplossen van een fout. Bij het vrijgeven van een nieuwe functie die compatibel is met eerdere versies, kunt u de secundaire versie verhogen en de patchversie opnieuw instellen op 0. Als u daarentegen een achterwaartse incompatibele wijziging aanbrengt, kunt u de primaire versie verhogen en zowel de secundaireals de patchversie opnieuw instellen op 0.

Semantic Versioning ondersteunt ook het gebruik van labels voor prerelease om pakketten te taggen. Voeg gewoon een afbreekstreepje toe, gevolgd door uw prerelease-tag, bijvoorbeeld: 1.0.0-beta.

Azure Pipelines ondersteunt Semantic Versioning en biedt de volgende configuratieopties voor NuGet-taken:

  • De datum en tijd gebruiken (klassiek) | byPrereleaseNumber (YAML): uw pakketversie volgt de indeling: Major.Minor.Patch-ci-datetime waar u de flexibiliteit hebt om de waarden Major, Minor en Patch aan te passen.

  • Een omgevingsvariabele gebruiken (klassiek) | byEnvVar (YAML): uw pakketversie is ingesteld op de waarde van de opgegeven omgevingsvariabele.

  • Het buildnummer gebruiken (klassiek) | byBuildNumber (YAML): uw pakketversie is ingesteld op het buildnummer. Zorg ervoor dat u de indeling van het buildnummer in de pijplijnopties definieert als $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r). Als u de indeling in YAML wilt opgeven, voegt u een name: eigenschap toe aan de hoofdmap van uw pijplijn en definieert u de indeling.

Hieronder ziet u een voorbeeld waarin wordt gedemonstreerd hoe u versiebeheer voor datum en tijd gebruikt om een SemVer-compatibel pakket te genereren dat 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)'

Pakketten publiceren naar interne feeds

Notitie

Als u uw pakketten wilt publiceren naar een feed met behulp van Azure Pipelines, moet u ervoor zorgen dat zowel de buildservice voor projectverzamelingen als de buildservice-identiteiten van uw project de rol FeedUitgever (Inzender) krijgen toegewezen in uw feedinstellingen. Zie Machtigingen beheren voor meer informatie.

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

Pakketten publiceren naar externe feeds

Als u uw pakketten wilt publiceren naar externe NuGet-feeds of openbare registers, zoals feeds in andere Azure DevOps-organisaties of nuget.org, moet u eerst een serviceverbinding maken om te verifiëren met de respectieve service:

  1. Navigeer vanuit uw Azure DevOps-project naar Project settings>Service-verbindingen>

  2. Selecteer NuGet>Next voor nieuwe serviceverbinding.>

  3. Vul de vereiste velden in en selecteer Opslaan wanneer u klaar bent. Zie Serviceverbindingen beheren voor meer informatie.

Notitie

De NuGetAuthenticate@1 taak ondersteunt serviceverbindingen met basisverificatie, maar biedt geen ondersteuning voor Apikey-verificatie. Als u ApiKey-verificatie wilt gebruiken, moet u in plaats daarvan de NuGetCommand@2 taak gebruiken.

Als u uw NuGet-pakketten wilt publiceren naar een feed in een andere organisatie, voegt u het volgende codefragment toe aan uw YAML-pijplijn:

  • Gebruik de opdrachtregeltaak en 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"          
    
  • Gebruik de opdrachtregeltaak en het 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 tekenreeks gebruiken bij het publiceren naar een Azure Artifacts-feed.

Publiceren naar NuGet.org

  1. Meld u aan bij uw nuget.org-account en 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 en 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 geef vervolgens een serviceverbindingsnaam op.

  7. Selecteer Toegang verlenen aan alle pijplijnen en selecteer Opslaan wanneer u klaar bent. Houd er rekening mee dat u de serviceverbindingsrol Beheer istrator nodig hebt om deze optie te selecteren.

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