Dela via


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

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

Med Hjälp av Azure Pipelines kan du publicera dina NuGet-paket till Azure Artifacts-feeds i din organisation, i andra organisationer och till offentliga register som nuget.org med hjälp av antingen klassiska pipelines eller YAML-pipelines. I den här artikeln får du lära dig att:

  • Publicera paket till en intern feed
  • Publicera paket till en feed i en annan organisation
  • Paketversionshantering

Förutsättningar

Publicera NuGet-paket till en feed i samma organisation

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 .

  1. Logga in på din Azure DevOps-organisation och navigera sedan till projektet.

  2. Välj Pipelines och välj sedan din pipelinedefinition.

  3. Välj Redigera och lägg sedan till följande kodfragment i YAML-pipelinen.

steps:
- task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
  displayName: 'NuGet Tool Installer'

- task: NuGetAuthenticate@0
  displayName: 'NuGet Authenticate'

- script: |
      nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
  displayName: Push
  1. Logga in på din Azure DevOps-organisation och navigera sedan till projektet.

  2. Välj Pipelines och välj sedan din pipelinedefinition.

  3. Välj Redigera och lägg sedan till följande kodfragment i YAML-pipelinen.

steps:
- task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
  displayName: 'NuGet Tool Installer'

- task: NuGetAuthenticate@1
  displayName: 'NuGet Authenticate'

- script: |
      nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
  displayName: Push

Publicera NuGet-paket till en feed i en annan organisation

Om du vill publicera dina NuGet-paket till en feed i en annan Azure DevOps-organisation måste du först skapa en personlig åtkomsttoken (PAT) i målorganisationen. Navigera till den organisation som är värd för målflödet och Skapa en personlig åtkomsttoken med omfånget Paketeringsläsning>och skrivning. När PAT har skapats kopierar och lagrar du den på en säker plats, eftersom du behöver den i följande avsnitt för att konfigurera en tjänstanslutning.

  1. Logga in på Den Azure DevOps-organisation där din pipeline ska köras och navigera sedan till projektet.

  2. Gå till dina Project-inställningar>Tjänstanslutningar.

  3. Välj Ny tjänstanslutning, välj NuGet och välj sedan Nästa.

  4. Välj Extern Azure DevOps Server som autentiseringsmetod och ange sedan målflödes-URL :en. Klistra in den personliga åtkomsttoken som du skapade tidigare, ange ett namn för tjänstanslutningen och kontrollera Bevilja åtkomstbehörighet till alla pipelines om det är tillämpligt för ditt scenario.

  5. Välj Spara när du är klar.

    En skärmbild som visar hur du konfigurerar en NuGet-tjänstanslutning för att autentisera med ett externt flöde i en annan organisation.

  1. Logga in på din Azure DevOps-organisation och navigera sedan till projektet.

  2. Välj Pipelines och välj sedan din pipelinedefinition.

  3. Välj Redigera och lägg sedan till följande kodfragment i YAML-pipelinen.

    - task: NuGetToolInstaller@1                                # Minimum required NuGet version: 4.8.0.5385+.
      displayName: 'NuGet Tool Installer'
    
    - task: NuGetAuthenticate@1
      inputs:
        nuGetServiceConnections: <SERVICE_CONNECTION_NAME>
    
    - script: |
          nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
      displayName: Push       
    
  1. Logga in på din Azure DevOps-organisation och navigera sedan till projektet.

  2. Välj Pipelines och välj sedan din pipelinedefinition.

  3. Välj Redigera och lägg sedan till följande kodfragment i YAML-pipelinen.

    - task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
      displayName: 'NuGet Tool Installer'
    
    - task: NuGetAuthenticate@0
      inputs:
        nuGetServiceConnections: <SERVICE_CONNECTION_NAME>
    
    - script: |
        nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
      displayName: Push          
    

En skärmbild som visar att paketet har publicerats till en feed i en annan organisation.

Versionshantering av NuGet-aktivitetspaket

Azure Pipelines stöder semantisk versionshantering och tillhandahåller 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.

Följande är 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-uppgiften .

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