Udostępnij za pośrednictwem


NuGetAuthenticate@1 — zadanie uwierzytelniania nuGet w wersji 1

Skonfiguruj narzędzia NuGet do uwierzytelniania za pomocą usługi Azure Artifacts i innych repozytoriów NuGet. Wymaga pakietu NuGet >= 4.8.5385, dotnet >= 6 lub MSBuild >= 15.8.166.59604.

Składnia

# NuGet authenticate v1
# Configure NuGet tools to authenticate with Azure Artifacts and other NuGet repositories. Requires NuGet >= 4.8.5385, dotnet >= 6, or MSBuild >= 15.8.166.59604.
- task: NuGetAuthenticate@1
  inputs:
    #nuGetServiceConnections: # string. Service connection credentials for feeds outside this organization. 
    #forceReinstallCredentialProvider: false # boolean. Reinstall the credential provider even if already installed. Default: false.

Dane wejściowe

nuGetServiceConnections - Poświadczenia połączenia z usługą dla źródeł danych spoza tej organizacji
string.

Opcjonalny. Rozdzielona przecinkami lista nazw połączeń usługi NuGet dla źródeł danych spoza tej organizacji lub kolekcji. W przypadku źródeł danych w tej organizacji lub kolekcji pozostaw to pole puste; poświadczenia kompilacji są używane automatycznie.


forceReinstallCredentialProvider - Zainstaluj ponownie dostawcę poświadczeń, nawet jeśli jest już zainstalowany
boolean. Wartość domyślna: false.

Opcjonalny. Ponownie instaluje dostawcę poświadczeń w katalogu profilu użytkownika, nawet jeśli jest już zainstalowany. Jeśli dostawca poświadczeń jest już zainstalowany w profilu użytkownika, zadanie określa, czy zostało zastąpione dostawcą poświadczeń dostarczonym przez zadanie. Może to spowodować uaktualnienie (lub potencjalnie obniżenie poziomu) dostawcy poświadczeń.


Opcje sterowania zadaniami

Wszystkie zadania mają opcje sterowania oprócz danych wejściowych zadań podrzędnych. Aby uzyskać więcej informacji, zobacz Opcje sterowania i typowe właściwości zadań.

Zmienne wyjściowe

Brak.

Uwagi

Ważne

To zadanie jest zgodne tylko z NuGet >= 4.8.0.5385, dotnet >= 6 lub MSBuild >= 15.8.166.59604.

Jakie narzędzia są zgodne z tym zadaniem?

To zadanie konfiguruje narzędzia, które obsługują wtyczki nuGet dla wielu platform. Narzędzia obejmują obecnie nuget.exe, dotnet i najnowsze wersje programu MSBuild z wbudowaną obsługą przywracania pakietów NuGet.

W szczególności to zadanie skonfiguruje:

  • nuget.exe (wersja 4.8.5385 lub nowsza)
  • dotnet/ .NET 6 SDK lub nowszy (poprzednia wersja tego zadania, NuGetAuthenticateV0, wymaga platformy .NET Core 2.1, która nie jest już obsługiwana)
  • MSBuild (wersja 15.8.166.59604 lub nowsza)

Jeśli wystąpią jakiekolwiek problemy, zaleca się uaktualnienie do najnowszej stabilnej wersji.

Otrzymuję błędy "Zadanie zostało anulowane" podczas przywracania pakietu. Co mam zrobić?

Znane problemy z pakietem NuGet i dostawcą poświadczeń usługi Azure Artifacts mogą spowodować ten typ błędu, a aktualizacja do najnowszego narzędzia NuGet może pomóc.

Znany problem w niektórych wersjach narzędzia nuget/dotnet może spowodować ten błąd, zwłaszcza podczas dużych operacji przywracania na maszynach z ograniczonymi zasobami. Ten problem został rozwiązany w pakietach NuGet 5.2 i .NET Core SDK 2.1.80X i 2.2.40X. Jeśli używasz starszej wersji, spróbuj uaktualnić wersję narzędzia NuGet lub dotnet. Zadanie Instalatora narzędzi platformy .NET Core może służyć do zainstalowania nowszej wersji zestawu .NET Core SDK.

Istnieją również znane problemy z dostawcą poświadczeń usługi Azure Artifacts (instalowanym przez to zadanie), w tym artifacts-credprovider/#77 i artifacts-credprovider/#108. Jeśli wystąpią te problemy, upewnij się, że masz najnowszego dostawcę poświadczeń, ustawiając dane wejściowe forceReinstallCredentialProvidertrue w zadaniu uwierzytelniania NuGet. To ustawienie zapewni również automatyczne zaktualizowanie dostawcy poświadczeń w miarę rozwiązywania problemów.

