Git Credential Manager для Windows и учетные данные в файле
Как я могу заставить Git Credential Manager (GCM) считывать учетные данные из файла для URL-адресов HTTPS Git? Это нужно нам для того, чтобы упростить автоматические операции клонирования для заданий Jenkins.
Фон
Мы успешно использовали store
хранилище учетных данных в Git 1.7 в Windows перед обновлением до Git для Windows v2.9.0. Теперь CGM всегда запрашивает учетные данные, вызывающие зависание сборки Jenkins.
Я заметил, что в документах GCM упоминается credential.interactive never
установка, но как я могу сказать ему, из какого файла считывать учетные данные? И какой формат он ожидает в этом файле?
1 ответ
После запроса на странице проблем GCM Github выясняется, что GCM не поддерживает чтение учетных данных из файла.
Но моя цель состоит в том, чтобы разрешить неинтерактивное заполнение учетных данных, и оно поддерживает программное добавление учетных данных в хранилище учетных данных Windows, которое GCM использует под капотом. Используя связанные библиотеки ( здесь исполняемые файлы), я смог собрать сценарий Powershell, который позволял нам добавлять учетные данные во время подготовки машины Chef:
Add-Type -Path 'c:\path\to\gcm-v1.4.0\Microsoft.Alm.Authentication.dll'
$credentials = New-Object -TypeName Microsoft.Alm.Authentication.Credential('someuser', 'secret')
$targetUri = New-Object -TypeName Microsoft.Alm.Authentication.TargetUri('https://git.example.com/projects')
$namespace = "git"
$secretStore = New-Object -TypeName Microsoft.Alm.Authentication.SecretStore($namespace, $null, $null, $null)
$foundCredentials = $null
$secretStore.ReadCredentials($targetUri, [ref] $foundCredentials)
if ($foundCredentials -ne $null) {
echo "Credentials already found, not inserting"
} else {
echo "Inserting stored credentials"
$secretStore.WriteCredentials($targetUri, $credentials)
}
Это позволяет подчиненному Jenkins выполнять клоны Git без взаимодействия с пользователем.
Примечание. Вам нужно будет запустить скрипт Powershell с "неограниченной" политикой выполнения, а также разблокировать библиотеки DLL, включенные в GCM, в противном случае они не будут загружаться.