Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022
Git 指令可用於建置工作流程,由 Microsoft 託管的 及 自我託管的代理程式。 例如,在功能分支上完成持續整合 (CI) 建置之後,您可以將分支合併至主要分支。 本文說明如何在 Azure Pipelines 建置腳本中執行 Git 指令。
啟用指令碼以執行 Git 命令
確保 Git 使用你 Azure DevOps 帳號的預設身份。 如果需要,請將 Git 使用者設為結帳後的第一步。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
授予權限給建置服務
專案建置服務必須具有寫入來源存放庫的許可權。 設定所需的權限,如下所示:
在您的專案的專案設定中,選擇Repos下的Repositories。
在 [ 所有存放庫 ] 頁面上,選取 [ 安全性 ] 以設定專案中所有存放庫的許可權。 或者,選取您要執行 Git 命令的存放庫,然後選取該存放庫頁面上的 [ 安全性 ]。
在 [ 使用者許可權 ] 頁面上,選取 [建置服務 ] 身分識別。 請務必在
,而非Users 選擇專案名稱 Build Service( 組織 ) 專案集合建置服務帳號 。 根據預設,此身分識別可以從存放庫讀取,但無法推送任何變更。下拉式清單,然後選取您要執行的 Git 命令所需的每個權限旁的 [允許] ,通常是 [建立分支]、[ 貢獻]、[ 讀取] 和 [建立標籤]。
允許腳本存取系統令牌
要允許腳本存取 GitHub OAuth 令牌:
在你的 YAML 管線中新增一個 checkout 步驟,並將 persistCredentials 設定為 true。
steps:
- checkout: self
persistCredentials: true
若需了解更多有關 checkout 步驟的資訊,請參閱 steps.checkout 定義。
清理本機儲存庫
建置流程不會自動清除本機存放庫的特定變更,例如刪除本機分支或復原本機 git config 變更。 如果您在使用自我裝載代理程式時遇到問題,您可以在執行組建之前清除存放庫。
一般而言,為了加快自我裝載代理程式的效能,請勿清除存放庫。 清理對 Microsoft 託管代理來說並不有效,因為他們每次都會使用新的代理程式。 如需詳細資訊,請參閱 清除代理程式上的本機存放庫。
若要在執行組建之前清除存放庫:
在步驟checkout中將clean設為true。 選擇此選項會先執行git clean -ffdx,然後在擷取之前執行git reset --hard HEAD。
steps:
- checkout: self
clean: true
在管線編輯器中選取 變數, 建立或修改 Build.Clean 變數,並將其值設定為 source。
Git 命令範例
下列範例會在 命令列 工作和 批次指令碼 工作中執行 Git 命令。
列出存放庫中的檔案
若要列出 Git 存放庫中的檔案,請在 YAML 管線中使用 命令列 工作,如下所示:
- task: CmdLine@2
inputs:
script: '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在 Classic 管線的 [觸發] 索引標籤上,勾選 [啟用持續整合] 复选框。
在 [分支篩選] 和 [路徑篩選] 底下,選取要從組建中 包含 或 排除 的分支和路徑。
將 批次指令碼 新增為管線中的最後一個工作。
在工作組態的 [路徑] 底下,輸入 merge.bat 檔案的位置和名稱。
FAQ
如果我的遠端倉庫是在 GitHub 或其他 Git 服務(例如 Bitbucket Cloud)上,我可以執行 Git 指令嗎?
是的,如果你的遠端倉庫是在 GitHub 或其他 Git 服務(例如 Bitbucket Cloud),你可以執行 Git 指令。
我可以使用哪些工作來執行 Git 命令?
你可以使用以下 Azure Pipelines 任務來執行 Git 指令:
如何避免在腳本推送時觸發 CI 建置?
若要避免在指令碼推送時觸發 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 文件中的 NODE_EXTRA_CA_CERTS=file 。 如需在管線中設定變數的指示,請參閱在 管線中設定變數。
為什麼我在本地的 Azure DevOps Server 裡看不到這些功能?
部分功能僅在 Azure DevOps Services 上可用,無法在本地端 Azure DevOps Server 上使用。 部分功能僅在最新版本的 Azure DevOps Server 中提供。