Jeśli żaden z powyższych nie rozwiąże problemu, włącz rejestrowanie diagnostyczne wtyczki i zgłoś problem do narzędzia NuGet i dostawcy poświadczeń usługi Azure Artifacts.

Czym różni się to zadanie od zadań NuGetCommand i DotNetCoreCLI?

To zadanie konfiguruje nuget.exe, dotnet i MSBuild do uwierzytelniania za pomocą usługi Azure Artifacts lub innych repozytoriów, które wymagają uwierzytelniania. Po uruchomieniu tego zadania można wywołać narzędzia w późniejszym kroku (bezpośrednio lub za pośrednictwem skryptu), aby przywrócić lub wypchnąć pakiety.

Zadania NuGetCommand i DotNetCoreCLI wymagają użycia zadania do przywracania lub wypychania pakietów, ponieważ uwierzytelnianie w usłudze Azure Artifacts jest konfigurowane tylko w okresie istnienia zadania. Może to uniemożliwić przywracanie lub wypychanie pakietów we własnym skrypcie. Może to również uniemożliwić przekazywanie określonych argumentów wiersza polecenia do narzędzia.

Zadanie NuGetAuthenticate jest zalecanym sposobem używania uwierzytelnionych źródeł danych w potoku.

Kiedy w moim potoku należy uruchomić to zadanie?

To zadanie musi zostać uruchomione przed użyciem narzędzia NuGet w celu przywrócenia lub wypychania pakietów do uwierzytelnionego źródła pakietu, takiego jak Azure Artifacts. Nie ma żadnych innych wymagań dotyczących zamawiania. Na przykład to zadanie można bezpiecznie uruchomić przed lub po zadaniu instalatora narzędzi NuGet lub .NET Core.

Jak mogę skonfigurować źródło pakietu NuGet korzystające z klucza ApiKey ("klucze interfejsu API NuGet"), na przykład nuget.org?

Niektóre źródła pakietów, takie jak nuget.org używają kluczy interfejsu API do uwierzytelniania podczas wypychania pakietów, a nie username/password poświadczeń. Ze względu na ograniczenia w narzędziu NuGet nie można użyć tego zadania do skonfigurowania połączenia usługi NuGet korzystającego z klucza interfejsu API.

Zamiast:

  1. Konfigurowanie zmiennej tajnej zawierającej wartość ApiKey
  2. Wypychanie pakietu przy użyciu polecenia nuget push -ApiKey $(myNuGetApiKey) lub dotnet nuget push --api-key $(myNuGetApiKey), przy założeniu, że zmienna została nazwana myNuGetApiKey

Mój agent znajduje się za internetowym serwerem proxy. Czy program NuGetAuthenticate skonfiguruje nuget.exe, dotnet i MSBuild do używania serwera proxy?

Nie. To zadanie będzie działać za internetowym serwerem proxy , który został skonfigurowany do użycia, ale nie konfiguruje narzędzi NuGet do korzystania z serwera proxy.

W tym celu możesz wykonać następujące czynności:

  • Ustaw zmienną środowiskową http_proxy i opcjonalnie no_proxy na ustawienia serwera proxy. Aby uzyskać szczegółowe informacje, zobacz Zmienne środowiskowe interfejsu wiersza polecenia nuGet . Te zmienne są często używane zmienne, których mogą również używać inne narzędzia inne niż NuGet (np. curl).

    Ostrożność:
    Zmienne http_proxy i no_proxy są uwzględniane w systemach operacyjnych Linux i Mac i muszą mieć małe litery. Próba użycia zmiennej usługi Azure Pipelines w celu ustawienia zmiennej środowiskowej nie będzie działać, ponieważ zostanie przekonwertowana na wielkie litery. Zamiast tego ustaw zmienne środowiskowe na maszynie własnego agenta i uruchom ponownie agenta.

  • Dodaj ustawienia serwera proxy do pliku nuget.configna poziomie użytkownika , ręcznie lub przy użyciu, zgodnie z nuget config -set opisem w dokumentacji referencyjnejnuget.config .

    Ostrożność:
    Ustawienia serwera proxy (takie jak http_proxy) należy dodać do konfiguracji na poziomie użytkownika. Zostaną one zignorowane, jeśli zostaną określone w innym pliku nuget.config.

Jak mogę debugować, jeśli mam problemy z tym zadaniem?

Aby uzyskać pełne dzienniki z potoku, dodaj zmienną system.debug potoku i ustaw wartość .true

Jak to zadanie działa?

