Dela via


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

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

Med Azure Pipelines kan du använda antingen klassiska pipelines eller YAML-pipelines för att publicera dina NuGet-paket till ditt Azure Artifacts-flöde, externa feeds eller offentliga register, till exempel nuget.org. I den här artikeln får du lära dig att:

  • Generera ett NuGet-paket i Azure Pipelines
  • Publicera paket till interna och externa feeds
  • Publicera paket till NuGet.org

Förutsättningar

Skapa ett NuGet-paket

Det finns flera sätt att skapa dina NuGet-paket, till exempel att använda dotnet eller nuget.exe CLI för att packa dina paket. Om du redan använder MSBuild eller andra uppgifter för att skapa dina paket kan du hoppa över det här avsnittet och gå vidare till nästa.

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

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: det mönster som aktiviteten använder för att söka efter csproj-kataloger att paketera.
  • packDestination: katalog där paket skapas. Om det är tomt skapas paket i källroten.

Paketversionshantering

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

Korrigeringsnumret ö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 däremot huvudversionen och återställer både delversionernaoch korrigeringsversionerna till 0.

Semantisk versionshantering stöder också användning av förhandsversionsetiketter för att tagga paket. Lägg bara till ett bindestreck följt av taggen prerelease, till exempel: 1.0.0-beta.

Azure Pipelines stöder semantisk versionshantering och erbjuder följande konfigurationsalternativ för NuGet-uppgifter:

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

  • Använda en miljövariabel (klassisk) | byEnvVar (YAML): Paketversionen är inställd på värdet för den angivna miljövariabeln.

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

Nedan visas ett exempel som visar hur du använder versionshantering för datum och tid för att generera ett SemVer-kompatibelt paket formaterat 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 paket till interna feeds

Kommentar

Om du vill publicera dina paket i ett flöde med Hjälp av Azure Pipelines kontrollerar du att både Project Collection Build Service och projektets Build Service-identiteter har tilldelats rollen Feed Publisher (deltagare) som tilldelats i feedinställningarna. Mer information finns i Hantera behörigheter .

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

Publicera paket till externa feeds

Om du vill publicera dina paket till externa NuGet-feeds eller offentliga register, till exempel feeds i andra Azure DevOps-organisationer eller nuget.org, måste du först skapa en tjänstanslutning för att autentisera med respektive tjänst:

  1. Från ditt Azure DevOps-projekt navigerar du till Project Settings>Service-anslutningar>

  2. Välj Ny tjänstanslutning>NuGet>Nästa.

  3. Fyll i de obligatoriska fälten och välj sedan Spara när du är klar. Mer information finns i Hantera tjänstanslutningar .

Kommentar

Uppgiften NuGetAuthenticate@1 stöder tjänstanslutningar med grundläggande autentisering men stöder inte Apikey-autentisering. Om du vill använda ApiKey-autentisering måste du använda uppgiften NuGetCommand@2 i stället.

Om du vill publicera dina NuGet-paket i en feed i en annan organisation lägger du till följande kodfragment i YAML-pipelinen:

  • Använda kommandoradsaktiviteten och 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 och 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 valfri sträng när du publicerar till en Azure Artifacts-feed.

Publicera till NuGet.org

  1. Logga in på ditt nuget.org-konto och 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 och använd följande URL för feed-URL :en: 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. Observera att du behöver rollen Administratör för tjänstanslutning för att välja det här alternativet.

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