Compartilhar via


NuGetAuthenticate@1 – Tarefa autenticar v1 do NuGet

Configure as ferramentas do NuGet para autenticar com o Azure Artifacts e outros repositórios NuGet. Requer NuGet >= 4,8,5385, dotnet >= 6 ou MSBuild >= 15,8,166,59604.

Sintaxe

# 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 conexão de serviço para feeds fora desta organização
string.

Opcional. A lista separada por vírgulas de nomes de conexão de serviço NuGet para feeds fora dessa organização ou coleção. Para feeds nesta organização ou coleção, deixe isso em branco; As credenciais do build são usadas automaticamente.


forceReinstallCredentialProvider - Reinstalar o provedor de credenciais mesmo que já esteja instalado
boolean. Valor padrão: false.

Opcional. Reinstala o provedor de credenciais para o diretório de perfil do usuário, mesmo que ele já esteja instalado. Se o provedor de credenciais já estiver instalado no perfil do usuário, a tarefa determinará se ele foi substituído com o provedor de credenciais fornecido pela tarefa. Isso pode atualizar (ou potencialmente fazer downgrade) do provedor de credenciais.


Opções de controle de tarefa

Todas as tarefas têm opções de controle além de suas entradas de tarefa. Para obter mais informações, consulte Opções de controle e propriedades comuns da tarefa.

Variáveis de saída

Nenhum.

Comentários

Importante

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

Quais ferramentas são compatíveis com essa tarefa?

Esta tarefa configura ferramentas que dão suporte a plug-ins de plataforma cruzada do NuGet. Atualmente, as ferramentas incluem nuget.exe, dotnet e versões recentes do MSBuild com suporte interno para restaurar pacotes NuGet.

Especificamente, essa tarefa configurará:

  • nuget.exe (versão 4.8.5385 ou superior)
  • O SDK do dotnet/.NET 6 ou superior (uma versão anterior desta tarefa, NuGetAuthenticateV0, requer o .NET Core 2.1, que não tem mais suporte)
  • MSBuild (versão 15.8.166.59604 ou superior)

É recomendável atualizar para a versão estável mais recente se você encontrar problemas.

Recebo erros de "Uma tarefa foi cancelada" durante uma restauração de pacote. O que devo fazer?

Problemas conhecidos no NuGet e no Provedor de Credenciais do Azure Artifacts podem causar esse tipo de erro, e a atualização para o nuget mais recente pode ajudar.

Um problema conhecido em algumas versões do nuget/dotnet pode causar esse erro, especialmente durante grandes restaurações em computadores com restrição de recursos. Esse problema foi corrigido no NuGet 5.2 e no SDK do .NET Core 2.1.80X e 2.2.40X. Se você estiver usando uma versão mais antiga, tente atualizar sua versão do NuGet ou dotnet. A tarefa do Instalador de Ferramentas do .NET Core pode ser usada para instalar uma versão mais recente do SDK do .NET Core.

Também há problemas conhecidos com o Provedor de Credenciais do Azure Artifacts (instalado por esta tarefa), incluindo artifacts-credprovider/#77 e artifacts-credprovider/#108. Se você enfrentar esses problemas, verifique se tem o provedor de credenciais mais recente definindo a entrada forceReinstallCredentialProvider como true na tarefa Autenticação do NuGet. Essa configuração também garantirá que seu provedor de credenciais seja atualizado automaticamente à medida que os problemas forem resolvidos.

Se nenhum dos acima resolver o problema, habilite o Log de Diagnóstico do Plug-in e relate o problema ao NuGet e ao Provedor de Credenciais do Azure Artifacts.

Como essa tarefa é diferente das tarefas NuGetCommand e DotNetCoreCLI?

Essa tarefa configura nuget.exe, dotnet e MSBuild para autenticar com o Azure Artifacts ou outros repositórios que exigem autenticação. Depois que essa tarefa for executada, você poderá invocar as ferramentas em uma etapa posterior (diretamente ou por meio de um script) para restaurar ou enviar pacotes por push.

