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


Удаленная проверка подлинности

реестры и vcpkg_from_git() напрямую используют средства командной строки Git для получения удаленных ресурсов. Некоторые из этих ресурсов могут быть защищены от анонимного доступа и нуждаются в проверке подлинности или учетных данных.

Стратегии, приведенные ниже, стремятся достичь одной и той же основной цели: git clone https://.... должен быть успешным без взаимодействия. Это позволяет отделять vcpkg от конкретных особенностей вашей схемы аутентификации, обеспечивая совместимость с любыми дополнительными улучшениями безопасности в будущем.

Предварительные учетные данные Git

Учетные данные Git можно предварительно заполнить с помощью git credential approve:

Powershell:

"url=https://github.com`npath=Microsoft/vcpkg`nusername=unused`npassword=$MY_PAT`n" | git credential approve

Bash:

echo "url=https://github.com"$'\n'"path=Microsoft/vcpkg"$'\n'"username=unused"$'\n'"password=$MY_PAT"$'\n' | git credential approve

Проверка подлинности носителя

Для систем, которым требуется проверка подлинности носителя, можно использовать git config:

Заметка

Эти изменения конфигурации необходимо внести с помощью --global

git config --global --unset-all http.<uri>.extraheader
git config --global http.<uri>.extraheader "AUTHORIZATION: bearer <System_AccessToken>"

<uri> можно заполнить различными вариантами, например https://dev.azure.com/MYORG/. Дополнительные сведения см. в документации git config.

(Исходный источник: Лучший способ проверки подлинности в репозитории Git в процессе сборки).

пользователям Azure DevOps: Вам может понадобиться включить доступ через зону авторизации задания и ссылаться на репозиторий в YAML-конвейере:

resources: 
  repositories:
    - repository: <FRIENDLYNAME>
      type: git
      name: <ORG>/<REPO>
      tag: tags/<TAG>

...

jobs:
 - job: Build
   uses:
     repositories: [<FRIENDLYNAME>]

С помощью VCPKG_KEEP_ENV_VARS или VCPKG_ENV_PASSTHROUGH_UNTRACKEDможно передать учетные данные через среду.

export VCPKG_KEEP_ENV_VARS=MY_TOKEN_VAR
export MY_TOKEN_VAR=abc123

Затем его можно использовать в частных портах с помощниками vcpkg_from_git(), vcpkg_from_github() или vcpkg_from_gitlab().

# vcpkg-from-git-example/portfile.cmake
set(MY_TOKEN_VAR "")
if(DEFINED ENV{MY_TOKEN_VAR})
    set(MY_TOKEN_VAR "$ENV{MY_TOKEN_VAR}@")
endif()
vcpkg_from_git(
    URLS "https://${MY_TOKEN_VAR}host.com/normal/url/path"
    ...
)
# vcpkg-from-github-example/portfile.cmake
vcpkg_from_github(
    AUTHORIZATION_TOKEN "$ENV{MY_TOKEN_VAR}"
)

Для частных портов рекомендуется использовать vcpkg_from_git() вместо vcpkg_from_github()/vcpkg_from_gitlab() и вышеупомянутого метода предварительного заполнения.

Передача учетных данных gitUsernamePassword для Jenkins

Самый простой и безопасный вариант аутентификации Git на GitHub из Jenkins — это использование приложения GitHub и следующее:

withCredentials([gitUsernamePassword(credentialsId: 'jenkins-github-app')]) {
  withEnv(['VCPKG_KEEP_ENV_VARS=GIT_ASKPASS']) {
    bat 'cmake'
  }
}

Это задает GIT_ASKPASS с указанием пути к вспомогательному скрипту, который отвечает на запрос учетных данных Git и указывает vcpkg сохранить эту переменную окружения. Пароль — это маркер приложения GitHub с 1 часовым временем существования.