部署 GitLab 以在 OCI 上啟用 CI/CD 管線

GitLab 是一個 Web 式的 DevOps 平台,提供 Git 型的儲存區域管理服務、發行追蹤以及持續的整合與部署 (CI/CD) 管線功能。您可以自行管理 GitLab 並部署到 Oracle Cloud Infrastructure (OCI),將雲端部署自動化。

架構

此參照架構有兩個部署選項:獨立部署和分散式部署。

  • 獨立 (< 1,000 位使用者)

    獨立架構是 GitLab 最簡單的選項。它會將所有 GitLab 元件部署到 OCI 租用戶內的單一運算執行處理。如果您最多需要提供 1,000 位使用者,而且您沒有嚴格的可用性需求,則具有頻繁備份的獨立解決方案適用於許多組織。單一租用戶可以代管多部 GitLab 伺服器。下圖說明此參考架構:

    deploy_gitlab_sa.png 描述如下
    deploy_gitlab_sa.png 圖解描述

  • 已分配 (1000–2000 位使用者)

    分散式解決方案是一種多層架構,可將專用 GitLab 伺服器的各種元件區隔為個別的執行處理,每個元件都會被指派執行特定工作。更明確地說,分散式架構具有專用的 PostgreSQL 伺服器、Redis 伺服器、Gitaly 伺服器以及 Prometheus 監督執行處理,此功能完整的 GitLab 部署全都是必要的。根據 GitLab 建議,此分散式建置支援大約 2,000 位使用者。因為某些內建冗餘,所以效能會高於獨立部署與容錯。不過,分散式部署無法高度使用。

    deploy_gitlab_dist.png 描述如下
    deploy_gitlab_dist.png 圖解描述

這些架構具有下列元件:

  • 區域

    Oracle Cloud Infrastructure 區域是一個區域化的地理區域,包含一或多個稱為可用性網域的資料中心。區域與其他區域無關,而且大型距離可以區隔 (跨國家或甚至洲)。

  • 可用性網域

    可用性網域是區域內獨立的獨立資料中心。每個可用性網域中的實體資源都會與其他可用性網域中的資源隔離,以提供容錯。可用性網域不會共用基礎架構,例如電源、冷卻或內部可用性網域網路。因此,一個可用性網域的失敗並不會影響區域中的其他可用性網域。建置為這些 GitLab 參照架構之一部分的執行處理都會移至單一可用性網域。

  • 虛擬雲端網路 (VCN) 和子網路

    VCN 是您在 OCI 區域中設定的軟體定義網路。VCN 可以區隔為子網路,這些子網路可以專屬於某個區域或可用性網域。區域特定子網域與可用性網域特定子網路可以共存於相同的 VCN 中。子網路可以是公用或專用。您可以將此 GitLab 架構部署到包含公用和專用子網路的現有 VCN,或者將它設定為使用必要的子網路建立 VCN。

    • 防禦主機子網路

      防禦主機子網路是包含防禦主機執行處理的專用公用子網路。防禦主機是此架構的選擇性元件、如果 GitLab 直接連線至網際網路或公用子網路、就不需要此元件。

    • 負載平衡器子網路

      負載平衡器子網路是包含負載平衡器的專用公用子網路。

    • GitLab 專用子網路

      GitLab 專用子網路包含兩部 GitLab 伺服器:Gitaly 伺服器、Redis 伺服器、Postgres 伺服器、Prometheus- Grafana (監督) 伺服器,以及任何選擇性的 GitLab 執行程式。

  • 負載平衡器

    負載平衡器包含用來連線 GitLab 執行處理的公用 IP。如果想要自訂 GitLab 執行處理的網域名稱,請向 DNS 提供者註冊負載平衡器的 IP 位址。負載平衡器使用循環狀況檢查原則來監督 GitLab 伺服器。

  • 計算
    對於 GitLab,只會建立單一 GitLab 伺服器運算執行處理。對於分散式架構,總共會建立八個運算執行處理。這些執行處理都提供下列服務:
    • GitLab 伺服器

      主要 GitLab Web 式應用程式會安裝在兩部 GitLab 伺服器上。GitLab 的管理是在這些執行處理上執行,負載平衡器的作用則是作為前端。

    • PostgreSQL 伺服器

      儲存 GitLab 應用程式的永久資料庫資訊。例如,使用者、權限、問題或其他描述資料都儲存在 PostgreSQL 資料庫中。

    • Redis 伺服器

      GitLab 應用程式使用 Redis 作為工作資訊、描述資料和內送工作的非永久資料庫後端。

    • Gitaly 伺服器

      Gitaly 服務提供 Git 儲存區域的檔案儲存。屬於 GitLab 中儲存區域的所有檔案都會儲存在 Gitaly 伺服器上。建立兩個 Gitaly 執行處理以證明額外容量的層次。您可以自訂每個儲存區域儲存特定專案資料的伺服器。

    • PostgreSQL 伺服器

      GitLab 會將永久資料庫資訊儲存在 PostgreSQL 伺服器上。永久資料的範例包括使用者、權限、問題以及其他專案描述資料。

    • Redis 伺服器

      GitLab 應用程式使用 Redis 作為工作資訊、某些類型的描述資料以及內送工作的非永久資料庫後端。

    • Prometheus + Grafana (監視) 伺服器

      Prometheus + Grafana 伺服器是系統和服務監督伺服器。它會在指定的間隔從設定的目標收集測量結果、評估規則表示式、顯示結果,以及在觀察到指定的條件時觸發警示。

    • Runners

      GitLab 執行程式是與 GitLab CI/CD 搭配運作的專用機器,可在管線中執行工作。通常會在 GitLab 執行處理啟動並執行並測試之後,將它們建置到您的 GitLab 環境中。它們不會建立為部署的一部分。

  • 物件儲存

    分散式部署會在 OCI 租用戶內建立一系列物件儲存的儲存桶,設計用來儲存與 GitLab 專案關聯的各種資料類型,包括備份。

