共用方式為


遠程驗證

登錄vcpkg_from_git() 直接使用 Git 命令行工具來擷取遠端資源。 其中有些資源可能會受到保護,以免匿名存取,而且需要驗證或認證。

下列策略全都尋求達成相同的基本目標:git clone https://.... 應該在沒有互動的情況下成功。 這可讓 vcpkg 與驗證配置的特定內容分開,確保未來與任何其他安全性改進的向前相容性。

預先設定 Git 認證

您可以透過 git credential approve預先植入 git 認證:

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_VARSVCPKG_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() 並建議使用上述的預先植入方法。

傳遞 Jenkins gitUsernamePassword 認證

從 Jenkins 對 GitHub 進行 Git 身份驗證的最簡單且最安全的選擇是使用 GitHub App 和以下操作:

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

這會設定 GIT_ASKPASS 的路徑為協助程式腳本,該腳本會回應 git 認證查詢,並指示 vcpkg 保留這個環境變數。 密碼是具有 1 小時存留期 GitHub 應用程式令牌。