As tarefas NuGetCommand e DotNetCoreCLI exigem o uso da tarefa para restaurar ou enviar pacotes por push, pois a autenticação para o Azure Artifacts só é configurada dentro do tempo de vida da tarefa. Isso pode impedir que você restaure ou envie pacotes por push em seu próprio script. Ele também pode impedir que você passe argumentos de linha de comando específicos para a ferramenta.

A tarefa NuGetAuthenticate é a maneira recomendada de usar feeds autenticados em um pipeline.

Quando, no meu pipeline, devo executar essa tarefa?

Essa tarefa deve ser executada antes de usar uma ferramenta Do NuGet para restaurar ou enviar pacotes por push para uma fonte de pacote autenticada, como o Azure Artifacts. Não há outros requisitos de ordenação. Por exemplo, essa tarefa pode ser executada com segurança antes ou depois de uma tarefa do instalador de ferramentas do NuGet ou do .NET Core.

Como fazer configurar uma fonte de pacote NuGet que usa ApiKey ("Chaves de API do NuGet"), como nuget.org?

Algumas fontes de pacote, como nuget.org usam chaves de API para autenticação ao enviar pacotes por push, em vez de username/password credenciais. Devido a limitações no NuGet, essa tarefa não pode ser usada para configurar uma conexão de serviço Do NuGet que usa uma chave de API.

Em vez disso:

  1. Configurar uma variável secreta que contém a ApiKey
  2. Execute o push do pacote usando nuget push -ApiKey $(myNuGetApiKey) ou dotnet nuget push --api-key $(myNuGetApiKey), supondo que você nomeou a variável myNuGetApiKey

Meu agente está por trás de um proxy web. O NuGetAuthenticate configurará nuget.exe, dotnet e MSBuild para usar meu proxy?

Não. Embora essa tarefa funcione por trás de um proxy Web que seu agente foi configurado para usar, ela não configura as ferramentas do NuGet para usar o proxy.

Para fazer isso, você pode:

  • Defina a variável http_proxy de ambiente e, opcionalmente no_proxy , para as configurações de proxy. Consulte Variáveis de ambiente da CLI do NuGet para obter detalhes. Essas variáveis são variáveis comumente usadas que outras ferramentas não NuGet (por exemplo, curl) também podem usar.

    Cuidado:
    As http_proxy variáveis e no_proxy diferenciam maiúsculas de minúsculas em sistemas operacionais Linux e Mac e devem ser minúsculas. Tentar usar uma variável do Azure Pipelines para definir a variável de ambiente não funcionará, pois ela será convertida em maiúsculas. Em vez disso, defina as variáveis de ambiente no computador do agente auto-hospedado e reinicie o agente.

  • Adicione as configurações de proxy ao arquivo de nuget.configno nível do usuário , manualmente ou usando nuget config -set conforme descrito na documentação de referência donuget.config .

    Cuidado:
    As configurações de proxy (como http_proxy) devem ser adicionadas à configuração no nível do usuário. Eles serão ignorados se especificados em um arquivo de nuget.config diferente.

Como fazer depurar se eu tiver problemas com essa tarefa?

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

Como essa tarefa funciona?

Essa tarefa instala o Provedor de Credenciais do Azure Artifacts no diretório de plug-ins do NuGet se ele ainda não estiver instalado. Em seguida, ele define variáveis de ambiente como VSS_NUGET_URI_PREFIXES e VSS_NUGET_ACCESSTOKEN para configurar o provedor de credenciais. Essas variáveis permanecem definidas para o tempo de vida do trabalho. Ao restaurar ou enviar pacotes por push, uma ferramenta NuGet executa o provedor de credenciais, que usa as variáveis acima para determinar se ele deve retornar credenciais de volta à ferramenta.

Consulte a documentação do provedor de credenciais para obter mais detalhes.

Meu Pipeline precisa acessar um feed em um projeto diferente

