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

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

W usłudze Azure Pipelines możesz użyć klasycznego edytora lub zadań YAML do publikowania pakietów NuGet w potoku, źródła danych usługi Azure Artifacts lub publicznych rejestrów, takich jak nuget.org.

Tworzenie pakietu NuGet

Istnieją różne sposoby tworzenia pakietów NuGet, takich jak używanie programu Visual Studio do pakowania pakietów NuGet. Jeśli używasz już programu MSBuild lub innego zadania do tworzenia pakietów, pomiń tę sekcję i przejdź do sekcji Publikowanie pakietów NuGet.

Aby utworzyć pakiet NuGet, dodaj następujący fragment kodu do pliku YAML potoku. Aby uzyskać więcej informacji, zobacz Zadanie NuGet.

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: wzorzec do wyszukiwania katalogów csproj do spakowania
  • packDestination: katalog, w którym tworzone są pakiety

Przechowywanie wersji pakietów

Pakiety NuGet są rozróżniane przez ich nazwy i numery wersji. Zastosowanie semantycznego przechowywania wersji jest zalecaną strategią efektywnego zarządzania wersjami pakietów. Wersje semantyczne składają się z trzech składników liczbowych: głównych, pomocniczych i poprawek.

Poprawka jest zwiększana po naprawieniu usterki. Po wydaniu nowej funkcji zgodnej z poprzednimi wersjami zwiększasz wersję pomocniczą i resetujesz wersję poprawki do 0. W przypadku wprowadzenia zmiany niezgodnej z poprzednimi wersjami zwiększasz wersję główną i resetujesz wersje pomocnicze i poprawkowe do 0.

Korzystając z semantycznego przechowywania wersji, można również użyć etykiet wstępnych do tagowania pakietów. W tym celu wprowadź łącznik, a następnie tag wersji wstępnej: np. 1.0.0-beta. Semantyczne przechowywanie wersji jest obsługiwane w usłudze Azure Pipelines i można je skonfigurować w zadaniu NuGet w następujący sposób:

  • Użyj daty i godziny (klasycznej): byPrereleaseNumber (YAML). Wersja pakietu jest w formacie Major.Minor.Patch-ci-datetime, w którym masz elastyczność wybierania wartości głównych, pomocniczych i poprawek.

  • Użyj 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 w obszarze Opcje potoku ustawiono format numeru kompilacji na $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r). Aby ustawić format w języku YAML, dodaj właściwość name: w katalogu głównym potoku i dodaj format.

W poniższym przykładzie pokazano, jak użyć opcji przechowywania wersji daty i godziny w celu wygenerowania zgodnej wersji SemVer sformatowanej 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 NuGet

Aby publikować pakiety w kanale informacyjnym usługi Azure Artifacts z potoku, tożsamość potoku musi mieć rolę Wydawca źródła danych (współautor). Aby uzyskać więcej informacji, zobacz Uprawnienia potoków.

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

Aby opublikować pakiet w zewnętrznym kanale informacyjnym NuGet, musisz najpierw utworzyć połączenie usługi, aby nawiązać połączenie z tym źródłem danych. Aby utworzyć połączenie z usługą:

  1. Przejdź do pozycji Project settings (Ustawienia>projektu) Połączenia>usługi Nowe połączenie z usługą.
  2. Wybierz pozycję NuGet, a następnie wybierz pozycję Dalej.
  3. Wypełnij formularz, 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łączenie z usługą przy użyciu podstawowego uwierzytelniania. Zadanie nie obsługuje uwierzytelniania klucza interfejsu API NuGet. Jeśli połączenie usługi używa klucza ApiKey, należy użyć zadania NuGetCommand@2 i określić klucz interfejsu API NuGet w polu argumenty . Aby uzyskać więcej informacji, zobacz Zadanie NuGet.

Aby opublikować pakiet w zewnętrznym kanale informacyjnym NuGet, dodaj następujący fragment kodu do potoku YAML.

Za pomocą zadania wiersza polecenia (z 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 (z 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

Jest ApiKey to wymagane, ale podczas wypychania do kanałów informacyjnych usługi Azure Artifacts można użyć dowolnej wartości.

Publikowanie w witrynie NuGet.org

  1. Generowanie klucza 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. Użyj następującego adresu URL kanału informacyjnego: https://api.nuget.org/v3/index.json.

  6. Wprowadź wygenerowany wcześniej klucz ApiKey, a następnie wprowadź 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. Aby wybrać tę opcję, potrzebujesz roli Administracja istrator połączenia z usługą.

Dodaj następujący fragment kodu YAML do definicji potoku:

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