如何让Git Credential Manager(GCM)从HTTPS Git URL的文件中读取凭据?我们需要这个来促进Jenkins作业的自动克隆操作。
背景
在升级到Git for Windows v2.9.0之前,我们已成功在Windows上的Git 1.7中使用store
凭据存储。现在,CGM总是要求提供凭证,导致Jenkins构建挂起。
我注意到GCM docs提到了credential.interactive never
设置但是如何告诉它从哪个文件中读取凭据?它在该文件中的格式是什么?
答案 0 :(得分:1)
asking on the GCM Github issues page后发现GCM不支持从文件中读取凭证。
但我的目标是允许非交互式凭据,并且它支持以编程方式将凭据添加到GCM使用的Windows凭据存储中。通过使用bundled libraries(binaries here),我能够组合一个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 slave在没有用户交互的情况下执行Git克隆。
注意:您需要运行带有“Unrestricted”执行策略的Powershell脚本以及unblock GCM中包含的DLL,否则它们将无法加载。