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ą:
- Przejdź do pozycji Project settings (Ustawienia>projektu) Połączenia>usługi Nowe połączenie z usługą.
- Wybierz pozycję NuGet, a następnie wybierz pozycję Dalej.
- 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
Generowanie klucza interfejsu API.
Przejdź do projektu usługi Azure DevOps, a następnie wybierz pozycję Ustawienia projektu.
Wybierz pozycję Połączenie usługi, a następnie wybierz pozycję Nowe połączenie z usługą.
Wybierz pozycję NuGet, a następnie wybierz pozycję Dalej.
Wybierz pozycję ApiKey jako metodę uwierzytelniania. Użyj następującego adresu URL kanału informacyjnego: https://api.nuget.org/v3/index.json.
Wprowadź wygenerowany wcześniej klucz ApiKey, a następnie wprowadź nazwę połączenia z usługą.
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
Powiązane artykuły
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla