适用于Windows的Git Credential Manager和文件中的凭据

时间:2016-06-23 03:59:43

标签: git jenkins git-credential-winstore

如何让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设置但是如何告诉它从哪个文件中读取凭据?它在该文件中的格式是什么?

1 个答案:

答案 0 :(得分:1)

asking on the GCM Github issues page后发现GCM不支持从文件中读取凭证。

但我的目标是允许非交互式凭据,并且它支持以编程方式将凭据添加到GCM使用的Windows凭据存储中。通过使用bundled librariesbinaries 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,否则它们将无法加载。