在指令碼中執行 Git 命令

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

對於某些工作流程,您需要建置管道才能執行 Git 命令。 例如,在功能分支上建置 CI 之後,小組會想要將分支合併至主要。

Git 適用於 Microsoft 裝載的代理程式和內部部署代理程式

啟用文稿以執行 Git 命令

注意

開始之前,請確定您的帳戶預設身分識別已使用下列程式代碼進行設定。 簽出程式代碼之後,這必須做為第一個步驟。

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

將版本控制許可權授與組建服務

  1. 在 [組織] 設定> [一般>專案] 中,移至您組織的項目設定頁面。

    選取您的組織設定。

  2. 選取您要編輯的專案。

    選取您的專案。

  3. [專案] 設定 中,選取 [存放庫]。 選取您要執行 Git 命令的存放庫。

  4. 選取 [安全性 ] 以編輯您的存放庫安全性。

    選擇 [安全性] 以編輯您的存放庫安全性。

  5. 搜尋 專案集合組建服務。 選擇身分識別 {{您的項目名稱}} 建置服務 ({您的組織}) (而非群組專案集合建置服務帳戶 ({您的組織}))。 根據預設,此身分識別可以從存放庫讀取,但無法將任何變更推送回該存放庫。 授與您想要執行之 Git 命令所需的許可權。 通常您會想要授與:

    • 建立分支: 允許
    • 參與: 允許
    • 讀取: 允許
    • 建立標籤: 允許

移至 [版本控制] 控制面板索引標籤

  • Azure Repos: https://dev.azure.com/{your-organization}/{your-project}/_admin/_versioncontrol

  • 內部部署: https://{your-server}:8080/tfs/DefaultCollection/{your-project}/_admin/_versioncontrol

管理專案

如果您看到此頁面,請選取存放庫,然後選取連結:

控制面板頂端至專案

控制面板專案版本控制索引標籤

在 [ 版本控制 ] 索引標籤上,選取您要在其中執行 Git 命令的存放庫,然後選取 [專案集合建置服務]。 根據預設,此身分識別可以從存放庫讀取,但無法將任何變更推送回該存放庫。

權限

授與您想要執行之 Git 命令所需的許可權。 通常您會想要授與:

  • 建立分支: 允許
  • 參與: 允許
  • 讀取: 允許
  • 建立標籤: 允許

當您完成授與許可權時,請務必選取 [ 儲存變更]。

允許文稿存取系統令牌

checkout將設定為 的 persistCredentials 區段新增true

steps:
- checkout: self
  persistCredentials: true

深入瞭解 checkout

請務必清除本機存放庫

組建管線不會自動清除本機存放庫的特定變更類型。 因此請務必:

  • 刪除您建立的本機分支。
  • 復原 git 組態變更。

如果您使用內部部署代理程式遇到問題,請確定存放庫是乾淨的:

請務必 checkoutclean 設定為 true

steps:
- checkout: self
  clean: true
  • 在 [存放庫] 索引標籤,將 [清除] 設定為 true。

  • 在 [變數] 索引標籤,建立或修改變量,Build.Clean並將其設定為source

範例

列出存放庫中的檔案

在 [建置] 索引標籤,新增此工作:

Task 引數

公用程式:命令行
列出 Git 存放庫中的檔案。
工具git

引數ls-files

將功能分支合併至main

如果您希望 CI 組建在組建成功時合併至 main。

在 [ 觸發程式] 索引標籤上,選取 [持續整合], 並包含您想要建置的分支。

在存放庫的根目錄中建立 merge.bat

@echo off
ECHO SOURCE BRANCH IS %BUILD_SOURCEBRANCH%
IF %BUILD_SOURCEBRANCH% == refs/heads/main (
   ECHO Building main branch so no merge is needed.
   EXIT
)
SET sourceBranch=origin/%BUILD_SOURCEBRANCH:refs/heads/=%
ECHO GIT CHECKOUT MAIN
git checkout main
ECHO GIT STATUS
git status
ECHO GIT MERGE
git merge %sourceBranch% -m "Merge to main"
ECHO GIT STATUS
git status
ECHO GIT PUSH
git push origin
ECHO GIT STATUS
git status

在 [建置] 索引 標籤 上,將此新增為最後一項工作:

Task 引數

公用程式:Batch 腳本
執行merge.bat。
路徑merge.bat

常見問題集

如果我的遠端存放庫位於 GitHub 或其他 Git 服務,例如 Bitbucket Cloud,我可以執行 Git 命令嗎?

Yes

我可以使用哪些工作來執行 Git 命令?

批次指令碼

命令列

PowerShell

Shell 指令碼

如何? 避免在腳本推送時觸發 CI 組建?

將 新增 ***NO_CI*** 至您的認可訊息。 範例如下:

  • git commit -m "This is a commit message ***NO_CI***"
  • git merge origin/features/hello-world -m "Merge to main ***NO_CI***"

將 新增 [skip ci] 至您的認可訊息或描述。 範例如下:

  • git commit -m "This is a commit message [skip ci]"
  • git merge origin/features/hello-world -m "Merge to main [skip ci]"

您也可以使用這些變化來認可 Azure Repos Git、Bitbucket Cloud、GitHub 和 GitHub Enterprise Server。

  • [skip ci][ci skip]
  • skip-checks: trueskip-checks:true
  • [skip azurepipelines][azurepipelines skip]
  • [skip azpipelines][azpipelines skip]
  • [skip azp][azp skip]
  • ***NO_CI***

我需要代理程式嗎?

您至少需要一個 代理程式 來執行組建或發行。

我有問題 如何進行疑難解答?

請參閱 針對組建和發行進行疑難解答。

我無法選取預設的代理程式集區,而且無法將組建或發行排入佇列。 如何修正此問題?

請參閱 代理程式集區

我的 NuGet 推送工作失敗,發生下列錯誤:「錯誤:無法取得本機簽發者憑證」。 如何修正此問題?

可以透過新增受信任的根憑證來修正。 您可以將 NODE_EXTRA_CA_CERTS=file 環境變數新增至組建代理程式,也可以在您的管道中新增 NODE.EXTRA.CA.CERTS=file 工作變數。 如需此變數的詳細資料,請參閱 Node.js 文件。 如需在管道中設定變數的指示,請參閱在管道中設定變數

我使用內部部署 TFS,但看不到其中一些功能。 為什麼呢?

部分功能僅適用於 Azure Pipelines ,但尚未提供內部部署。 如果您已 升級至最新版的 TFS,某些功能可在內部部署使用。