簡體   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