Se o pipeline estiver em execução em um projeto diferente do projeto que hospeda o feed, você deverá configurar o outro projeto para conceder acesso de leitura/gravação ao serviço de build. Confira Permissões de pacote no Azure Pipelines para obter mais detalhes.

Isso funcionará para execuções de pipeline disparadas de uma bifurcação externa?

Não. As execuções de pipeline disparadas de um fork externo não têm acesso aos segredos adequados para autenticação de feed interno. Assim, ele aparecerá como se a tarefa de autenticação fosse bem-sucedida, mas as tarefas subsequentes que exigem autenticação (como o push do Nuget) falharão com um erro nos moldes 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)). Depois que a Solicitação de Pull for mesclada na origem, um pipeline disparado desse evento será autenticado corretamente.

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

Se você estiver atualizando de NuGetAuthenticateV0 para NuGetAuthenticateV1 e receber um erro executando um comando dotnet, procure a mensagem It was not possible to find any compatible framework version nos logs. Para usuários dotnet, o NuGetAuthenticateV1 requer o .NET 6 em vez do .NET Core 2.1, que é necessário no NuGetAuthenticateV0 e não tem mais suporte. Para resolver o problema, use 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 enviar pacotes NuGet por push em sua organização

Se todos os feeds do Azure Artifacts usados estiverem na mesma organização que o pipeline, você poderá usar a tarefa NuGetAuthenticate sem especificar nenhuma entrada. Para feeds com escopo de projeto que estão em um projeto diferente do em que o pipeline está em execução, você deve fornecer manualmente ao projeto e ao feed acesso ao serviço de build 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 usar uma conexão de serviço, especifique a conexão de serviço na nuGetServiceConnections entrada para a tarefa Autenticação do NuGet. Em seguida, você pode referenciar a conexão de serviço com -ApiKey AzureArtifacts em uma 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 conexões de serviço do NuGet que foram configuradas e autorizadas para uso em seu pipeline e têm URLs que correspondem às nuget.config do argumento de linha de comando ou .

A URL de origem do pacote que aponta para um feed do Azure Artifacts pode ou não conter o projeto. Uma URL para um feed com escopo de projeto deve conter o projeto e uma URL para um feed com escopo de organização não deve conter o projeto. Saiba mais sobre feeds com escopo de projeto.

Restaurar e enviar pacotes NuGet por push para fora da sua organização

Se você usar feeds do Azure Artifacts de uma organização diferente ou usar um repositório de pacote autenticado de terceiros, precisará configurar conexões de serviço do NuGet e especificá-las na nuGetServiceConnections entrada. Os feeds em sua organização do Azure Artifacts 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 conexões de serviço do NuGet que foram configuradas e autorizadas para uso em seu pipeline e têm URLs que correspondem às do nuget.config ou do argumento de linha de comando.

A URL de origem do pacote que aponta para um feed do Azure Artifacts pode ou não conter o projeto. Uma URL para um feed com escopo de projeto deve conter o projeto e uma URL para um feed com escopo de organização não deve conter o projeto. Saiba mais sobre feeds com escopo de projeto.

Requisitos

Requisito Descrição
Tipos de pipeline YAML, build clássico, versão clássica
Executa em Agent, DeploymentGroup
Demandas Nenhum
Funcionalidades Essa tarefa não atende a nenhuma demanda para tarefas subsequentes no trabalho.
Restrições de comando Qualquer
Variáveis configuráveis Qualquer
Versão do agente 2.144.0 ou superior
Categoria da tarefa Pacote
Requisito Descrição
Tipos de pipeline YAML, build clássico, versão clássica
Executa em Agent, DeploymentGroup
Demandas Nenhum
Funcionalidades Essa tarefa não atende a nenhuma demanda para tarefas subsequentes no trabalho.
Restrições de comando Qualquer
Variáveis configuráveis Qualquer
Versão do agente 2.120.0 ou superior
Categoria da tarefa Pacote