To zadanie instaluje dostawcę poświadczeń usługi Azure Artifacts w katalogu wtyczek NuGet, jeśli nie jest jeszcze zainstalowany. Następnie ustawia zmienne środowiskowe, takie jak VSS_NUGET_URI_PREFIXES i VSS_NUGET_ACCESSTOKEN , aby skonfigurować dostawcę poświadczeń. Te zmienne pozostają ustawione na okres istnienia zadania. Podczas przywracania lub wypychania pakietów narzędzie NuGet wykonuje dostawcę poświadczeń, który używa powyższych zmiennych, aby określić, czy ma zwracać poświadczenia z powrotem do narzędzia.

Aby uzyskać więcej informacji, zobacz dokumentację dostawcy poświadczeń.

Mój potok musi mieć dostęp do kanału informacyjnego w innym projekcie

Jeśli potok jest uruchomiony w innym projekcie niż projekt obsługujący kanał informacyjny, musisz skonfigurować inny projekt, aby udzielić dostępu do odczytu/zapisu do usługi kompilacji. Aby uzyskać więcej informacji, zobacz Uprawnienia pakietu w usłudze Azure Pipelines .

Czy będzie to działać w przypadku przebiegów potoków wyzwalanych z zewnętrznego rozwidlenia?

Nie. Uruchomienia potoków wyzwalane z zewnętrznego rozwidlenia nie mają dostępu do odpowiednich wpisów tajnych na potrzeby wewnętrznego uwierzytelniania kanału informacyjnego. W związku z tym będzie ono wyglądać tak, jakby zadanie uwierzytelniania zakończyło się pomyślnie, ale kolejne zadania wymagające uwierzytelnienia (takie jak wypychanie Nuget) zakończy się niepowodzeniem z błędem w wierszach: ##[error]The nuget command failed with exit code(1) and error(Response status code does not indicate success: 500 (Internal Server Error - VS800075: The project with id 'vstfs:///Classification/TeamProject/341ec244-e856-40ad-845c-af31c33c2152' does not exist, or you do not have permission to access it. (DevOps Activity ID: C12C19DC-642C-469A-8F58-C89F2D81FEA7)). Po scaleniu żądania ściągnięcia z źródłem potok, który zostanie wyzwolony z tego zdarzenia, zostanie prawidłowo uwierzytelniony.

Zaktualizowano z nuGetAuthenticateV0 do NuGetAuthenticateV1, a teraz moje polecenie dotnet kończy się niepowodzeniem z błędem 401

Jeśli aktualizujesz z nuGetAuthenticateV0 do NuGetAuthenticateV1 i występuje błąd podczas uruchamiania polecenia dotnet, poszukaj komunikatu It was not possible to find any compatible framework version z dzienników. W przypadku użytkowników dotnet nuGetAuthenticateV1 wymaga platformy .NET 6 zamiast .NET Core 2.1, która jest wymagana w środowisku NuGetAuthenticateV0 i nie jest już obsługiwana. Aby rozwiązać ten problem, użyj zadania UseDotNet@2 przed poleceniem dotnet, aby zainstalować platformę .NET 6.

- task: UseDotNet@2
  displayName: Use .NET 6 SDK
  inputs:
    packageType: sdk
    version: 6.x

Przykłady

Przywracanie i wypychanie pakietów NuGet w organizacji

Jeśli wszystkie używane źródła danych usługi Azure Artifacts znajdują się w tej samej organizacji co potok, możesz użyć zadania NuGetAuthenticate bez określania żadnych danych wejściowych. W przypadku źródeł danych o zakresie projektu, które znajdują się w innym projekcie niż w miejscu, w którym działa potok, należy ręcznie nadać projektowi i kanałowi informacyjnemu dostęp do usługi kompilacji projektu potoku.

Plik nuget.config

<configuration>
  <packageSources>
    <!-- 
      Any Azure Artifacts feeds within your organization will automatically be authenticated. Both dev.azure.com and visualstudio.com domains are supported.
      Project scoped feed URL includes the project, organization scoped feed URL does not.
    -->
    <add key="MyProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyProjectFeed2" value="https://{organization}.pkgs.visualstudio.com/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyOtherProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed@view}/nuget/v3/index.json" />
    <add key="MyOrganizationFeed1" value="https://pkgs.dev.azure.com/{organization}/_packaging/{feed}/nuget/v3/index.json" />
  </packageSources>
</configuration>

Aby użyć połączenia z usługą, określ połączenie usługi w nuGetServiceConnections danych wejściowych dla zadania uwierzytelnianie NuGet. Następnie możesz odwołać się do połączenia z usługą -ApiKey AzureArtifacts w zadaniu.

nuget.exe

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: NuGetToolInstaller@1 # Optional if nuget.exe >= 4.8.5385 is already on the path
  inputs:
    versionSpec: '*'
    checkLatest: true
- script: nuget restore
# ...
- script: nuget push -ApiKey AzureArtifacts -Source "MyProjectFeed1" MyProject.*.nupkg

dotnet

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: UseDotNet@2 # Optional if the .NET Core SDK is already installed
- script: dotnet restore
# ...
- script: dotnet nuget push --api-key AzureArtifacts --source https://pkgs.dev.azure.com/{organization}/_packaging/{feed1}/nuget/v3/index.json MyProject.*.nupkg

W powyższych przykładach OtherOrganizationFeedConnection i ThirdPartyRepositoryConnection są nazwami połączeń usługi NuGet , które zostały skonfigurowane i autoryzowane do użycia w potoku, oraz mają adresy URL zgodne z tymi w nuget.config argumencie wiersza polecenia lub .

Adres URL źródła pakietu wskazujący źródło danych usługi Azure Artifacts może lub nie może zawierać projektu. Adres URL kanału informacyjnego o zakresie projektu musi zawierać projekt, a adres URL kanału informacyjnego o zakresie organizacji nie może zawierać projektu. Dowiedz się więcej o kanałach informacyjnych o zakresie projektu.

Przywracanie i wypychanie pakietów NuGet poza organizacją

Jeśli używasz źródeł danych usługi Azure Artifacts z innej organizacji lub używasz uwierzytelnionego repozytorium pakietów innej firmy, musisz skonfigurować połączenia usługi NuGet i określić je w danych wejściowych nuGetServiceConnections . Kanały informacyjne w organizacji usługi Azure Artifacts będą również automatycznie uwierzytelniane.

Plik nuget.config

<configuration>
  <packageSources>
    <!-- Any Azure Artifacts feeds within your organization will automatically be authenticated -->
    <add key="MyProjectFeed1" value="https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="MyOrganizationFeed" value="https://pkgs.dev.azure.com/{organization}/_packaging/{feed}/nuget/v3/index.json" />
    <!-- Any package source listed here whose URL matches the URL of a service connection in nuGetServiceConnections will also be authenticated.
         The key name here does not need to match the name of the service connection. -->
    <add key="OtherOrganizationFeed" value="https://pkgs.dev.azure.com/{otherorganization}/_packaging/{feed}/nuget/v3/index.json" />
    <add key="ThirdPartyRepository" value="https://{thirdPartyRepository}/index.json" />
  </packageSources>
</configuration>

nuget.exe

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: NuGetToolInstaller@1 # Optional if nuget.exe >= 4.8.5385 is already on the path
  inputs:
    versionSpec: '*'
    checkLatest: true
- script: nuget restore
# ...
- script: nuget push -ApiKey AzureArtifacts -Source "MyProjectFeed1" MyProject.*.nupkg

dotnet

- task: NuGetAuthenticate@1
  inputs:
    nuGetServiceConnections: OtherOrganizationFeedConnection, ThirdPartyRepositoryConnection
- task: UseDotNet@2 # Optional if the .NET Core SDK is already installed
- script: dotnet restore
# ...
- script: dotnet nuget push --api-key AzureArtifacts --source "MyProjectFeed1"  MyProject.*.nupkg

OtherOrganizationFeedConnection i ThirdPartyRepositoryConnectionnazwami połączeń usługi NuGet , które zostały skonfigurowane i autoryzowane do użycia w potoku, oraz mają adresy URL, które pasują do tych w nuget.config lub argument wiersza polecenia.

Adres URL źródła pakietu wskazujący źródło danych usługi Azure Artifacts może lub nie może zawierać projektu. Adres URL kanału informacyjnego o zakresie projektu musi zawierać projekt, a adres URL kanału informacyjnego o zakresie organizacji nie może zawierać projektu. Dowiedz się więcej o kanałach informacyjnych o zakresie projektu.

Wymagania

Wymaganie Opis
Typy potoków YAML, kompilacja klasyczna, wersja klasyczna
Działa na Agent, DeploymentGroup
Wymagania Brak
Możliwości To zadanie nie spełnia żadnych wymagań dotyczących kolejnych zadań w zadaniu.
Ograniczenia poleceń Dowolne
Zmienne w formie tabeli settable Dowolne
Wersja agenta 2.144.0 lub nowsza
Kategoria zadania Pakiet
Wymaganie Opis
Typy potoków YAML, kompilacja klasyczna, wersja klasyczna
Działa na Agent, DeploymentGroup
Wymagania Brak
Możliwości To zadanie nie spełnia żadnych wymagań dotyczących kolejnych zadań w zadaniu.
Ograniczenia poleceń Dowolne
Zmienne w formie tabeli settable Dowolne
Wersja agenta 2.120.0 lub nowsza
Kategoria zadania Pakiet