推薦

Oracle Cloud Infrastructure 上部署 GitLab 以啟用 CI/CD 管線時,請使用下列建議作為起點。 您的需求可能會與此處描述的架構不同。
  • 運算資源配置

    此架構使用 Oracle Linux 作業系統映像檔,並支援所有運算資源配置、標準或彈性的系列。GitLab 建議您為獨立與分散式建置使用下列組態參數:

    獨立
    已分配GitLab 建議這些組態,但您可以在建置時自訂。
  • VCN

    建立 VCN 和子網路時,請使用未與您想要設定專用連線之任何其他網路 (在 OCI、企業內部部署資料中心或其他雲端提供者中) 重疊的 CIDR 區塊。VCN CIDR 區塊是可編輯的後續建立。

    設計子網路時,請考量您的流量和安全需求。將特定層或角色內的所有資源連附至可作為安全界限的相同子網路。

  • 安全性

    使用 Oracle Cloud Guard 主動監督及維護 OCI 中資源的安全。「雲端保全」使用可定義的偵測器方法來檢查安全弱點的資源,以及監督操作員和使用者是否有風險活動。偵測到任何組態錯誤或不安全的活動時,雲端保全會建議更正動作,並根據您可以定義的回應器方法協助這些動作。

    對於需要最高安全性的資源,Oracle 建議您使用安全區域。安全區域是與以最佳做法為基礎之 Oracle 定義的安全原則方法關聯的區間。例如,安全區域中的資源不得從公用網際網路存取,且必須使用客戶管理的金鑰加密。當您在安全區域中建立和更新資源時,OCI 會根據 security-zone 處方中的原則驗證作業,並拒絕違反任何原則的作業。

  • Runners

    您可以將 GitLab 執行程式建置到與現有 GitLab 執行處理相同的專用子網路中,或建置到專用的 VCN 或子網路中。

考量

