Compartir a través de


Autenticación remota

Registra y vcpkg_from_git() usa directamente las herramientas de línea de comandos de Git para capturar recursos remotos. Algunos de estos recursos pueden protegerse del acceso anónimo y necesitan autenticación o credenciales.

Las estrategias siguientes buscan lograr el mismo objetivo fundamental: git clone https://.... debe tener éxito sin interacción. Esto permite separar vcpkg de los detalles del esquema de autenticación, lo que garantiza la compatibilidad directa con las mejoras de seguridad adicionales en el futuro.

Credenciales de Git de inicialización previa

Puede inicializar previamente las credenciales de Git a través de 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

Autenticación de portador

Para los sistemas que necesitan autenticación de portador, puede usar git config:

Nota:

Debe realizar estos cambios de configuración con --global

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

<uri> se puede rellenar con una variedad de opciones, por ejemplohttps://dev.azure.com/MYORG/. Para obtener más información, consulte la git config documentación.

(Origen original en: Mejor manera de autenticarse en un repositorio git en un proceso de compilación).

Usuarios de Azure DevOps: es posible que tenga que habilitar el acceso a través del ámbito de autorización del trabajo y hacer referencia al repositorio en la canalización de yaml:

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

...

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

Con VCPKG_KEEP_ENV_VARS o VCPKG_ENV_PASSTHROUGH_UNTRACKED, puede pasar las credenciales en a través del entorno.

export VCPKG_KEEP_ENV_VARS=MY_TOKEN_VAR
export MY_TOKEN_VAR=abc123

Después, se puede usar en los puertos privados con losvcpkg_from_git() asistentes p 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}"
)

En el caso de los puertos privados, se recomienda usar vcpkg_from_git() en lugar de vcpkg_from_github() y el método de propagación anterior.

Pasar las credenciales gitUsernamePassword de Jenkins

La opción más sencilla y segura para la autenticación de Git en GitHub desde Jenkins es usar la aplicación de GitHub y lo siguiente:

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

Esto establece con GIT_ASKPASS una ruta de acceso al script auxiliar que responde con la consulta de credenciales de Git e indica vcpkg que mantenga esta variable de entorno. La contraseña es un token de aplicación de GitHub con una duración de 1 hora.