Partilhar via


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

Observação

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

vcpkg suporta o uso de feeds de pacotes NuGet para carregar e restaurar pacotes binários de uma 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 suportados por vários provedores de armazenamento em nuvem, como o Azure Artifacts e o registro de pacotes do GitHub.

Neste tutorial, você aprenderá a:

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 pacote mono instalado no seu sistema

1 - Configurar um feed do NuGet

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

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

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 de mono para executar nuget.exe. Você pode instalar mono usando o gerenciador de pacotes do sistema da sua distribuição.

vcpkg adquire a sua própria cópia do executável que usa durante operações de armazenamento em cache binário. Este tutorial usa o vcpkg-adquirido nuget.exe. O comando vcpkg fetch nuget exibe a localização do nuget.exe obtido pelo vcpkg, transferindo o executável, se necessário.

Execute o seguinte comando para adicionar seu feed NuGet como fonte, substitua <feed name> por qualquer nome de sua escolha e <feed url> pela URL do 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 do NuGet:

vcpkg fetch nuget

Isso fornecerá uma saída que se parece com C:\path\to\nuget.exe. Anote este 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>

Fornecer uma chave de API

Alguns provedores exigem que você envie seus pacotes NuGet para o feed usando uma chave de API. Por exemplo, os Pacotes GitHub requerem um PAT (Personal Access Token) do GitHub como chave de API; se você estiver usando Artefatos do Azure, a chave da API será AzureDevOps .

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

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

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

vcpkg fetch nuget

Isso fornecerá uma saída que se parece com C:\path\to\nuget.exe. Anote este 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` setapikey <apiKey> -Source <feed url>

Fornecer credenciais de autenticação

Seu feed do NuGet pode exigir autenticação para permitir que você baixe e carregue pacotes. Se esse for 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 os Artefatos do Azure podem exigir métodos de autenticação diferentes, leia o artigo Autenticar em feeds NuGet privados para saber mais.

Use um nuget.config ficheiro

Como alternativa, você pode usar um nuget.config arquivo para configurar seus códigos-fonte do 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>" disableTLSCertificateValidation="false" />
  </packageSources>
  <packageSourceCredentials>
    <<feed name>>
      <add key="Username" value="<username>" />
      <add key="ClearTextPassword" value="<password>" />
    </<feed name>>
  </packageSourceCredentials>
</configuration>

Exemplo nuget.config de ficheiro :

<?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/" disableTLSCertificateValidation="false" />
  </packageSources>
  <packageSourceCredentials>
    <Contoso>
      <add key="Username" value="user" />
      <add key="ClearTextPassword" value="..." />
    </Contoso>
  </packageSourceCredentials>
</configuration>

O vcpkg requer que o utilizador defina um defaultPushSource no seu arquivo nuget.config, utilizando a URL do seu feed NuGet como a fonte padrão para disponibilizar pacotes binários.

Se estiveres a carregar os teus pacotes num feed NuGet de Artefatos do Azure, usa AzureDevOps como Chave da API da tua origem e executa nuget setApiKey AzureDevOps -Source <feed url> -ConfigFile <path to nuget.config>. Caso contrário, substitua o valor pela chave de API adequada do feed, se tiver uma.

Se você estiver usando um certificado autoassinado, talvez seja necessário desabilitar a validação do certificado TLS. Esta opção só está disponível através da utilização de um ficheiro nuget.config .

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.

3 - Configure o vcpkg para usar seu feed do NuGet

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

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

Se estiveres a usar o ficheiro nuget.config, faz o seguinte:

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

Se estiveres a usar o ficheiro nuget.config, faz o seguinte:

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 de shell atual. Para tornar essa alteração permanente entre sessões, você precisará adicionar o export comando ao script de perfil do shell (por exemplo, ~/.bashrc ou ~/.zshrc).

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

Se estiveres a usar o ficheiro nuget.config, faz o seguinte:

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

E é isso! O vcpkg agora carregará ou restaurará pacotes do seu feed do NuGet.

Próximos passos

Aqui estão outras tarefas para tentar a seguir: