繁体   English   中英

如何使用 PowerShell 任务 (git clone) 在 Azure DevOps Server 发布管道中运行 Git 命令

[英]How to run Git commands in Azure DevOps Server release pipeline using PowerShell tasks (git clone)

我正在尝试通过 Azure DevOps 服务器中的 PowerShell 任务执行 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 clone命令无法访问令牌并且它不断要求提供凭据。 我还测试了git checkout ,它看起来工作正常。 问题主要出现在clone命令上。

经过多次尝试和尝试不同的解决方案后,我设法使它起作用。 作为第一步,正如我在问题中提到的,我启用了代理中的选项以允许脚本检索 OAuth 令牌。

在此处输入图片说明

这看起来还不够,因为它还需要在请求中传递令牌。 为了做到这一点,我应用了以下更改:

  1. 我在git clone之前更改了存储库的 URL。 最初的 URL 是这样的:
     $wikiRawUrl = 'https://azure-devops-server/tfs/Common/MainProject/_git/MainProject.wiki'
    新的是这个:
     $wikiRawUrl = 'https://azure-devops-server/tfs/Common/MainProject/_git/MainProject.wiki' $url = "$($wikiRawUrl)".Replace("https://", "") $wikiUrl = "https://$($env:SYSTEM_ACCESSTOKEN)@$url"
    它在存储库的 URL 前面添加了访问令牌env:SYSTEM_ACCESSTOKEN

  1. 我在我的 git 命令中添加了额外的参数,以便再次将访问令牌作为额外的标头传递给它们。 此外,为了确保我们本地提供的证书不会有任何问题,我还明确地将 https.sslbackend 应用于 schannel(这部分取自 Azure DevOps 发布管道的逆向工程本机任务)。 因此,最初的命令是这些:

     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

    新的是这些:

     git -c http.extraheader="AUTHORIZATION: bearer $($env:SYSTEM_ACCESSTOKEN)" -c http.sslbackend="schannel" clone $wikiUrl $tmpDirName --depth 1 # Editing files content git -C $tmpDirName -c http.extraheader="AUTHORIZATION: bearer $($env:SYSTEM_ACCESSTOKEN)" -c http.sslbackend="schannel" add $statusPageRepoPath git -C $tmpDirName -c http.extraheader="AUTHORIZATION: bearer $($env:SYSTEM_ACCESSTOKEN)" -c http.sslbackend="schannel" commit -m 'update status page' git -C $tmpDirName -c http.extraheader="AUTHORIZATION: bearer $($env:SYSTEM_ACCESSTOKEN)" -c http.sslbackend="schannel" push

上述所有更改都运行良好,最后我能够在 PowerShell 中毫无问题地使用 git 命令。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM