NuGetAuthenticate@1 – NuGet-autentisera v1-uppgift

Konfigurera NuGet-verktyg för att autentisera med Azure Artifacts och andra NuGet-lagringsplatser. Kräver NuGet >= 4.8.5385, dotnet >= 6 eller MSBuild >= 15.8.166.59604.

Syntax

# 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.

Indata

nuGetServiceConnections - Autentiseringsuppgifter för tjänstanslutning för feeds utanför organisationen
string.

Valfritt. Kommaavgränsad lista över NuGet-tjänstanslutningsnamn för feeds utanför organisationen eller samlingen. Lämna detta tomt för feeds i den här organisationen eller samlingen. byggets autentiseringsuppgifter används automatiskt.


forceReinstallCredentialProvider - Installera om autentiseringsprovidern även om den redan är installerad
boolean. Standardvärde: false.

Valfritt. Installerar om providern för autentiseringsuppgifter till användarprofilkatalogen, även om den redan är installerad. Om providern för autentiseringsuppgifter redan är installerad i användarprofilen avgör uppgiften om den skrivs över med uppgiftsprovidern för autentiseringsuppgifter. Detta kan uppgradera (eller potentiellt nedgradera) providern för autentiseringsuppgifter.


Alternativ för aktivitetskontroll

Alla aktiviteter har kontrollalternativ utöver sina uppgiftsindata. Mer information finns i Kontrollalternativ och vanliga uppgiftsegenskaper.

Utdatavariabler

Inga.

Kommentarer

Viktigt

Den här uppgiften är endast kompatibel med NuGet >= 4.8.0.5385, dotnet >= 6 eller MSBuild >= 15.8.166.59604.

Vilka verktyg är kompatibla med den här uppgiften?

Den här uppgiften konfigurerar verktyg som stöder NuGet-plattformsoberoende plugin-program. Verktygen omfattar för närvarande nuget.exe, dotnet och de senaste versionerna av MSBuild med inbyggt stöd för återställning av NuGet-paket.

Mer specifikt konfigurerar den här uppgiften:

  • nuget.exe (version 4.8.5385 eller senare)
  • dotnet/.NET 6 SDK eller senare (en tidigare version av den här uppgiften, NuGetAuthenticateV0, kräver .NET Core 2.1, som inte längre stöds)
  • MSBuild (version 15.8.166.59604 eller senare)

Du bör uppgradera till den senaste stabila versionen om du stöter på problem.

Jag får felmeddelandet "En uppgift avbröts" under en paketåterställning. Vad ska jag göra?

Kända problem i NuGet och i Azure Artifacts Credential Provider kan orsaka den här typen av fel, och det kan vara till hjälp att uppdatera till den senaste nugeten.

Ett känt problem i vissa versioner av nuget/dotnet kan orsaka det här felet, särskilt vid stora återställningar på resursbegränsade datorer. Det här problemet har åtgärdats i NuGet 5.2 och .NET Core SDK 2.1.80X och 2.2.40X. Om du använder en äldre version kan du prova att uppgradera din version av NuGet eller dotnet. .NET Core Tool Installer-uppgiften kan användas för att installera en nyare version av .NET Core SDK.

Det finns också kända problem med Azure Artifacts Credential Provider (installerad av den här uppgiften), inklusive artifacts-credprovider/#77 och artifacts-credprovider/#108. Om du stöter på de här problemen kontrollerar du att du har den senaste providern för autentiseringsuppgifter genom att ange indata forceReinstallCredentialProvider till true i aktiviteten NuGet Authenticate. Den här inställningen säkerställer också att providern för autentiseringsuppgifter uppdateras automatiskt när problem löses.

Om inget av ovanstående löser problemet aktiverar du Diagnostikloggning för plugin-program och rapporterar problemet till NuGet och Azure Artifacts Credential Provider.

Hur skiljer sig den här uppgiften från NuGetCommand- och DotNetCoreCLI-aktiviteterna?

Den här uppgiften konfigurerar nuget.exe, dotnet och MSBuild för att autentisera med Azure Artifacts eller andra lagringsplatser som kräver autentisering. När den här uppgiften har körts kan du sedan anropa verktygen i ett senare steg (antingen direkt eller via ett skript) för att återställa eller push-överföra paket.

