Поделиться через


Руководство. Настройка двоичного кэша vcpkg с помощью веб-канала NuGet

Примечание.

В этом руководстве используется веб-канал NuGet, размещенный в Azure Artifacts, но те же инструкции можно использовать для других поставщиков веб-каналов NuGet, например: пакеты GitHub с некоторыми изменениями.

vcpkg поддерживает использование веб-каналов пакетов NuGet для отправки и восстановления двоичных пакетов удобным способом.

Веб-каналы пакетов NuGet имеют возможности управления доступом, которые делают их идеальными для ограничения доступа к ресурсам в организации или рабочей группе. Веб-каналы NuGet поддерживаются несколькими поставщиками облачных хранилищ, такими как, azure Artifacts и реестр пакетов GitHub.

Из этого руководства вы узнаете, как выполнять следующие задачи:

Необходимые компоненты

  • Терминал
  • vcpkg
  • Веб-канал пакетов NuGet или если вы этого не сделали, учетная запись Azure DevOps, которую необходимо выполнить вместе
  • Терминал
  • vcpkg
  • Веб-канал пакетов NuGet или если вы этого не сделали, учетная запись Azure DevOps, которую необходимо выполнить вместе
  • Пакет, установленный в системе mono

1. Настройка веб-канала NuGet

Пропустите этот шаг, если у вас уже есть веб-канал пакетов NuGet.

Следуйте инструкциям по настройке веб-канала NuGet Azure Artifacts.

Вы также можете использовать любой другой поставщик веб-канала пакетов NuGet по своему усмотрению.

2. Добавление источника NuGet

Примечание.

В Linux необходимо mono выполнить nuget.exe. Вы можете установить mono с помощью системного диспетчера пакетов дистрибутива.

vcpkg получает собственную копию исполняемого nuget.exe файла, который он использует во время двоичных операций кэширования. В этом руководстве используется nuget.exeприобретенный vcpkg. Команда vcpkg fetch nuget выводит расположение приобретенного nuget.exevcpkg, скачивая исполняемый файл при необходимости.

Выполните следующую команду, чтобы добавить веб-канал NuGet в качестве источника, замените <feed name> любое имя выбранного веб-канала и <feed url> URL-адресом веб-канала NuGet.

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

Выполните следующую команду, чтобы получить путь к исполняемому файлу NuGet:

vcpkg fetch nuget

Это обеспечит выходные данные, которые выглядят примерно так C:\path\to\nuget.exe. Запишите этот путь. Используя путь, полученный на предыдущем шаге, выполните следующую команду:

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>

Предоставление ключа API

Для некоторых поставщиков требуется отправить пакеты NuGet в веб-канал с помощью ключа API. Например, для пакетов GitHub требуется GitHub PAT (личный маркер доступа) в качестве ключа API; Если вы используете Azure Artifacts, то вместо этого используется AzureDevOps ключ API.

Используйте следующую команду, чтобы задать ключ API для всех пакетов, отправленных в веб-канал NuGet, замените <apiKey> ключОМ API веб-канала.

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

Выполните следующую команду, чтобы получить путь к исполняемому файлу NuGet:

vcpkg fetch nuget

Это обеспечит выходные данные, которые выглядят примерно так C:\path\to\nuget.exe. Запишите этот путь. Используя путь, полученный на предыдущем шаге, выполните следующую команду:

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

Предоставление учетных данных для аутентификации

Веб-канал NuGet может потребовать проверки подлинности, чтобы вы могли скачать и отправить пакеты. Если это так, вы можете предоставить учетные данные, добавив их в качестве параметров в nuget sources add команду.

Например:

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

Некоторым поставщикам, таким как Артефакты Azure, могут потребоваться различные методы проверки подлинности, ознакомьтесь со статьей "Проверка подлинности в частных веб-каналах NuGet", чтобы узнать больше.

nuget.config Использование файла

Кроме того, вы можете использовать nuget.config файл для настройки источников NuGet, следуя следующему шаблону:

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>

Пример файла 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>

vcpkg требует, чтобы вы установили defaultPushSource в nuget.config файле URL-адрес веб-канала NuGet в качестве источника по умолчанию для отправки двоичных пакетов.

Если вы отправляете пакеты в веб-канал NuGet Azure Artifacts, используйте AzureDevOps его в качестве ключа API источника, выполнив команду nuget setApiKey AzureDevOps -Source <feed url> -ConfigFile <path to nuget.config>. В противном случае замените значение соответствующим ключом API веб-канала, если у вас есть.

Добавьте источник, <clear /> чтобы игнорировать другие ранее настроенные значения. Если вы хотите, можно определить несколько источников в этом файле, используйте <add key="<feed name>" value="<feed url>" /> запись для каждого источника.

Выполните следующую команду, чтобы добавить источник NuGet с помощью nuget.config файла, замените <path to nuget.config> путь к nuget.config файлу:

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

Выполните следующую команду, чтобы получить путь к исполняемому файлу NuGet:

vcpkg fetch nuget

Это обеспечит выходные данные, которые выглядят примерно так C:\path\to\nuget.exe. Запишите этот путь. Используя путь, полученный на предыдущем шаге, выполните следующую команду:

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. Настройка vcpkg для использования веб-канала NuGet

VCPKG_BINARY_SOURCES Задайте переменную среды следующим образом:

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

Если вы используете nuget.config файл, вместо этого сделайте следующее:

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

Если вы используете nuget.config файл, вместо этого сделайте следующее:

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

Примечание.

Установка VCPKG_BINARY_SOURCES с помощью export команды влияет только на текущий сеанс оболочки. Чтобы сделать это изменение постоянным в сеансах, необходимо добавить export команду в скрипт профиля оболочки (например, ~/.bashrc или ~/.zshrc).

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

Если вы используете nuget.config файл, вместо этого сделайте следующее:

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

Вот и все! vcpkg теперь будет отправлять или восстанавливать пакеты из веб-канала NuGet.

Следующие шаги

Ниже приведены другие задачи, которые необходимо выполнить следующим образом: