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
Utwórz organizację usługi Azure DevOps i projekt, jeśli jeszcze tego nie zrobiono.
Utwórz nowe źródło danych, jeśli jeszcze go nie masz.
Jeśli używasz własnego agenta, upewnij się, że ma zainstalowany zestaw .NET Core SDK (2.1.400+) i pakiet NuGet (4.8.0.5385+).
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 .
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Potoki, a następnie wybierz definicję potoku.
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
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Potoki, a następnie wybierz definicję potoku.
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ą.
Zaloguj się do organizacji usługi Azure DevOps, w której zostanie uruchomiony potok, a następnie przejdź do projektu.
Przejdź do ustawień >projektu Połączenia usługi.
Wybierz pozycję Nowe połączenie z usługą, wybierz pozycję NuGet, a następnie wybierz pozycję Dalej.
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.
Wybierz Zapisz, gdy skończysz.
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Potoki, a następnie wybierz definicję potoku.
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
Zaloguj się do organizacji usługi Azure DevOps, a następnie przejdź do projektu.
Wybierz pozycję Potoki, a następnie wybierz definicję potoku.
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
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, dodajname:
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)'