部署此參照架構時,請注意下列幾點。

  • 效能

    在此架構中啟動的所有預設運算型態均遵循 GitLab 文件中提供的建議。不過,如果粒子節點需要更多資源,您可以擴展運算資源配置。分散式架構的效能高於獨立部署的效能。架構具有下列預期的效能測量結果選項。

  • 安全性

    除了負載平衡器和防禦主機之外,如果有的話,GitLab 架構的所有元件都位於專用子網路中。分散式架構中的運算執行處理都已啟用防火牆,且只會開啟必要的連接埠,以啟用節點之間的通訊。

  • 使用狀態

    GitLab 伺服器會以配對方式建置,並由負載平衡程式平衡。所有執行處理都部署在單一可用性網域中。此參照架構也會建立數個物件儲存的儲存桶,以儲存各種類型的資料。物件儲存是一項區域服務,未與任何特定的運算執行處理或可用性網域關聯。只要您具備網際網路連線,而且可以存取其中一個物件儲存端點,就可以從 OCI 相關資訊環境內部或外部存取資料。此部署使用服務閘道連線至物件儲存的儲存桶。服務閘道可讓您從專用子網路中的專用 IP 位址連線至物件儲存公用端點

  • 備份與回復
    分散式部署會建立用於儲存備份的物件儲存的儲存桶,並設定將資料上傳至該儲存桶所需的所有組態設定值。它也會在主要 GitLab 伺服器執行處理上建立 cron 工作,這會建立每日的 GitLab 資料備份、上傳至儲存桶,以及在機器上儲存複本。gitlab-secrets.json 檔案包含機密資料,因此未包括在此備份中。建議您將/etc/gitlab 目錄或/etc/gitlab/gitlab-secrets.json 檔案的副本保留在管理員在此建置外部的安全位置。請考慮是否要更頻繁的備份,並在物件儲存的儲存桶上設定適當的保留原則。
    ## Run a backup everyday at 1am.
    0 1 * * * sudo gitlab-backup create
     
    ## Run a separate backup for configuration settings (creates a tar archive in /etc/gitlab/config_backup)
    0 2 * * * sudo gitlab-ctl backup-etc

    您無法只備份 GitLab 資料,也可以備份整個 GitLab 伺服器。OCI 區塊磁碟區服務可讓您依據排程自動執行區塊磁碟區備份,並根據選取的備份原則加以保留。如需詳細資訊,請參閱以原則為基礎的備份文件。

  • 成本

    此架構的費用與任何 OCI 建置的基礎架構 (例如運算執行處理、網路負載平衡器及資料儲存體),以及從 GitLab 購買的所有授權。如需 OCI 服務成本的詳細資訊,請參閱 Oracles 的雲端程序清單頁面。

  • 公用 URL

    請考慮使用 DNS 提供者,將 GitLab 執行處理的公用 IP 位址與自訂網域名稱建立關聯。在分散式架構中,自訂 URL 應該與負載平衡器的公用 IP 位址關聯。您可以在部署時設定外部 URL 網域名稱,然後將 URL 與 GitLab 部署中的 IP 位址建立關聯。您可以在事實之後變更自訂 URL。

建置

此參照架構的 Terraform 程式碼可作為 Oracle Cloud Infrastructure Resource Manager 中的範例堆疊。您也可以從 GitLab 下載程式碼,然後自訂程式碼以符合您的特定需求。

  • 使用 Oracle Cloud Infrastructure Resource Manager 中的範例堆疊進行部署:
    1. 一下部署到 Oracle Cloud

      如果您尚未登入,請輸入租用戶和使用者證明資料。

    2. 選取要建置堆疊的區域。
    3. 依照畫面上的提示和指示建立堆疊。
    4. 建立堆疊之後,請按一下 Terraform 動作,然後選取畫。
    5. 等待工作完成,然後複查計劃。

      若要進行任何變更,請返回「堆疊詳細資訊」頁面,按一下編輯堆疊,然後進行必要的變更。然後,再次執行「劃」動作。

    6. 如果不需要進一步的變更,請返回「堆疊詳細資訊」頁面,按一下 Terraform 動作,然後選取用。
  • 使用 GitLab 中的 Terraform 程式碼進行部署:
    1. 前往 GitLab
    2. 將儲存區域複製或下載到您的本機電腦。
    3. 依照 README 文件中的指示進行。

探索更多

深入瞭解如何在 Oracle Cloud Infrastructure 上部署 GitLab 以啟用 CI/CD 管線。

複查這些額外資源: