Compartilhar via


Autenticação remota

Os registros e vcpkg_from_git() usam diretamente as ferramentas de linha de comando do Git para buscar recursos remotos. Alguns desses recursos podem ser protegidos contra acesso anônimo e precisam de autenticação ou credenciais.

As estratégias abaixo de todas buscam alcançar o mesmo objetivo fundamental: git clone https://.... deve ter êxito sem interação. Isso permite que o vcpkg seja separado das especificidades do esquema de autenticação, garantindo compatibilidade com quaisquer melhorias adicionais de segurança no futuro.

Credenciais do Git pré-propagação

Você pode pré-configurar credenciais do Git por meio 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

Autenticação do portador

Para sistemas que precisam de autenticação de portador, você pode usar git config:

Nota

Você deve fazer essas alterações de configuração com --global

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

O <uri> pode ser preenchido com uma variedade de opções, por exemplo, https://dev.azure.com/MYORG/. Para obter mais detalhes, consulte a documentação do git config.

(Fonte original em: Melhor maneira de autenticar em um repositório git em um processo de compilação).

Usuários do Azure DevOps: Talvez seja necessário habilitar o acesso por meio do escopo de autorização do trabalho e fazer referência ao repositório em seu pipeline do yaml:

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

...

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

Usando VCPKG_KEEP_ENV_VARS ou VCPKG_ENV_PASSTHROUGH_UNTRACKED, você pode passar credenciais por meio do ambiente.

export VCPKG_KEEP_ENV_VARS=MY_TOKEN_VAR
export MY_TOKEN_VAR=abc123

Em seguida, isso pode ser usado em suas portas privadas com os auxiliares vcpkg_from_git(), vcpkg_from_github() ou 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}"
)

Para portas privadas, recomendamos usar vcpkg_from_git() em vez de vcpkg_from_github()/vcpkg_from_gitlab() e o método de pré-configuração acima.

Passar as credenciais de GitUsernamePassword do Jenkins

A opção mais simples e segura para autenticação do Git no GitHub a partir do Jenkins é usar o Aplicativo GitHub e o seguinte:

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

Isso define o GIT_ASKPASS com um caminho para o script auxiliar que responde uma consulta de credenciais do Git e instrui o vcpkg a manter essa variável de ambiente. A senha é um token de aplicativo do GitHub com tempo de vida de 1 hora.