設定以 Git 為基礎的工作流程

在預備 Metabase 中建立模型、問題和儀表板,將變更提交到儲存庫,然後將這些變更推送至您的生產 Metabase。

序列化僅適用於 Pro 和 Enterprise 方案(包括自架託管和 Metabase Cloud)。

本文將介紹如何使用 Metabase 的序列化功能,讓預備和生產 Metabase 保持同步。

透過此設定,您可以在預備 Metabase 中微調您的問題、模型和儀表板。然後,當您對您的工作感到滿意時,您可以將這些變更提交到 git 儲存庫,並將這些變更推送至您的生產 Metabase。

首先,設定您的預備 Metabase

此設定僅適用於自架託管的 Metabase,包括預備環境和生產環境。

我們假設您已經有一個正在運作的生產 Metabase,並且您想要設定另一個 Metabase 來預備問題、模型和儀表板的開發。

在伺服器上設定您的預備 Metabase,無論是在您的內部部署伺服器上,還是在您偏好的雲端供應商上。預備 Metabase 必須與您的生產 Metabase 版本相同。每次升級您的生產 Metabase 時,請記得同時升級您的預備 Metabase。

為您的預備 Metabase 建立您的 Metabase 應用程式資料庫

您還需要為您想要用於預備的每個額外 Metabase 設定單獨的應用程式資料庫。使用 PostgreSQL 來儲存您的所有模型、問題、集合等等。(或者 MySQL,如果那是您的生產 Metabase 所使用的)。

您的預備和生產資料庫必須共用相同的顯示名稱、資料庫引擎和結構描述

重複一次,您的預備和生產資料庫必須

  • 是相同的類型/引擎。例如,如果一個是 Postgres,另一個也必須是 Postgres。相同的版本是理想的,但通常並不重要。
  • 具有相同的結構描述。
  • 在 Metabase 中具有相同的顯示名稱(填寫資料庫連線詳細資訊時的「顯示名稱」欄位,而不是資料庫名稱本身)。

輸入您的連線資訊後,您需要等到 Metabase 完成同步。

定義要簽入版本控制的集合

您可以序列化所有集合,或(最好)指定這些集合的子集。這個想法是深思熟慮您要包含哪些集合。在您的預備 Metabase 中擁有用於實驗的集合,並且可以將其從生產環境中排除,這可能會很方便。

如果您僅指定幾個集合,我們建議您將這些集合標記為官方集合。

在您的預備環境中要避免的事項

  • 避免儀表板訂閱和警示。這些項目特定於人員的帳戶,因此 Metabase 將它們從序列化中排除。
  • 避免在您的預備 Metabase 中進行模型快取,因為模型快取會與您的生產 Metabase 衝突。

設定您的 Git 儲存庫和 CI(您的工作流程)

一旦您的預備和生產 Metabase 啟動並執行,您需要建立一個儲存庫來儲存您的序列化 Metabase 內容,Metabase 將其匯出為一組 YAML 檔案。

在本文中,我們將使用 Github Actions 來自動化在預備和生產 Metabase 之間提取和推送該序列化資料。您的 CI 工具(在本例中為 GitHub Actions)必須具有對此應用程式資料庫的讀/寫權限。

您還將新增一個或多個 GitHub Actions 工作流程 YAML 檔案,以自動化序列化流程。或者,您可以開啟分支保護,以要求在合併到您的 main 分支之前需要 PR 核准。

有兩種基本的預備到生產設定

設定如下

  • 啟用同步的預備 Metabase
  • 停用同步的預備 Metabase

預設情況下,Metabase 會在背景執行一些查詢,以向您提供中繼資料

  • 同步會取得更新的結構描述。
  • 掃描會取樣欄位值,以填入篩選下拉式選單。
  • 指紋辨識會取樣額外的欄位值,以協助智慧型行為,例如長條圖的自動分箱。

如果這些排程的查詢對您的資料庫造成過大的壓力(通常僅在您的資料倉儲非常龐大時才會發生),您可以將它們關閉。如需更多關於 Metabase 如何更新中繼資料的資訊,請查看我們的文件。

何時使用啟用同步的設定

  • 您有一個單一的預備 Metabase。
  • 您連線的資料來源很小。
  • 資料流是單向的,從開發到生產(也就是說,您不需要從生產環境中提取中繼資料或內容)。

何時使用停用同步的設定

  • 您有(或想要擁有)多個開發 Metabase。
  • 您的底層資料來源很大。
  • 資料流是雙向的:一個或多個預備 Metabase 推送和提取到一個生產 Metabase。

啟用同步的 Metabase 預備到生產設定

在此設定中,預備 Metabase 已啟用同步。此設定是單向的。

  • 在一個預備 Metabase 中進行變更。
  • 以序列化格式(YAML 檔案)匯出這些變更。
  • 將這些 YAML 檔案提交到儲存庫。
  • 將這些變更匯入到您的生產 Metabase。

One staging Metabase (with sync on) is used to development content, which you can export, commit to a repo, then import into your production Metabase.

在您的預備 Metabase 中開發您的內容

在您的預備 Metabase 中建立您的內容:您的模型、問題、儀表板、集合等等。

序列化您在預備 Metabase 中所做的變更

一旦您對您的變更感到滿意,您將序列化您的變更,以便您可以將它們提交到您的儲存庫。

若要序列化您的變更,您將執行 Metabase 的 export 命令。

例如,如果您僅匯出集合 2、3 和 4,您可以執行

java -jar metabase.jar export repo_path --collection 2,3,4 --no-data-model --no-settings

預設情況下,Metabase 將排除巢狀集合。若要包含巢狀集合,您也需要指定它們的 ID,就像任何頂層集合一樣。

Metabase 將使用您所做的變更來序列化您的預備 Metabase。您可能也想要將此命令放入一個 bash 腳本中,您將其簽入您的儲存庫,這樣您就不需要每次都輸入它,並且可以在開發時調整它。

將這些變更提交到您的工作分支。一旦您將您的工作分支合併到您的 main 分支中,GitHub 工作流程將執行並將這些變更匯入到您的生產 Metabase。

建立 GitHub Action 工作流程 YAML 檔案

您可以設定您的儲存庫,以便當您將您的序列化變更合併到您的 main 分支時,工作流程會將這些序列化變更匯入到您的生產 Metabase。

這是一個啟用同步的工作流程範例,或者在這裡繼續操作。

停用同步的 Metabase 預備到生產設定

在此設定中,一個或多個預備 Metabase 已停用同步。此設定是雙向的

  • 匯出您的生產資料以更新您的所有預備 Metabase。
  • 將這些序列化的 YAML 檔案變更提交到儲存庫。
  • 將這些變更匯入到一個或多個預備 Metabase。
  • 在這些預備 Metabase 中開發新內容:儀表板、模型等等。
  • 從預備 Metabase 匯出這些變更,並提交匯出的 YAML 檔案。
  • 將該內容匯入到生產環境。
  • 如果您正在執行多個 Metabase,您將需要使用新變更來更新它們。

One or more staging Metabase(s) (with sync off) is used to development content, which you can export, commit to a repo, then import into your production Metabase. To keep all of the staging Metabases up to date, you

確保您已關閉同步

使用環境變數 MB_DISABLE_SCHEDULER=true 停用 Metabase 排程器。

停用排程將關閉 Metabase 的排程工作,其中包括同步、指紋辨識和掃描,以及儀表板訂閱、警示和模型快取。

使用設定檔設定多個預備環境

此設定您只需要一個預備環境,但是如果您希望有多個預備環境,您可以使用設定檔來設定多個預備 Metabase。

從您的生產 Metabase 匯出表格中繼資料

由於同步已關閉,您需要從您的生產 Metabase 取得您的表格中繼資料,並將其匯入到您的預備 Metabase。

以下命令將匯出您指定的集合,以及表格中繼資料。

