Condividi tramite


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>]

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.