Remoteauthentifizierung
Registries und vcpkg_from_git()
verwenden die Git-Befehlszeilenwerkzeuge direkt, um Remoteressourcen abzurufen. Einige dieser Ressourcen sind möglicherweise vor anonymen Zugriffen geschützt und benötigen eine Authentifizierung oder Anmeldeinformationen.
Die unten stehenden Strategien versuchen, dasselbe grundlegende Ziel zu erreichen: git clone https://....
sollte ohne Interaktion erfolgreich sein. Dadurch kann vcpkg von den Besonderheiten Ihres Authentifizierungsschemas getrennt werden, wodurch die Vorwärtskompatibilität mit weiteren Sicherheitsverbesserungen in Zukunft sichergestellt wird.
Vorab-Seeding auf Git-Anmeldedaten
Sie können auf Git-Anmeldeinformationen über git credential approve
ein Vorab-Seeding durchführen:
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
Bearer-Authentifizierung
Für Systeme, die Bearerauthentifizierung benötigen, können Sie git config
verwenden:
Anmerkung
Sie müssen diese Konfigurationsänderungen mit --global
vornehmen
git config --global --unset-all http.<uri>.extraheader
git config --global http.<uri>.extraheader "AUTHORIZATION: bearer <System_AccessToken>"
Die <uri>
kann mit einer Vielzahl von Optionen gefüllt werden, z. B. https://dev.azure.com/MYORG/
. Weitere Informationen finden Sie in der git config
Dokumentation.
(Ursprüngliche Quelle in: Beste Methode zur Authentifizierung bei einem Git-Repository in einem Buildprozess).
Azure DevOps-Benutzer: Möglicherweise müssen Sie den Zugriff über Auftragsautorisierungsbereich aktivieren und auf das Repository in Ihrer Yaml-Pipeline verweisen:
resources:
repositories:
- repository: <FRIENDLYNAME>
type: git
name: <ORG>/<REPO>
tag: tags/<TAG>
...
jobs:
- job: Build
uses:
repositories: [<FRIENDLYNAME>]
Übergeben von Anmeldeinformationen in einer Umgebungsvariable (nicht empfohlen)
Sie können VCPKG_KEEP_ENV_VARS
oder VCPKG_ENV_PASSTHROUGH_UNTRACKED
verwenden, um Anmeldeinformationen über die Umgebung zu übergeben.
export VCPKG_KEEP_ENV_VARS=MY_TOKEN_VAR
export MY_TOKEN_VAR=abc123
Diese können dann in Ihren privaten Ports mit den vcpkg_from_git()
-, vcpkg_from_github()
- oder vcpkg_from_gitlab()
-Hilfsprogrammen verwendet werden.
# 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}"
)
Für private Ports empfehlen wir die Verwendung von vcpkg_from_git()
anstelle von vcpkg_from_github()/vcpkg_from_gitlab()
und der oben beschriebenen Vor-Seeding-Methode.
Übergeben von Jenkins-gitUsernamePassword-Anmeldeinformationen
Für eine einfache und sichere Git-Authentifizierung bei GitHub über Jenkins verwenden Sie GitHub-App und Folgendes:
withCredentials([gitUsernamePassword(credentialsId: 'jenkins-github-app')]) {
withEnv(['VCPKG_KEEP_ENV_VARS=GIT_ASKPASS']) {
bat 'cmake'
}
}
Dadurch wird die GIT_ASKPASS
mit einem Pfad zu einem Hilfsskript festgelegt, das auf Abfragen nach Git-Anmeldedaten reagiert und vcpkg
anweist, diese Umgebungsvariable beizubehalten. Das Kennwort ist ein GitHub-App-Token mit einer Lebensdauer von 1 Stunde.