Uwierzytelnianie zdalne
rejestry i vcpkg_from_git()
bezpośrednio pobierają zasoby zdalne za pomocą narzędzi wiersza poleceń Git. Niektóre z tych zasobów mogą być chronione przed dostępem anonimowym i wymagają uwierzytelniania lub poświadczeń.
Poniżej przedstawiono strategie mające na celu osiągnięcie tego samego podstawowego celu: git clone https://....
powinno odnieść sukces bez interakcji. Dzięki temu program vcpkg może być oddzielony od specyfiki schematu uwierzytelniania, zapewniając zgodność z dodatkowymi ulepszeniami zabezpieczeń w przyszłości.
Poświadczenia Git na etapie przed-wstępnym
Poświadczenia Git można przygotować wcześniej za pomocą 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
Uwierzytelnianie elementu nośnego
W przypadku systemów, które wymagają uwierzytelniania nosiciela, można użyć git config
:
Notatka
Te zmiany konfiguracji należy wprowadzić przy użyciu --global
git config --global --unset-all http.<uri>.extraheader
git config --global http.<uri>.extraheader "AUTHORIZATION: bearer <System_AccessToken>"
<uri>
można wypełnić różnymi opcjami, na przykład https://dev.azure.com/MYORG/
. Aby uzyskać więcej informacji, zobacz dokumentację git config
.
(Oryginalne źródło w: najlepszy sposób uwierzytelniania w repozytorium Git podczas procesu budowy).
użytkownicy usługi Azure DevOps: Może być konieczne włączenie dostępu za pośrednictwem zakresu autoryzacji zadań i odwołanie się do repozytorium w potoku YAML:
resources:
repositories:
- repository: <FRIENDLYNAME>
type: git
name: <ORG>/<REPO>
tag: tags/<TAG>
...
jobs:
- job: Build
uses:
repositories: [<FRIENDLYNAME>]
Przekazywanie poświadczeń w zmiennej środowiskowej (niezalecane)
Za pomocą VCPKG_KEEP_ENV_VARS
lub VCPKG_ENV_PASSTHROUGH_UNTRACKED
można przekazać poświadczenia za pośrednictwem środowiska.
export VCPKG_KEEP_ENV_VARS=MY_TOKEN_VAR
export MY_TOKEN_VAR=abc123
Można go następnie użyć na prywatnych portach za pomocą pomocników vcpkg_from_git()
, vcpkg_from_github()
lub 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}"
)
W przypadku portów prywatnych zalecamy użycie vcpkg_from_git()
zamiast vcpkg_from_github()/vcpkg_from_gitlab()
oraz powyższej metody przygotowania.
Przekaż poświadczenia Jenkins gitUsernamePassword
Najprostszą i najbezpieczniejszą opcją uwierzytelniania do GitHub z Jenkins jest użycie aplikacji GitHub oraz następujących elementów:
withCredentials([gitUsernamePassword(credentialsId: 'jenkins-github-app')]) {
withEnv(['VCPKG_KEEP_ENV_VARS=GIT_ASKPASS']) {
bat 'cmake'
}
}
Spowoduje to ustawienie GIT_ASKPASS
z ścieżką do skryptu pomocniczego, który odpowiada na zapytanie o poświadczenia git i poleca vcpkg
zachować tę zmienną środowiskową. Hasło to token aplikacji GitHub z żywotnością 1 godziny.