Azure DevOps 服務 |Azure DevOps Server |Azure DevOps Server 2022
Git 命令可用於 在 Microsoft 裝載 和 自我裝載 代理程式上建置工作流程。 例如,在功能分支上完成持續整合 (CI) 建置之後,您可以將分支合併至主要分支。 本文說明如何在 Azure Pipelines 組建腳本中執行 Git 命令。
啟用指令碼以執行 Git 命令
請確定 GitHub 會使用您 Azure DevOps 帳戶的預設身分識別。 如有必要,請將 GitHub 使用者設定為結帳後的第一個步驟。
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
授與建置服務的權限
專案建置服務必須具有寫入來源存放庫的許可權。 設定所需的權限,如下所示:
在專案的 [專案設定] 中,選取 [存放庫] 底下的 [存放庫]。
在 [ 所有存放庫 ] 頁面上,選取 [ 安全性 ] 以設定專案中所有存放庫的許可權。 或者,選取您要執行 Git 命令的存放庫,然後選取該存放庫頁面上的 [ 安全性 ]。
在 [ 使用者許可權 ] 頁面上,選取 [建置服務 ] 身分識別。 <請務必選取 >[使用者] 底下的專案名稱< [建置服務 (>組織)],而不是 [專案集合建置服務帳戶]。 根據預設,此身分識別可以從存放庫讀取,但無法推送任何變更。
下拉式清單,然後選取您要執行的 Git 命令所需的每個權限旁的 [允許] ,通常是 [建立分支]、[ 貢獻]、[ 讀取] 和 [建立標籤]。
允許腳本存取系統令牌
若要允許指令碼存取 GitHub OAuth 權杖:
將步驟新增至 checkout YAML 管線, persistCredentials 並設定為 true。
steps:
- checkout: self
persistCredentials: true
如需步驟的詳細資訊 checkout ,請參閱定義 steps.checkout 。
清理本機儲存庫
建置管線不會自動清除本機存放庫的特定變更,例如刪除本機分支或復原本機 git config 變更。 如果您在使用自我裝載代理程式時遇到問題,您可以在執行組建之前清除存放庫。
一般而言,為了加快自我裝載代理程式的效能,請勿清除存放庫。 清除對 Microsoft 裝載的代理程式無效,因為它們每次都會使用新的代理程式。 如需詳細資訊,請參閱 清除代理程式上的本機存放庫。
若要在執行組建之前清除存放庫:
在步驟中clean設定true為。checkout 此選項會執行,後面會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在傳統管線的 [觸發程式] 索引標籤上,選取 [啟用持續整合] 核取方塊。
在 [分支篩選] 和 [路徑篩選] 底下,選取要從組建中 包含 或 排除 的分支和路徑。
將 批次指令碼 新增為管線中的最後一個工作。
在工作組態的 [路徑] 底下,輸入 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。