Udostępnij za pośrednictwem


Publikowanie pakietów NuGet za pomocą usługi Azure Pipelines (YAML/Classic)

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Za pomocą usługi Azure Pipelines można publikować pakiety NuGet w źródłach danych usługi Azure Artifacts w organizacji, w innych organizacjach oraz do publicznych rejestrów, takich jak nuget.org, przy użyciu potoków klasycznych lub YAML. Ten artykuł obejmuje następujące zagadnienia:

  • Publikowanie pakietów w wewnętrznym kanale informacyjnym
  • Publikowanie pakietów w kanale informacyjnym w innej organizacji
  • Przechowywanie wersji pakietów

Wymagania wstępne

Publikowanie pakietów NuGet w kanale informacyjnym w tej samej organizacji

Uwaga

Aby opublikować pakiety w kanale informacyjnym przy użyciu usługi Azure Pipelines, upewnij się, że zarówno usługa Project Collection Build Service, jak i tożsamości usługi kompilacji projektu mają przypisaną rolę Wydawca źródła danych (współautor) przypisaną w ustawieniach kanału informacyjnego. Aby uzyskać więcej informacji, zobacz Zarządzanie uprawnieniami .

  1. Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.

  2. Wybierz pozycję Potoki, a następnie wybierz definicję potoku.

  3. Wybierz pozycję Edytuj, a następnie dodaj następujący fragment kodu do potoku YAML.

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. Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.

  2. Wybierz pozycję Potoki, a następnie wybierz definicję potoku.

  3. Wybierz pozycję Edytuj, a następnie dodaj następujący fragment kodu do potoku YAML.

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

Publikowanie pakietów NuGet w kanale informacyjnym w innej organizacji

Aby opublikować pakiety NuGet w kanale informacyjnym w innej organizacji usługi Azure DevOps, należy najpierw utworzyć osobisty token dostępu (PAT) w organizacji docelowej. Przejdź do organizacji obsługującej docelowy kanał informacyjny i utwórz osobisty token dostępu z zakresem odczytu i zapisu pakietu>. Po utworzeniu tokenu dostępu skopiuj go i zapisz w bezpiecznej lokalizacji, ponieważ będzie potrzebny w poniższej sekcji, aby skonfigurować połączenie z usługą.

  1. Zaloguj się do organizacji usługi Azure DevOps, w której zostanie uruchomiony potok, a następnie przejdź do projektu.

  2. Przejdź do ustawień >projektu Połączenia usługi.

  3. Wybierz pozycję Nowe połączenie z usługą, wybierz pozycję NuGet, a następnie wybierz pozycję Dalej.

  4. Wybierz pozycję Zewnętrzny serwer Usługi Azure DevOps jako metodę uwierzytelniania, a następnie wprowadź docelowy adres URL kanału informacyjnego. Wklej utworzony wcześniej osobisty token dostępu, podaj nazwę połączenia z usługą i zaznacz pole Wyboru Udziel uprawnień dostępu do wszystkich potoków, jeśli ma to zastosowanie do danego scenariusza.

  5. Wybierz Zapisz, gdy skończysz.

    Zrzut ekranu przedstawiający sposób konfigurowania połączenia usługi NuGet w celu uwierzytelniania za pomocą zewnętrznego źródła danych w innej organizacji.

  1. Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.

  2. Wybierz pozycję Potoki, a następnie wybierz definicję potoku.

  3. Wybierz pozycję Edytuj, a następnie dodaj następujący fragment kodu do potoku YAML.

    - 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. Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.

  2. Wybierz pozycję Potoki, a następnie wybierz definicję potoku.

  3. Wybierz pozycję Edytuj, a następnie dodaj następujący fragment kodu do potoku YAML.

    - 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          
    

Zrzut ekranu przedstawiający pomyślnie opublikowany pakiet w kanale informacyjnym w innej organizacji.

Przechowywanie wersji pakietu zadań NuGet

Usługa Azure Pipelines obsługuje przechowywanie wersji semantycznych i udostępnia następujące opcje konfiguracji dla zadań NuGet:

  • Używanie daty i godziny (wersja klasyczna) | byPrereleaseNumber (YAML): Wersja pakietu będzie zgodna z formatem: Major.Minor.Patch-ci-datetime , gdzie masz elastyczność dostosowywania wartości Główne, Pomocnicze i Poprawki.

  • Używanie zmiennej środowiskowej (klasycznej) | byEnvVar (YAML): Wersja pakietu jest ustawiona na wartość określonej zmiennej środowiskowej.

  • Użyj numeru kompilacji (klasycznego) | byBuildNumber (YAML): Wersja pakietu jest ustawiona na numer kompilacji. Upewnij się, że format numeru kompilacji został zdefiniowany w obszarze Opcje potoku jako $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r). Aby określić format w języku YAML, dodaj name: właściwość w katalogu głównym potoku i zdefiniuj format.

Poniżej przedstawiono przykład pokazujący sposób użycia przechowywania wersji daty i godziny w celu wygenerowania pakietu zgodnego ze standardem SemVer w formacie: 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)'

Uwaga

DotNetCore pakiety i DotNetStandard powinny być pakowane z zadaniem, aby uniknąć błędu DotNetCoreCLI@2 System.InvalidCastExceptions. Aby uzyskać więcej informacji, zobacz zadanie interfejsu wiersza polecenia platformy .NET Core.

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