Compartilhar via


Tutorial: Configurar um cache binário vcpkg usando um feed NuGet

Observação

Este tutorial usa um feed NuGet hospedado no Azure Artifacts, mas as mesmas instruções podem ser usadas para outros provedores de feed NuGet, por exemplo: GitHub Packages, com algumas alterações.

O vcpkg dá suporte ao uso de feeds de pacotes NuGet para carregar e restaurar pacotes binários de maneira conveniente.

Os feeds de pacotes NuGet têm recursos de controle de acesso que os tornam ideais para limitar o acesso a recursos em sua organização ou grupo de trabalho. Os feeds NuGet são compatíveis com vários provedores de armazenamento em nuvem, como Azure Artifacts e GitHub Package Registry.

Neste tutorial, você aprenderá como:

Pré-requisitos

  • Um terminal
  • vcpkg
  • Um feed de pacote NuGet ou, se você não tiver, uma conta do Azure DevOps para acompanhar
  • Um terminal
  • vcpkg
  • Um feed de pacote NuGet ou, se você não tiver, uma conta do Azure DevOps para acompanhar
  • O mono pacote instalado em seu sistema

1 – Configurar um feed NuGet

Ignore esta etapa se você já tiver um feed de pacotes NuGet existente.

Siga as instruções para configurar um feed NuGet do Azure Artifacts.

Você também pode usar qualquer outro provedor de feed de pacotes NuGet de sua escolha.

2 – Adicionar uma fonte NuGet

Observação

No Linux, você precisa mono executar nuget.exeo . Você pode instalar mono usando o gerenciador de pacotes do sistema da sua distribuição.

O vcpkg adquire sua própria cópia do executável que ele usa durante as nuget.exe operações de cache binário. Este tutorial usa o arquivo .nuget.exe O vcpkg fetch nuget comando gera a localização do vcpkg-acquired nuget.exe, baixando o executável, se necessário.

Execute o comando a seguir para adicionar seu feed NuGet como uma fonte, substitua <feed name> por qualquer nome de sua escolha e <feed url> pela URL para seu feed NuGet.

.$(vcpkg fetch nuget) sources add -Name <feed name> -Source <feed url>

Execute o comando abaixo para buscar o caminho para o executável NuGet:

vcpkg fetch nuget

Isso fornecerá uma saída semelhante a C:\path\to\nuget.exe. Anote esse caminho. Usando o caminho obtido na etapa anterior, execute o seguinte comando:

C:\path\to\nuget.exe sources add -Name <feed name> -Source <feed url>
mono `vcpkg fetch nuget | tail -n 1` sources add -Name <feed name> -Source <feed url>

Forneça uma chave de API

Alguns provedores exigem que você envie seus pacotes NuGet por push para o feed usando uma chave de API. Por exemplo, o GitHub Packages requer um GitHub PAT (Personal Access Token) como a chave de API; se você estiver usando o Azure Artifacts, a chave de API será AzureDevOps .

Use o comando a seguir para definir a chave de API para todos os pacotes enviados por push para o feed NuGet, substitua <apiKey> pela chave de API do feed.

.$(vcpkg fetch nuget) setapikey <apikey> -Source <feed url>

Execute o comando abaixo para buscar o caminho para o executável NuGet:

vcpkg fetch nuget

Isso fornecerá uma saída semelhante a C:\path\to\nuget.exe. Anote esse caminho. Usando o caminho obtido na etapa anterior, execute o seguinte comando:

C:\path\to\nuget.exe setapikey <apikey> -Source <feed url>
mono `vcpkg fetch nuget | tail -n 1` sources setapikey <apiKey> -Source <feed url>

Fornecer credenciais de autenticação

Seu feed NuGet pode exigir autenticação para permitir que você baixe e carregue pacotes. Se for esse o caso, você pode fornecer credenciais adicionando-as como parâmetros ao nuget sources add comando.

Por exemplo:

nuget sources add -Name my-packages -Source https://my.nuget.feed/vcpkg-cache/index.json -UserName myusername -Password mypassword -StorePasswordInClearText

