我试图在Azure DevOps服务器中通过DevOps任务执行git命令,并且面临身份验证问题。更具体的是,任务始终与错误代码1一起退出,因为它要求用户名和密码。我试图执行的git命令是:
$wikiUrl = 'https://azure-devops-server/tfs/Common/MainProject/_git/MainProject.wiki'
git clone $wikiUrl $tmpDirName --depth 1
# Editing files content
git -C $tmpDirName add $statusPageRepoPath
git -C $tmpDirName commit -m 'update status page'
git -C $tmpDirName push出于安全考虑,我不想添加用户名和密码作为参数。我感兴趣的是让它使用从执行中检索到的用户凭据,而不是显式定义的。
Microsoft推荐的解决方案是在代理中启用允许脚本访问OAuth令牌的选项。我已经启用了此选项,如下图所示,但仍然会出现相同的错误。

看起来,git克隆命令无法访问令牌,它一直在请求凭据。我还测试了git签出,它看起来工作正常。问题主要出现在克隆命令中。
发布于 2020-10-17 21:35:31
经过多次尝试和尝试不同的解决方案,我设法使它发挥作用。作为第一步,正如我在问题中提到的,我在代理中启用了允许脚本检索OAuth令牌的选项。

这看起来还不够,因为它还需要在请求中传递令牌。为了做到这一点,我应用了以下更改:
新的是:$wikiRawUrl = 'https://azure-devops-server/tfs/Common/MainProject/_git/MainProject.wiki‘$url = "$($wikiRawUrl)".Replace("https://",“) $wikiUrl = "https://$($env:SYSTEM_ACCESSTOKEN)@$url”
,它将访问令牌env:SYSTEM_ACCESSTOKEN添加到存储库的URL .前面。
git克隆$wikiUrl $tmpDirName -深度1#编辑文件内容git -C $tmpDirName添加$statusPageRepoPath git -C $tmpDirName提交-m‘更新状态页’git -C $tmpDirName推送
新的例子是:
git -C http.extraheader=授权:承载$($env:SYSTEM_ACCESSTOKEN)“-c http.sslbackend="schannel”克隆$wikiUrl $tmpDirName --深度1#编辑文件内容git -c $tmpDirName -c http.extraheader=“授权:承载$($env:SYSTEM_ACCESSTOKEN)”-c http.sslbackend="schannel“add $statusPageRepoPath git -C $tmpDirName $statusPageRepoPath$statusPageRepoPath git -c $tmpDirName $statusPageRepoPath”en25$()“commit 'update status‘git en24#http。Extraheader=“授权:无记名$($env:SYSTEM_ACCESSTOKEN)”-c http.sslbackend="schannel“push
所有上述更改都运行良好,最后我能够在PowerShell中使用git命令而没有任何问题。
https://stackoverflow.com/questions/64407588
复制相似问题