Dela via


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:
    #forceReinstallCredentialProvider: false # boolean. Reinstall the credential provider even if already installed. Default: false.
    #nuGetServiceConnections: # string. Service connection credentials for feeds outside this organization.
# 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.

Ingångar

forceReinstallCredentialProvider - Installera om providern för autentiseringsuppgifter även om den redan är installerad
boolean. Standardvärde: false.

Valfri. 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 den uppgiftsgivna autentiseringsprovidern. Detta kan uppgradera (eller potentiellt nedgradera) providern för autentiseringsuppgifter.


nuGetServiceConnections - Tjänstanslutningsautentiseringsuppgifter för feeds utanför organisationen
string.

Valfri. Kommaavgränsad lista över NuGet-tjänstanslutning namn 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.


Alternativ för aktivitetskontroll

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

Utdatavariabler

Ingen.

Anmärkningar

Viktig

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 innehåller för närvarande nuget.exe, dotnet och de senaste versionerna av MSBuild med inbyggt stöd för att återställa 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å några 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 åtgärdas i NuGet 5.2och .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 får de här problemen kontrollerar du att du har den senaste providern för autentiseringsuppgifter genom att ange indata forceReinstallCredentialProvider till true i NuGet-autentiseringsaktiviteten. 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-uppgifterna?

Den här uppgiften konfigurerar nuget.exe, dotnet och MSBuild att autentisera med Azure Artifacts eller andra lagringsplatser som kräver autentisering. När den här uppgiften har körts kan du 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 konfigurerar jag 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 för username/password 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-pushen med hjälp av nuget push -ApiKey $(myNuGetApiKey) eller dotnet nuget push --api-key $(myNuGetApiKey), förutsatt att du har namngett variabeln 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 din agent har konfigurerats för att använda, konfigurerar den inte NuGet-verktyg för att använda proxyn.

För att göra det kan du antingen:

  • Ange miljövariabeln http_proxy och om du vill 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) också kan använda.

    Varning:
    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 fil på användarnivå, antingen manuellt eller med hjälp av nuget config -set enligt beskrivningen i nuget.config referensdokumentationen.

    Varning:
    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 felsöker jag 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 flödet måste du konfigurera det andra projektet för att bevilja läs-/skrivåtkomst till byggtjänsten. Mer information finns i Paketbehörigheter i Azure Pipelines.

Kommer det här 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 autentiseringsuppgiften 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 uppgiften UseDotNet@2 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 projektomfattningsfeeds som finns i ett annat projekt än där pipelinen körs i måste du manuellt ge projektet och feedåtkomsten till pipelinens byggtjä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 i nuGetServiceConnections 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 är OtherOrganizationFeedConnection och ThirdPartyRepositoryConnection 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 argumentet nuget.config eller kommandoraden.

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

Å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 paketlagringsplats från tredje part måste du konfigurera NuGet-tjänstanslutningar och ange dem i nuGetServiceConnections 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 argumentet nuget.config eller kommandoraden.

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

Krav

Krav Beskrivning
Pipelinetyper YAML, klassisk version, klassisk version
Körs på Agent, DeploymentGroup
kräver Ingen
funktioner Den här aktiviteten uppfyller inte några krav på efterföljande uppgifter i jobbet.
Kommandobegränsningar Någon
variabler som kan Någon
Agentversion 2.144.0 eller senare
Aktivitetskategori Paket
Krav Beskrivning
Pipelinetyper YAML, klassisk version, klassisk version
Körs på Agent, DeploymentGroup
kräver Ingen
funktioner Den här aktiviteten uppfyller inte några krav på efterföljande uppgifter i jobbet.
Kommandobegränsningar Någon
variabler som kan Någon
Agentversion 2.120.0 eller senare
Aktivitetskategori Paket