Autenticazione remota
I registri e vcpkg_from_git()
usano direttamente gli strumenti da riga di comando Git per recuperare le risorse remote. Alcune di queste risorse possono essere protette dall'accesso anonimo e richiedono l'autenticazione o le credenziali.
Le strategie seguenti cercano di raggiungere lo stesso obiettivo fondamentale: git clone https://....
dovrebbe avere successo senza interazione. Ciò consente di separare vcpkg dalle specifiche dello schema di autenticazione, garantendo la compatibilità con eventuali miglioramenti di sicurezza aggiuntivi in futuro.
Credenziali Git di pre-inizializzazione
È possibile pre-inizializzare le credenziali Git tramite 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
Autenticazione del bearer
Per i sistemi che richiedono l'autenticazione bearer, è possibile usare git config
:
Nota
È necessario apportare queste modifiche di configurazione con --global
git config --global --unset-all http.<uri>.extraheader
git config --global http.<uri>.extraheader "AUTHORIZATION: bearer <System_AccessToken>"
Può <uri>
essere compilato con un'ampia gamma di opzioni, ad esempio https://dev.azure.com/MYORG/
. Per altri dettagli, vedere la git config
documentazione.
(Origine originale in: Modo migliore per eseguire l'autenticazione in un repository Git in un processo di compilazione).
Utenti di Azure DevOps: potrebbe essere necessario abilitare l'accesso tramite ambito di autorizzazione processo e fare riferimento al repository nella pipeline yaml:
resources:
repositories:
- repository: <FRIENDLYNAME>
type: git
name: <ORG>/<REPO>
tag: tags/<TAG>
...
jobs:
- job: Build
uses:
repositories: [<FRIENDLYNAME>]
Passare le credenziali in una variabile di ambiente (scelta non consigliata)
Usando VCPKG_KEEP_ENV_VARS
o VCPKG_ENV_PASSTHROUGH_UNTRACKED
, è possibile passare le credenziali tramite l'ambiente .
export VCPKG_KEEP_ENV_VARS=MY_TOKEN_VAR
export MY_TOKEN_VAR=abc123
Questa operazione può quindi essere usata nelle porte private con gli helper pvcpkg_from_git()
o vcpkg_from_github()
.
# 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}"
)
Per le porte private, è consigliabile usare vcpkg_from_git()
anziché vcpkg_from_github()
e il metodo di pre-seeding precedente.
Passare le credenziali di Jenkins gitUsernamePassword
L'opzione più semplice e sicura per l'autenticazione Git in GitHub da Jenkins usa l'app GitHub e gli elementi seguenti:
withCredentials([gitUsernamePassword(credentialsId: 'jenkins-github-app')]) {
withEnv(['VCPKG_KEEP_ENV_VARS=GIT_ASKPASS']) {
bat 'cmake'
}
}
Viene impostato GIT_ASKPASS
con un percorso per lo script helper che risponde con la query delle credenziali Git e indica vcpkg
di mantenere questa variabile di ambiente. La password è un token dell'app GitHub con durata di 1 ora.