在指令碼中執行 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"
將版本控制許可權授與組建服務
在 [組織] 設定> [一般>專案] 中,移至您組織的項目設定頁面。
選取您要編輯的專案。
在 [專案] 設定 中,選取 [存放庫]。 選取您要執行 Git 命令的存放庫。
選取 [安全性 ] 以編輯您的存放庫安全性。
搜尋 專案集合組建服務。 選擇身分識別 {{您的項目名稱}} 建置服務 ({您的組織}) (而非群組專案集合建置服務帳戶 ({您的組織}))。 根據預設,此身分識別可以從存放庫讀取,但無法將任何變更推送回該存放庫。 授與您想要執行之 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 命令所需的許可權。 通常您會想要授與:
- 建立分支: 允許
- 參與: 允許
- 讀取: 允許
- 建立標籤: 允許
當您完成授與許可權時,請務必選取 [ 儲存變更]。
允許文稿存取系統令牌
在 [選項] 索引標籤上,選取 [允許腳本存取 OAuth 令牌]。
請務必清除本機存放庫
組建管線不會自動清除本機存放庫的特定變更類型。 因此請務必:
- 刪除您建立的本機分支。
- 復原 git 組態變更。
如果您使用內部部署代理程式遇到問題,請確定存放庫是乾淨的:
範例
列出存放庫中的檔案
在 [建置] 索引標籤上,新增此工作:
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 命令?
如何? 避免在腳本推送時觸發 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: true
或skip-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,某些功能可在內部部署使用。