Partilhar via


NuGetAuthenticate@1 - Autenticar tarefa v1 do NuGet

Configure ferramentas NuGet para autenticar com artefactos do Azure e outros repositórios NuGet. Requer NuGet >= 4.8.5385, dotnet >= 6 ou 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.

Entradas

nuGetServiceConnections - Credenciais de ligação de serviço para feeds fora desta organização
string.

Opcional. A lista separada por vírgulas dos nomes de ligação do serviço NuGet para feeds fora desta organização ou coleção. Para feeds nesta organização ou coleção, deixe isto em branco; As credenciais da compilação são utilizadas automaticamente.


forceReinstallCredentialProvider - Reinstalar o fornecedor de credenciais mesmo que já esteja instalado
boolean. Valor predefinido: false.

Opcional. Reinstala o fornecedor de credenciais no diretório de perfis de utilizador, mesmo que já esteja instalado. Se o fornecedor de credenciais já estiver instalado no perfil de utilizador, a tarefa determina se é substituído pelo fornecedor de credenciais fornecido pela tarefa. Isto pode atualizar (ou potencialmente mudar para uma versão anterior) do fornecedor de credenciais.


Opções de controlo de tarefas

Todas as tarefas têm opções de controlo para além das entradas de tarefas. Para obter mais informações, veja Opções de controlo e propriedades de tarefas comuns.

Variáveis de saída

Nenhum.

Observações

Importante

Esta tarefa só é compatível com NuGet >= 4.8.0.5385, dotnet >= 6 ou MSBuild >= 15.8.166.59604.

Que ferramentas são compatíveis com esta tarefa?

Esta tarefa configura ferramentas que suportam plug-ins de plataforma cruzada NuGet. As ferramentas incluem atualmente nuget.exe, dotnet e versões recentes do MSBuild com suporte incorporado para restaurar pacotes NuGet.

Especificamente, esta tarefa irá configurar:

  • nuget.exe (versão 4.8.5385 ou superior)
  • O SDK dotnet/.NET 6 ou superior (uma versão anterior desta tarefa, NuGetAuthenticateV0, requer o .NET Core 2.1, que já não é suportado)
  • MSBuild (versão 15.8.166.59604 ou superior)

A atualização para a versão estável mais recente é recomendada caso se depare com problemas.

Recebo erros "Uma tarefa foi cancelada" durante o restauro de um pacote. O que devo fazer?

Problemas conhecidos no NuGet e no Fornecedor de Credenciais de Artefactos do Azure podem causar este tipo de erro e atualizar para o nuget mais recente pode ajudar.

Um problema conhecido em algumas versões do nuget/dotnet pode causar este erro, especialmente durante grandes restauros em máquinas restritas de recursos. Este problema foi corrigido no NuGet 5.2 e no SDK .NET Core 2.1.80X e 2.2.40X. Se estiver a utilizar uma versão mais antiga, experimente atualizar a sua versão do NuGet ou dotnet. A tarefa do Instalador de Ferramentas .NET Core pode ser utilizada para instalar uma versão mais recente do SDK .NET Core.

Também existem problemas conhecidos com o Fornecedor de Credenciais de Artefactos do Azure (instalado por esta tarefa), incluindo artifacts-credprovider/#77 e artifacts-credprovider/#108. Se tiver estes problemas, certifique-se de que tem o fornecedor de credenciais mais recente ao definir a entrada forceReinstallCredentialProvider como true na tarefa Autenticar NuGet. Esta definição também garantirá que o seu fornecedor de credenciais é atualizado automaticamente à medida que os problemas são resolvidos.

Se nenhuma das opções acima resolver o problema, ative o Registo de Diagnóstico de Plug-in e comunique o problema ao NuGet e ao Fornecedor de Credenciais de Artefactos do Azure.

Como é que esta tarefa é diferente das tarefas NuGetCommand e DotNetCoreCLI?

Esta tarefa configura nuget.exe, dotnet e MSBuild para autenticar com artefactos do Azure ou outros repositórios que necessitem de autenticação. Após a execução desta tarefa, pode invocar as ferramentas num passo posterior (diretamente ou através de um script) para restaurar ou emitir pacotes.

As tarefas NuGetCommand e DotNetCoreCLI requerem a utilização da tarefa para restaurar ou emitir pacotes, uma vez que a autenticação nos Artefactos do Azure só está configurada durante a duração da tarefa. Isto pode impedir que restaure ou emita pacotes dentro do seu próprio script. Também pode impedir que passe argumentos específicos da linha de comandos para a ferramenta.

A tarefa NuGetAuthenticate é a forma recomendada de utilizar feeds autenticados num pipeline.

Quando devo executar esta tarefa no meu pipeline?

Esta tarefa tem de ser executada antes de utilizar uma ferramenta NuGet para restaurar ou emitir pacotes para uma origem de pacote autenticada, como artefactos do Azure. Não existem outros requisitos de ordenação. Por exemplo, esta tarefa pode ser executada com segurança antes ou depois de uma tarefa do instalador de ferramentas NuGet ou .NET Core.

Como devo proceder para configurar uma origem de pacote NuGet que utiliza a ApiKey ("Chaves da API NuGet"), como nuget.org?

Algumas origens de pacotes, como nuget.org utilizar chaves de API para autenticação ao emitir pacotes, em vez de username/password credenciais. Devido a limitações no NuGet, esta tarefa não pode ser utilizada para configurar uma ligação de serviço NuGet que utiliza uma chave de API.

Em vez disso:

  1. Configurar uma variável secreta que contém a ApiKey
  2. Execute o push do pacote com nuget push -ApiKey $(myNuGetApiKey) ou dotnet nuget push --api-key $(myNuGetApiKey), partindo do princípio de que nomeou a variável myNuGetApiKey

O meu agente está atrás de um proxy Web. O NuGetAuthenticate irá configurar nuget.exe, dotnet e MSBuild para utilizar o meu proxy?

N.º Embora esta tarefa funcione por trás de um proxy Web que o seu agente tenha sido configurado para utilizar, não configura as ferramentas NuGet para utilizar o proxy.

Para tal, pode:

  • Defina a variável http_proxy de ambiente e, opcionalmente no_proxy , para as definições de proxy. Veja Variáveis de ambiente da CLI NuGet para obter detalhes. Estas variáveis são frequentemente utilizadas variáveis que outras ferramentas não NuGet (por exemplo, curl) também podem utilizar.

    Atenção:
    As http_proxy variáveis e no_proxy são sensíveis às maiúsculas e minúsculas nos sistemas operativos Linux e Mac e têm de estar em minúsculas. Tentar utilizar uma variável de Pipelines do Azure para definir a variável de ambiente não funcionará, uma vez que será convertida em maiúsculas. Em vez disso, defina as variáveis de ambiente no computador do agente autoalojado e reinicie o agente.

  • Adicione as definições de proxy ao ficheiro de nuget.configao nível do utilizador , manualmente ou utilizando nuget config -set conforme descrito na documentação de referência donuget.config .

    Atenção:
    As definições de proxy (como http_proxy) têm de ser adicionadas à configuração ao nível do utilizador. Serão ignorados se especificados num ficheiro de nuget.config diferente.

Como devo proceder para depurar se tiver problemas com esta tarefa?

Para obter registos verbosos do pipeline, adicione uma variável system.debug de pipeline e defina como true.

Como funciona esta tarefa?

Esta tarefa instala o Fornecedor de Credenciais de Artefactos do Azure no diretório de plug-ins NuGet se ainda não estiver instalado. Em seguida, define variáveis de ambiente, como VSS_NUGET_URI_PREFIXES e VSS_NUGET_ACCESSTOKEN para configurar o fornecedor de credenciais. Estas variáveis permanecem definidas para a duração da tarefa. Ao restaurar ou emitir pacotes, uma ferramenta NuGet executa o fornecedor de credenciais, que utiliza as variáveis acima para determinar se deve devolver credenciais à ferramenta.

Veja a documentação do fornecedor de credenciais para obter mais detalhes.

O Meu Pipeline tem de aceder a um feed num projeto diferente

Se o pipeline estiver em execução num projeto diferente do projeto que aloja o feed, tem de configurar o outro projeto para conceder acesso de leitura/escrita ao serviço de compilação. Veja Permissões de pacotes nos Pipelines do Azure para obter mais detalhes.

