【问题标题】:How to run Git commands in Azure DevOps Server release pipeline using PowerShell tasks (git clone)如何使用 PowerShell 任务在 Azure DevOps Server 发布管道中运行 Git 命令(git clone)
【发布时间】:2020-10-17 21:35:31
【问题描述】:

我正在尝试通过 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 命令上。

【问题讨论】:

    标签: git powershell azure-devops


    【解决方案1】:

    经过多次尝试和尝试不同的解决方案后,我设法让它发挥作用。作为第一步,正如我在问题中提到的,我启用了代理中的选项以允许脚本检索 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"
      
      它将访问令牌 env:SYSTEM_ACCESSTOKEN 添加到存储库的 URL 前面。

    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 命令。

    【讨论】:

      猜你喜欢
      • 2019-03-30
      • 2020-10-05
      • 2020-04-02
      • 2022-07-15
      • 1970-01-01
      • 2020-10-04
      • 2021-06-15
      • 2019-04-12
      • 2020-04-01
      相关资源
      最近更新 更多