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żesz użyć potoków klasycznych lub YAML do publikowania pakietów NuGet w kanale informacyjnym usługi Azure Artifacts, zewnętrznych źródłach danych lub publicznych rejestrach, takich jak nuget.org. Z tego artykułu dowiesz się, jak wykonywać następujące działania:

  • Generowanie pakietu NuGet w usłudze Azure Pipelines
  • Publikowanie pakietów w wewnętrznych i zewnętrznych źródłach danych
  • Publikowanie pakietów w NuGet.org

Wymagania wstępne

Tworzenie pakietu NuGet

Istnieje kilka sposobów tworzenia pakietów NuGet, takich jak użycie interfejsu wiersza polecenia dotnet lub nuget.exe do spakowania pakietów. Jeśli używasz już programu MSBuild lub innych zadań do tworzenia pakietów, możesz pominąć tę sekcję i przejść do następnej.

Aby utworzyć pakiet NuGet, dodaj następujący fragment kodu do pliku YAML. Aby uzyskać więcej szczegółów, zobacz Zadanie NuGet.

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: wzorzec używany przez zadanie do wyszukiwania katalogów csproj do spakowania.
  • packDestination: katalog, w którym są tworzone pakiety. Jeśli jest pusty, pakiety zostaną utworzone w katalogu głównym źródła.

Przechowywanie wersji pakietów

Pakiety NuGet są definiowane przez ich nazwy i numery wersji. Korzystanie z semantycznego przechowywania wersji jest zalecanym podejściem do efektywnego zarządzania wersjami pakietów. Wersje semantyczne składają się z trzech składników liczbowych: głównych, pomocniczych i poprawek.

Numer poprawki jest zwiększany po naprawieniu usterki. Podczas wydawania nowej funkcji zgodnej z poprzednimi wersjami zwiększasz wersję pomocniczą i resetujesz wersję poprawki do 0. Z drugiej strony, podczas wprowadzania zmiany niezgodnej z poprzednimi wersjami, zwiększasz wersję główną i resetujesz wersje pomocnicze i poprawkowe do 0.

Semantyczne przechowywanie wersji obsługuje również używanie etykiet wstępnych do tagowania pakietów. Wystarczy dołączyć łącznik, po którym następuje tag wersji wstępnej, na przykład: 1.0.0-beta.

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

  • Używanie daty i godziny (wersja klasyczna) | byPrereleaseNumber (YAML): Wersja pakietu jest 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żywania wersji daty i godziny do generowania pakietu zgodnego ze standardem SemVer sformatowanego jako: 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)'

Publikowanie pakietów w wewnętrznych kanałów informacyjnych

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 .

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

Publikowanie pakietów w zewnętrznych źródłach danych

Aby opublikować pakiety w zewnętrznych źródłach danych NuGet lub publicznych rejestrach, takich jak kanały informacyjne w innych organizacjach usługi Azure DevOps lub nuget.org, należy najpierw utworzyć połączenie usługi w celu uwierzytelnienia się w odpowiedniej usłudze:

  1. W projekcie usługi Azure DevOps przejdź do pozycji Połączenia usługi Ustawienia>projektu>

  2. Wybierz pozycję Nowe połączenie>usługi NuGet>Dalej.

  3. Wypełnij wymagane pola, a następnie wybierz pozycję Zapisz po zakończeniu. Aby uzyskać więcej informacji, zobacz Zarządzanie połączeniami usług.

Uwaga

Zadanie NuGetAuthenticate@1 obsługuje połączenia usługi z uwierzytelnianiem podstawowym, ale nie obsługuje uwierzytelniania apikey. Aby użyć uwierzytelniania ApiKey, należy zamiast tego użyć zadania NuGetCommand@2.

Aby opublikować pakiety NuGet w kanale informacyjnym w innej organizacji, dodaj następujący fragment kodu do potoku YAML:

  • Za pomocą zadania wiersza polecenia i 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"          
    
  • Za pomocą zadania wiersza polecenia i 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"          
      ```
    
    

Uwaga

Parametr ApiKey jest wymagany, ale podczas publikowania w kanale informacyjnym usługi Azure Artifacts można użyć dowolnego ciągu.

Publikowanie w witrynie NuGet.org

  1. Zaloguj się do konta nuget.org i wygeneruj klucz interfejsu API.

  2. Przejdź do projektu usługi Azure DevOps, a następnie wybierz pozycję ikona koła zębategoUstawienia projektu.

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

  4. Wybierz pozycję NuGet, a następnie wybierz pozycję Dalej.

  5. Wybierz pozycję ApiKey jako metodę uwierzytelniania i użyj następującego adresu URL adresu URL kanału informacyjnego: https://api.nuget.org/v3/index.json.

  6. Wprowadź wygenerowany wcześniej klucz ApiKey, a następnie podaj nazwę połączenia z usługą.

  7. Wybierz pozycję Udziel uprawnień dostępu do wszystkich potoków, a następnie wybierz pozycję Zapisz po zakończeniu. Pamiętaj, że aby wybrać tę opcję, musisz mieć rolę Administracja istratora połączenia z usługą.

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