Bagikan melalui


Autentikasi jarak jauh

Registri dan vcpkg_from_git() langsung menggunakan alat baris perintah Git untuk mengambil sumber daya jarak jauh. Beberapa sumber daya ini mungkin dilindungi dari akses anonim dan memerlukan autentikasi atau kredensial.

Strategi di bawah ini berusaha mencapai tujuan mendasar yang sama: git clone https://.... harus berhasil tanpa interaksi. Ini memungkinkan vcpkg dipisahkan dari spesifikasi skema autentikasi Anda, memastikan kompatibilitas ke depan dengan peningkatan keamanan tambahan di masa mendatang.

Info masuk git pra-seed

Anda dapat menyetel terlebih dahulu kredensial git melalui 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

Autentikasi pembawa

Untuk sistem yang membutuhkan autentikasi pembawa, Anda dapat menggunakan git config:

Nota

Anda harus membuat perubahan konfigurasi ini dengan --global

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

<uri> dapat diisi dengan berbagai opsi, misalnya https://dev.azure.com/MYORG/. Untuk detail selengkapnya, lihat dokumentasi git config.

(Sumber asli dalam: Cara terbaik untuk mengautentikasi terhadap repositori git dalam proses build).

pengguna Azure DevOps: Anda mungkin perlu mengaktifkan akses melalui cakupan otorisasi tugas dan merujuk repositori di alur yaml Anda:

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

...

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

Menggunakan VCPKG_KEEP_ENV_VARS atau VCPKG_ENV_PASSTHROUGH_UNTRACKED, Anda dapat meneruskan kredensial melalui lingkungan sistem.

export VCPKG_KEEP_ENV_VARS=MY_TOKEN_VAR
export MY_TOKEN_VAR=abc123

Ini kemudian dapat digunakan di port privat Anda dengan bantuan vcpkg_from_git(), vcpkg_from_github(), atau 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}"
)

Untuk port privat, sebaiknya gunakan vcpkg_from_git() alih-alih vcpkg_from_github()/vcpkg_from_gitlab() dan metode pra-penyemaian di atas.

Berikan kredensial Jenkins gitUsernamePassword

Opsi paling sederhana dan paling aman untuk autentikasi Git ke GitHub dari Jenkins menggunakan GitHub App dan yang berikut:

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

Ini mengatur GIT_ASKPASS dengan jalur ke skrip pembantu yang merespons dengan kueri kredensial git dan menginstruksikan vcpkg untuk menyimpan variabel lingkungan ini. Kata sandi adalah token Aplikasi GitHub dengan masa pakai 1 jam.