建置內部部署 Bitbucket 存放庫

Azure DevOps Services

注意

若要整合 Bitbucket Cloud 與 Azure Pipelines,請參閱 Bitbucket Cloud

您可以將內部部署 Bitbucket 伺服器或其他 Git 伺服器與 Azure Pipelines 整合。 您的內部部署伺服器可能會公開至網際網路,或可能不是。

如果您的內部部署伺服器可從執行 Azure Pipelines 服務的伺服器連線,則:

  • 您可以設定傳統組建並設定 CI 觸發程式

如果您的內部部署伺服器無法從執行 Azure Pipelines 服務的伺服器連線,則:

  • 您可以設定傳統組建管線並啟動手動組建
  • 您無法設定 CI 觸發程式

注意

YAML 管線不適用於內部部署 Bitbucket 存放庫。

注意

內部部署 Bitbucket 存放庫無法使用 PR 觸發程式。

如果您的內部部署伺服器可從裝載的代理程式連線,您可以使用裝載的代理程式來執行手動、排程或 CI 組建。 否則,您必須設定可存取內部部署伺服器的自我裝載代理程式,並擷取程式碼。

可從 Azure Pipelines 連線

如果您的內部部署 Bitbucket 伺服器可從 Azure Pipelines 服務連線,請建立 其他 Git 服務連線,並使用該連線來建立管線。 核取 [嘗試從 Azure Pipelines 存取此 Git 伺服器] 的選項

CI 觸發程式會透過輪詢而非透過 Webhook 運作。 換句話說,Azure Pipelines 會定期檢查 Bitbucket 伺服器是否有任何程式碼更新。 如果有,則 Azure Pipelines 會啟動新的執行。

無法從 Azure Pipelines 連線

如果無法從 Azure Pipelines 連線到 Bitbucket 伺服器,您有兩個選項:

  • 請與您的 IT 部門合作,在 Azure Pipelines 與內部部署 Git 伺服器之間開啟網路路徑。 例如,您可以將例外狀況新增至防火牆規則,以允許來自 Azure Pipelines 的流量流經。 請參閱 Azure DevOps IP 上的 一節,以查看您需要允許的 IP 位址。 此外,您需要有 Bitbucket 伺服器的公用 DNS 專案,Azure Pipelines 可以將伺服器的 FQDN 解析為 IP 位址。

  • 您可以使用 其他 Git 連線,但告知 Azure Pipelines 不要 嘗試從 Azure Pipelines 存取此 Git 伺服器。 其他 Git 存放庫無法使用 CI 和 PR 觸發程式。 您只能啟動手動或排程的管線執行。

可從 Microsoft 裝載的代理程式連線

您可能必須做出的另一個決定是使用 Microsoft 裝載的代理程式或自我裝載代理程式來執行管線。 這個選擇通常取決於 Microsoft 裝載的代理程式是否可以連線到您的伺服器。 若要檢查它們是否可以,請建立管線以使用 Microsoft 裝載的代理程式,並確定新增步驟以從您的伺服器簽出原始程式碼。 如果通過,您可以繼續使用 Microsoft 裝載的代理程式。

無法從 Microsoft 裝載的代理程式連線

如果上述區段中提及的簡單測試管線失敗,並出現錯誤 TF401019: The Git repository with name or identifier <your repo name> does not exist or you do not have permissions for the operation you are attempting ,則無法從 Microsoft 裝載的代理程式連線 Bitbucket 伺服器。 這再次可能是因為防火牆封鎖來自這些伺服器的流量所造成。 在此情況下,您有兩個選項:

  • 請與您的 IT 部門合作,在 Microsoft 裝載的代理程式和 Bitbucket 伺服器之間開啟網路路徑。 請參閱 Microsoft 裝載代理程式中的網路功能 一節

  • 切換至使用 自我裝載代理 程式或 擴展集代理程式 。 您可以在網路內設定這些代理程式,因此可以存取 Bitbucket 伺服器。 這些代理程式只需要對 Azure Pipelines 進行輸出連線。 不需要開啟輸入連線的防火牆。 請確定您在建立服務連線時指定的伺服器名稱可從自我裝載的代理程式解析。

Azure DevOps IP 位址

當您使用 其他 Git 連線來設定傳統管線時,請停用 Azure Pipelines 服務和 Bitbucket 伺服器之間的通訊,並使用自我裝載的代理程式來建置程式碼,您會獲得降級的體驗:

  • 您必須在管線建立期間手動輸入存放庫的名稱
  • 您無法使用 CI 觸發程式,因為 Azure Pipelines 無法輪詢程式碼的變更
  • 您無法搭配選項使用排程的觸發程式,只有在有變更時才能建置
  • 您無法在使用者介面中檢視最新認可的相關資訊

如果您想要增強此體驗,請務必啟用從 Azure Pipelines 到 Bitbucket 伺服器的通訊。