java -jar metabase.jar export --collections COLLECTIONS_TO_SYNC --no-settings

如果您想要從生產 Metabase 匯出所有集合,只需省略 --collections 旗標及其引數。

我們建議設定一個工作流程,以定期自動匯出此資料。

這是一個工作流程範例

name: export-datamodel-from-prod
on:
  workflow_dispatch:
  # schedule:
  #  - cron: '0 */6 * * *' # Every six hours every day
env:
  MB_VERSION: 1.46.4
  COLLECTIONS_TO_SYNC: "2,3,4"
  MB_DB_TYPE: postgres
  MB_DB_DBNAME: metabase
  MB_DB_HOST: $
  MB_DB_USER: $
  MB_DB_PASS: $

jobs:
  export_data_model:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Download selected version enterprise jar
        run: |
          curl -OL https://downloads.metabase.com/enterprise/v$MB_VERSION/metabase.jar
          stat ./metabase.jar
      - name: Export datamodel and curated collections
        run: |
          java -jar metabase.jar export $GITHUB_WORKSPACE --collections $COLLECTIONS_TO_SYNC --no-settings
      - name: Push Git commit
        run: |
          git config user.name github-actions
          git config user.email github-actions@github.com
          git add .
          if [[ $(git diff --cached --stat) != '' ]]; then
            git commit -m "Automatic export of the table metadata"
            git push
          fi

從您的生產 Metabase 將內容匯入到您的預備 Metabase。

由於 Metabase 同步處理程序已關閉,您需要從生產環境提取內容,以「同步」您的預備 Metabase,包括表格 metadata。如果您執行多個預備 Metabase,則每次生產環境表格 metadata 有任何變更時,以及每次您將變更從任何一個預備 Metabase 推送至生產環境 Metabase 時,都需要更新這些預備 Metabase。

手動保持 Metabase 同步是不切實際的,因此我們建議建立一個動作 (action),例如這個動作,使其每六小時或每天執行一次,以使您的預備 Metabase 與生產環境 Metabase 中的變更保持同步。

  1. 複製您匯出生產環境資料的儲存庫 (repo)。
  2. 切換到包含您預備 Metabase 的 Metabase jar 檔案的目錄。
  3. 執行以下命令以匯入表格 metadata 和策展集合 (curated collections)

    java -jar metabase.jar import /PATH/TO/REPO
    

    其中 /PATH/TO/REPO 是您儲存來自生產環境 Metabase 的序列化資料的路徑。此命令將載入更新後的表格 metadata,以及儲存庫 (repo) 的任何其他變更。每次有人更新您的本機儲存庫 (repo) 時,您都需要執行此命令。

在您的預備 Metabase 中開發您的內容

登入您的預備 Metabase 並建立您想要推送至生產環境的任何內容:模型 (models)、問題 (questions)、儀表板 (dashboards) 等。請務必將這些項目儲存在您標記為匯出到生產環境 Metabase 的官方集合 (Official collections) 中。

將您在預備 Metabase 中所做的變更匯出到您的生產環境 Metabase

例如,假設您只想匯出集合 (collections) 1、2、3。

java -jar metabase.jar export /PATH/TO/REPO --collection 1,2,3 --no-data-model --no-settings

/PATH/TO/REPO 替換為您的儲存庫 (repo) 路徑,其中包含您的序列化 Metabase 資料。並將 1,2,3 替換為您要匯出的集合 (collections) 的 ID 號碼,每個集合 ID 以逗號分隔。

匯出命令將序列化您在開發 Metabase 中所做的變更,並將其儲存到您的儲存庫 (repo) 中。

將您的變更提交 (Commit) 到一個分支 (branch),並將該分支合併 (merge) 到您的主要分支 (main branch)。您設定的 GitHub 工作流程將會執行,並將這些序列化變更匯入到您的生產環境 Metabase 中。

同步關閉設定的範例工作流程 YAML 檔案

同步關閉的 Git 工作流程範例.

下一步:加快儀表板速度

如何讓您的儀表板載入更快。

下一篇文章