NuGetCommand- och DotNetCoreCLI-uppgifterna kräver att du använder uppgiften för att återställa eller push-överföra paket, eftersom autentisering till Azure Artifacts endast konfigureras inom aktivitetens livslängd. Detta kan hindra dig från att återställa eller push-överföra paket i ditt eget skript. Det kan också hindra dig från att skicka specifika kommandoradsargument till verktyget.

NuGetAuthenticate-uppgiften är det rekommenderade sättet att använda autentiserade feeds i en pipeline.

När i min pipeline ska jag köra den här uppgiften?

Den här uppgiften måste köras innan du använder ett NuGet-verktyg för att återställa eller skicka paket till en autentiserad paketkälla, till exempel Azure Artifacts. Det finns inga andra beställningskrav. Den här uppgiften kan till exempel köras på ett säkert sätt före eller efter en installationsuppgift för NuGet- eller .NET Core-verktyget.

Hur gör jag för att konfigurera en NuGet-paketkälla som använder ApiKey ("NuGet API-nycklar"), till exempel nuget.org?

Vissa paketkällor, till exempel nuget.org använda API-nycklar för autentisering vid push-överföring av paket i stället username/password för autentiseringsuppgifter. På grund av begränsningar i NuGet kan den här uppgiften inte användas för att konfigurera en NuGet-tjänstanslutning som använder en API-nyckel.

Istället:

  1. Konfigurera en hemlig variabel som innehåller ApiKey
  2. Utför paket-push med eller nuget push -ApiKey $(myNuGetApiKey)dotnet nuget push --api-key $(myNuGetApiKey), förutsatt att du har döpt variabeln till myNuGetApiKey

Min agent finns bakom en webbproxy. Kommer NuGetAuthenticate att konfigurera nuget.exe, dotnet och MSBuild för att använda min proxy?

Nej. Även om den här uppgiften i sig fungerar bakom en webbproxy som agenten har konfigurerats att använda, konfigurerar den inte NuGet-verktyg för att använda proxyn.

Om du vill göra det kan du antingen:

  • Ange miljövariabeln http_proxy och eventuellt no_proxy till proxyinställningarna. Mer information finns i NuGet CLI-miljövariabler . Dessa variabler är vanliga variabler som andra icke-NuGet-verktyg (t.ex. curl) kan använda.

    Försiktighet:
    Variablerna http_proxy och no_proxy är skiftlägeskänsliga på Linux- och Mac-operativsystem och måste vara gemener. Försök att använda en Azure Pipelines-variabel för att ange miljövariabeln fungerar inte eftersom den konverteras till versaler. Ange i stället miljövariablerna på den lokalt installerade agentens dator och starta om agenten.

  • Lägg till proxyinställningarna i nuget.config-filen på användarnivå , antingen manuellt eller med hjälp av nuget config -set enligt beskrivningen i nuget.config referensdokumentation .

    Försiktighet:
    Proxyinställningarna (till exempel http_proxy) måste läggas till i konfigurationen på användarnivå. De ignoreras om de anges i en annan nuget.config fil.

Hur gör jag för att felsöka om jag har problem med den här uppgiften?

Om du vill hämta utförliga loggar från pipelinen lägger du till en pipelinevariabel system.debug och anger till true.

Hur fungerar den här uppgiften?

Den här uppgiften installerar Azure Artifacts Credential Provider i NuGet-plugin-katalogen om den inte redan är installerad. Den anger sedan miljövariabler som VSS_NUGET_URI_PREFIXES och VSS_NUGET_ACCESSTOKEN för att konfigurera providern för autentiseringsuppgifter. Dessa variabler förblir inställda under jobbets livslängd. När du återställer eller push-överför paket kör ett NuGet-verktyg providern för autentiseringsuppgifter, som använder ovanstående variabler för att avgöra om autentiseringsuppgifterna ska returneras tillbaka till verktyget.

Mer information finns i dokumentationen för autentiseringsprovidern.

Min pipeline måste komma åt en feed i ett annat projekt

Om pipelinen körs i ett annat projekt än det projekt som är värd för feeden måste du konfigurera det andra projektet för att bevilja läs- och skrivåtkomst till byggtjänsten. Mer information finns i Paketbehörigheter i Azure Pipelines .