Isto funcionará para execuções de pipeline que são acionadas a partir de um fork externo?

N.º As execuções de pipeline que são acionadas a partir de um fork externo não têm acesso aos segredos adequados para a autenticação de feeds internos. Assim, será apresentado como se a tarefa de autenticação fosse bem-sucedida, mas as tarefas subsequentes que requerem autenticação (como o nuget push) falharão com um erro ao longo das linhas de: ##[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)). Após a intercalação do Pedido Pull na origem, um pipeline que é acionado a partir desse evento será autenticado corretamente.

Atualizei de NuGetAuthenticateV0 para NuGetAuthenticateV1 e agora o meu comando dotnet falha com o 401

Se estiver a atualizar de NuGetAuthenticateV0 para NuGetAuthenticateV1 e receber um erro ao executar um comando dotnet, procure a mensagem It was not possible to find any compatible framework version dos registos. Para os utilizadores do dotnet, NuGetAuthenticateV1 requer .NET 6 em vez de .NET Core 2.1, que é necessário em NuGetAuthenticateV0 e já não é suportado. Para resolver o problema, utilize a tarefa UseDotNet@2 antes do comando dotnet para instalar o .NET 6.

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

Exemplos

Restaurar e emitir pacotes NuGet na sua organização

Se todos os feeds de Artefactos do Azure que utiliza estiverem na mesma organização que o pipeline, pode utilizar a tarefa NuGetAuthenticate sem especificar entradas. Para feeds no âmbito do projeto que estão num projeto diferente do local onde o pipeline está em execução, tem de dar manualmente ao projeto e ao feed acesso ao serviço de compilação do projeto do pipeline.

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>

Para utilizar uma ligação de serviço, especifique a ligação de serviço na nuGetServiceConnections entrada para a tarefa Autenticar NuGet. Em seguida, pode referenciar a ligação de serviço numa -ApiKey AzureArtifacts tarefa.

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

Nos exemplos acima, OtherOrganizationFeedConnection e ThirdPartyRepositoryConnection são os nomes das ligações de serviço NuGet que foram configuradas e autorizadas para utilização no pipeline e têm URLs que correspondem aos do seu nuget.config argumento ou da linha de comandos.

O URL de origem do pacote que aponta para um feed de Artefactos do Azure pode ou não conter o projeto. Um URL para um feed no âmbito do projeto tem de conter o projeto e um URL para um feed no âmbito da organização não pode conter o projeto. Saiba mais sobre os feeds no âmbito do projeto.

Restaurar e emitir pacotes NuGet fora da sua organização

Se utilizar feeds de Artefactos do Azure de uma organização diferente ou utilizar um repositório de pacotes autenticados de terceiros, terá de configurar as ligações de serviço NuGet e especificá-las na nuGetServiceConnections entrada. Os feeds na sua organização de Artefactos do Azure também serão autenticados automaticamente.

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 e ThirdPartyRepositoryConnection são os nomes das ligações de serviço NuGet que foram configuradas e autorizadas para utilização no pipeline e têm URLs que correspondem aos da sua nuget.config ou argumento da linha de comandos.

O URL de origem do pacote que aponta para um feed de Artefactos do Azure pode ou não conter o projeto. Um URL para um feed no âmbito do projeto tem de conter o projeto e um URL para um feed no âmbito da organização não pode conter o projeto. Saiba mais sobre os feeds no âmbito do projeto.

Requisitos

Requisito Description
Tipos de pipeline YAML, Compilação clássica, Versão clássica
É executado em Agent, DeploymentGroup
Exigências Nenhuma
Capacidades Esta tarefa não satisfaz quaisquer exigências para tarefas subsequentes na tarefa.
Restrições de comandos Qualquer
Variáveis de definição Qualquer
Versão do agente 2.144.0 ou superior
Categoria da tarefa Pacote
Requisito Description
Tipos de pipeline YAML, Compilação clássica, Versão clássica
É executado em Agent, DeploymentGroup
Exigências Nenhuma
Capacidades Esta tarefa não satisfaz quaisquer exigências para tarefas subsequentes na tarefa.
Restrições de comandos Qualquer
Variáveis de definição Qualquer
Versão do agente 2.120.0 ou superior
Categoria da tarefa Pacote