Alguns provedores, como o Azure Artifacts, podem exigir métodos de autenticação diferentes, leia o artigo Autenticar em feeds NuGet privados para saber mais.

Usar um nuget.config arquivo

Como alternativa, você pode usar um nuget.config arquivo para configurar suas fontes NuGet, seguindo o modelo abaixo:

nuget.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="defaultPushSource" value="<feed url>" />
  </config>
  <apiKeys>
    <add key="<feed url>" value="<apikey>" />
  </apiKeys>
  <packageSources>
    <clear />
    <add  key="<feed name>" value="<feed url>" />
  </packageSources>
  <packageSourcesCredentials>
    <<feed name>>
      <add key="Username" value="<username>" />
      <add key="Password" value="<password>" />
    </<feed name>>
  </packageSourcesCredentials>
</configuration>

Exemplo de arquivo nuget.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="defaultPushSource" value="https://contoso.org/packages/" />
  </config>
  <apikeys>
    <add key="https://contoso.org/packages/" value="encrypted_api_key" />
  </apikeys>
  <packageSources>
    <clear />
    <add key="Contoso" value="https://contoso.org/packages/" />
  </packageSources>
  <packageSourcesCredentials>
    <Contoso>
      <add key="Username" value="user" />
      <add key="Password" value="..." />
    </Contoso>
  </packageSourcesCredentials>
</configuration>

O vcpkg requer que você defina um defaultPushSource em seu nuget.config arquivo, use a URL do feed NuGet como a fonte padrão para enviar pacotes binários por push.

Se você estiver carregando seus pacotes em um feed NuGet do Azure Artifacts, use AzureDevOps como a chave de API da fonte executando nuget setApiKey AzureDevOps -Source <feed url> -ConfigFile <path to nuget.config>. Caso contrário, substitua o valor pela chave de API adequada do seu feed, se você tiver uma.

Adicione a <clear /> origem para ignorar outros valores configurados anteriormente. Se desejar, você pode definir várias fontes neste arquivo, use uma <add key="<feed name>" value="<feed url>" /> entrada para cada fonte.

Execute o seguinte comando para adicionar uma fonte NuGet usando um nuget.config arquivo, substitua <path to nuget.config> pelo caminho para o nuget.config arquivo:

.$(vcpkg fetch nuget) sources add -ConfigFile <path to nuget.config>

Execute o comando abaixo para buscar o caminho para o executável NuGet:

vcpkg fetch nuget

Isso fornecerá uma saída semelhante a C:\path\to\nuget.exe. Anote esse caminho. Usando o caminho obtido na etapa anterior, execute o seguinte comando:

C:\path\to\nuget.exe sources add -ConfigFile <path to nuget.config>
mono `vcpkg fetch nuget | tail -n 1` sources add -ConfigFile <path to nuget.config>

3 – Configurar vcpkg para usar seu feed NuGet

Defina a variável de VCPKG_BINARY_SOURCES ambiente da seguinte maneira:

$env:VCPKG_BINARY_SOURCES="clear;nuget,<feed url>,readwrite"

Se você estiver usando um nuget.config arquivo, faça:

$env:VCPKG_BINARY_SOURCES="clear;nugetconfig,<path to nuget.config>"
set "VCPKG_BINARY_SOURCES=clear;nuget,<feed url>,readwrite"

Se você estiver usando um nuget.config arquivo, faça:

set "VCPKG_BINARY_SOURCES=clear;nugetconfig,<path to nuget.config>"

Observação

A configuração VCPKG_BINARY_SOURCES usando o export comando afetará apenas a sessão atual do shell. Para tornar essa alteração permanente entre as sessões, você precisará adicionar o export comando ao script de perfil do seu shell (por exemplo, ~/.bashrc ou ~/.zshrc).

export VCPKG_BINARY_SOURCES="clear;nuget,<feed url>,readwrite"

Se você estiver usando um nuget.config arquivo, faça:

export VCPKG_BINARY_SOURCES="clear;nugetconfig,<path to nuget.config>"

Pronto! O vcpkg agora carregará ou restaurará pacotes do feed NuGet.

Próximas etapas

Aqui estão outras tarefas para tentar a seguir: