Dela via


Fjärrautentisering

Registries och vcpkg_from_git() använder direkt Git-kommandoradsverktyg för att hämta fjärrresurser. Vissa av dessa resurser kan skyddas från anonym åtkomst och behöver autentisering eller autentiseringsuppgifter.

Strategierna nedan syftar till att uppnå samma grundläggande mål: git clone https://.... bör lyckas utan interaktion. Detta gör att vcpkg kan separeras från detaljerna i ditt autentiseringsschema, vilket säkerställer vidarekompatibilitet med eventuella ytterligare säkerhetsförbättringar i framtiden.

Git-autentiseringsuppgifter före start

Du kan ange git-autentiseringsuppgifter i förväg via git credential approve:

PowerShell:

"url=https://github.com`npath=Microsoft/vcpkg`nusername=unused`npassword=$MY_PAT`n" | git credential approve

Våldsamt slag:

echo "url=https://github.com"$'\n'"path=Microsoft/vcpkg"$'\n'"username=unused"$'\n'"password=$MY_PAT"$'\n' | git credential approve

Bärareauthentisering

För system som behöver ägarautentisering kan du använda git config:

Notera

Du måste göra dessa konfigurationsändringar med --global

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

<uri> kan fyllas i med en mängd olika alternativ, till exempel https://dev.azure.com/MYORG/. Mer information finns i dokumentationen om git config.

(Ursprunglig källa i: Bästa sättet att autentisera mot en git-lagringsplats i en byggprocess).

Azure DevOps-användare: Du kan behöva aktivera åtkomst via Jobbauktoriseringsomfång och referera till lagringsplatsen i yaml-pipelinen:

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

...

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

Med hjälp av VCPKG_KEEP_ENV_VARS eller VCPKG_ENV_PASSTHROUGH_UNTRACKEDkan du skicka in autentiseringsuppgifter via miljön.

export VCPKG_KEEP_ENV_VARS=MY_TOKEN_VAR
export MY_TOKEN_VAR=abc123

Detta kan sedan användas i dina privata portar med hjälparna vcpkg_from_git(), vcpkg_from_github() eller 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}"
)

För privata portar rekommenderar vi att du använder vcpkg_from_git() i stället för vcpkg_from_github()/vcpkg_from_gitlab() och försåddningsmetoden ovan.

Skicka autentiseringsuppgifter för Jenkins gitUsernamePassword

Det enklaste och säkraste alternativet för Git-autentisering till GitHub från Jenkins är att använda GitHub App- och följande:

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

Detta anger GIT_ASKPASS med en sökväg till hjälpskript som svarar med git-autentiseringsuppgifter och instruerar vcpkg att behålla den här miljövariabeln. Lösenordet är en GitHub App-token med en timmes livslängd.