若要允許來自 Azure DevOps 的流量連線到您的 Bitbucket 伺服器,請將輸入連線 中指定的 IP 位址或服務標籤新增至防火牆允許清單。 如果您使用 ExpressRoute,請務必將 ExpressRoute IP 範圍 包含在 防火牆的允許清單中。

允許 Azure Pipelines 嘗試存取其他 Git 服務連線中的 Git 伺服器。

參考性執行

資訊執行會告訴您 Azure DevOps 無法擷取 YAML 管線的原始程式碼。 原始程式碼擷取會在回應外來事件時發生,例如推送的認可。 它也會在回應內部觸發程式時發生,例如,檢查是否有程式碼變更,並啟動排程的執行。 原始程式碼擷取可能會因為多個原因而失敗,而 Git 存放庫提供者經常要求節流。 資訊執行的存在不一定表示 Azure DevOps 會執行管線。

資訊執行看起來像在下列螢幕擷取畫面中。

Screenshot of an informational pipeline run.

您可以辨識下列屬性所執行的資訊:

  • 狀態為 Canceled
  • 持續時間為 < 1s
  • 執行名稱包含下列其中一個文字:
    • Could not retrieve file content for {file_path} from repository {repo_name} hosted on {host} using commit {commit_sha}.
    • Could not retrieve content for object {commit_sha} from repository {repo_name} hosted on {host}.
    • Could not retrieve the tree object {tree_sha} from the repository {repo_name} hosted on {host}.
    • Could not find {file_path} from repository {repo_name} hosted on {host} using version {commit_sha}. One of the directories in the path contains too many files or subdirectories.
  • 執行名稱通常包含導致 YAML 管線載入失敗的 BitBucket / GitHub 錯誤
  • 沒有階段 / 作業 / 步驟

深入瞭解 資訊執行

限制

Azure Pipelines 最多會將 2000 個分支從存放庫載入 Azure Devops 入口網站中的下拉式清單,例如手動和排程組建 設定的預設 分支,或在手動執行管線時選擇分支時。 如果您沒有在清單中看到所需的分支,請手動輸入所需的分支名稱。

常見問題

與 Bitbucket Server 整合相關的問題分為下列類別:

失敗的觸發程式

我已將變更推送至我的伺服器,但管線並未觸發。

請遵循下列步驟來針對失敗的觸發程式進行疑難排解:

  • 您的 Bitbucket 伺服器是否可從 Azure Pipelines 存取? Azure Pipelines 會定期輪詢 Bitbucket 伺服器是否有變更。 如果 Bitbucket 伺服器位於防火牆後方,此流量可能無法連線到您的伺服器。 如需詳細資訊,請參閱 Azure DevOps IP 位址 ,並確認您已將例外狀況授與所有必要的 IP 位址。 這些 IP 位址可能已變更,因為您原本已設定例外狀況規則。 如果您使用的是外部 Git 連線,而且無法從 Azure Pipelines 存取您的伺服器,您只能啟動手動執行。

  • 管線已暫停或停用嗎? 開啟管線的編輯器,然後選取 要檢查設定 。 如果您的管線已暫停或停用,則觸發程式無法運作。

  • 您是否已排除您推送變更的分支或路徑? 將變更推送至內含分支中的包含路徑,以進行測試。 請注意,觸發程式中的路徑會區分大小寫。 在指定觸發程式中的路徑時,請務必使用與實際資料夾相同的案例。

我未將任何更新推送至我的程式碼,不過管線仍在觸發中。

  • Bitbucket 的持續整合觸發程式可透過輪詢運作。 在每個輪詢間隔之後,Azure Pipelines 會嘗試連絡 Bitbucket 伺服器,以檢查程式碼是否有任何更新。 如果 Azure Pipelines 無法連線到 Bitbucket 伺服器(可能是因為網路問題),我們還是會啟動新的執行,假設可能有程式碼變更。 當 Azure Pipelines 無法擷取 YAML 管線的程式碼時,它會建立 參考性執行

簽出失敗

當我嘗試手動啟動新的執行時,會在啟動前延遲 4-8 分鐘。

  • 您無法從 Azure Pipelines 連線到您的 Bitbucket 伺服器。 請確定您未選取選項,以 嘗試從 Bitbucket 服務連線中的 Azure Pipelines 存取此 Git 伺服器。 如果選取了該選項,Azure Pipelines 會嘗試連絡您的伺服器,而且因為無法連線到您的伺服器,所以最終會逾時並開始執行。 取消核取該選項可加速您的手動執行。

簽出步驟失敗,並出現無法解析伺服器的錯誤。

您是否使用 Microsoft 裝載的代理程式? 若是如此,這些代理程式可能無法連線到您的 Bitbucket 伺服器。 如需詳細資訊,請參閱 無法從 Microsoft 裝載的 代理程式連線。