Kommer detta att fungera för pipelinekörningar som utlöses från en extern förgrening?

Nej. Pipelinekörningar som utlöses från en extern förgrening har inte åtkomst till rätt hemligheter för intern feedautentisering. Det verkar därför som om autentiseringsaktiviteten lyckas, men efterföljande uppgifter som kräver autentisering (till exempel Nuget-push) misslyckas med ett fel i stil med: ##[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)). När pull-begäran har sammanfogats till ursprunget autentiseras en pipeline som utlöses från händelsen korrekt.

Jag har uppdaterat från NuGetAuthenticateV0 till NuGetAuthenticateV1 och nu misslyckas mitt dotnet-kommando med 401

Om du uppdaterar från NuGetAuthenticateV0 till NuGetAuthenticateV1 och får ett fel när du kör ett dotnet-kommando letar du efter meddelandet It was not possible to find any compatible framework version från loggarna. För dotnet-användare kräver NuGetAuthenticateV1 .NET 6 i stället för .NET Core 2.1, vilket krävs i NuGetAuthenticateV0 och stöds inte längre. Lös problemet genom att använda den UseDotNet@2 uppgiften före dotnet-kommandot för att installera .NET 6.

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

Exempel

Återställa och push-överföra NuGet-paket i din organisation

Om alla Azure Artifacts-feeds som du använder finns i samma organisation som din pipeline kan du använda uppgiften NuGetAuthenticate utan att ange några indata. För projektomfattande feeds som finns i ett annat projekt än där pipelinen körs i måste du manuellt ge projektet och feedåtkomst till pipelinens projektversionstjänst.

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>

Om du vill använda en tjänstanslutning anger du tjänstanslutningen nuGetServiceConnections i indata för aktiviteten NuGet Authenticate. Du kan sedan referera till tjänstanslutningen med -ApiKey AzureArtifacts i en aktivitet.

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

I exemplen ovan och OtherOrganizationFeedConnectionThirdPartyRepositoryConnection är namnen på NuGet-tjänstanslutningar som har konfigurerats och auktoriserats för användning i pipelinen och har URL:er som matchar dem i ditt nuget.config kommandoradsargument.

Paketkällans URL som pekar på en Azure Artifacts-feed kan innehålla projektet eller inte. En URL för ett projektomfångsflöde måste innehålla projektet och en URL för en organisationsomfattande feed får inte innehålla projektet. Läs mer om feeds med projektomfång.

Återställa och push-överföra NuGet-paket utanför organisationen

Om du använder Azure Artifacts-feeds från en annan organisation eller använder en autentiserad nuGetServiceConnections paketlagringsplats från tredje part måste du konfigurera NuGet-tjänstanslutningar och ange dem i indata. Feeds i din Azure Artifacts-organisation autentiseras också automatiskt.

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 och ThirdPartyRepositoryConnection är namnen på NuGet-tjänstanslutningar som har konfigurerats och godkänts för användning i pipelinen och har URL:er som matchar dem i nuget.config- eller kommandoradsargumentet.

Paketkällans URL som pekar på en Azure Artifacts-feed kan innehålla projektet eller inte. En URL för ett projektomfångsflöde måste innehålla projektet och en URL för en organisationsomfattande feed får inte innehålla projektet. Läs mer om feeds med projektomfång.

Krav

Krav Beskrivning
Pipelinetyper YAML, klassisk version, klassisk version
Körs på Agent, DeploymentGroup
Krav Ingen
Funktioner Den här aktiviteten uppfyller inte några krav för efterföljande uppgifter i jobbet.
Kommandobegränsningar Valfri
Inställningsbara variabler Valfri
Agentversion 2.144.0 eller senare
Uppgiftskategori Paket
Krav Beskrivning
Pipelinetyper YAML, klassisk version, klassisk version
Körs på Agent, DeploymentGroup
Krav Ingen
Funktioner Den här aktiviteten uppfyller inte några krav för efterföljande uppgifter i jobbet.
Kommandobegränsningar Valfri
Inställningsbara variabler Valfri
Agentversion 2.120.0 eller senare
Uppgiftskategori Paket