多層級 Looker CI/CD 用法和工作流程

本頁說明如何安裝及設定多層級 CI/CD 工作流程後,在 Looker 中使用這類工作流程。

這些操作說明使用三層式系統,包含開發、QA 和正式環境。不過,您也可以將相同原則套用至雙層或四層系統。

這些操作說明也假設您使用 GitHub 做為 Git 供應商。您可以使用其他 Git 供應商建立 CI/CD 工作流程,但必須具備相關專業知識,才能根據供應商修改這些操作說明。

工作流程總覽

LookML 開發人員首先會在開發分支中編寫程式碼 (通常會命名為 dev-my-user-ydnv),然後使用 Looker 持續整合 (或手動執行 CI 套件) 測試變更,並提交程式碼。最後,他們開啟提取要求,將程式碼與 main 分支版本合併。

開啟提取要求後,開發人員會前往 GitHub。開發人員應使用傳統式提交訊息樣式撰寫有意義的 PR 標題,並在說明中新增註解,註解內容會納入變更記錄。如果已設定提取要求觸發,Looker 持續整合會自動驗證提取要求,開發人員可以在 Looker 或 GitHub 中查看結果。

接著,開發人員應在 GitHub 中選取審查人員。審查者會收到通知,並可將審查結果新增至 PR。如果審查者核准變更,系統會將 PR 與 main 分支合併。系統會呼叫 WebHook,開發環境現在會看到變更。

Release Please 自動化動作會自動執行,並開啟第二個 PR 來建立新的已標記版本。或者,如果已為此目的開啟 PR,Release Please 會更新該 PR。發布 PR 會附上版本號碼,以及包含變更標題和說明的修訂記錄。

當 Release Please 產生的 PR 獲得核准並合併後,系統會產生新的版本標記,並將變更記錄合併至 main 分支。Looker 的 QA 和正式版例項可使用「進階部署模式」選取這個版本。

發布版本編號和提交命名最佳做法

您可以根據環境需求,為版本和相關聯的標記命名及編號。不過,這裡使用的是語意化版本,強烈建議您採用,因為這與 Release Please 外掛程式搭配使用效果良好。

在語意化版本中,版本由三個以半形句號分隔的數字組成:MAJOR.MINOR.PATCH

  • 每次發布版本修正錯誤時,PATCH 就會遞增
  • 每當版本新增或改善功能時,MINOR 就會遞增,而 PATCH 則會重設為零,同時保持回溯相容性
  • 新增不具回溯相容性的功能時,MAJOR 會遞增,而 MINOR 和 PATCH 都會設為零

傳統提交是一種系統,可根據提交對使用者的影響來命名提交。雖然不是必要條件,但使用傳統的提交命名方式,對 Release Please 外掛程式也很有幫助。

在傳統的提交命名方式中,每個提交訊息都會加上變更範圍的指標:

  • 錯誤修正會以 fix: 表示,例如 fix: set proper currency symbol on sale_amt format
  • 新功能會以 feat: 表示,例如 feat: added explore for sales by territory
  • 如果功能有重大變更,會以 feat!: 表示,例如 feat!: rewrote sales explore to use the new calendar view
  • 如果文件已更新,但 LookML 未變更,提交訊息會以 doc: 開頭

如果一律使用傳統式提交訊息,通常就能輕鬆判斷下一個要使用的語意版本號碼。如果提交記錄只包含 fix: 和 doc: 提交,則應遞增 PATCH。如有 feat: 提交,則應遞增 MINOR。如有 feat!:,則應遞增 MAJOR。Release Please 外掛程式甚至可以自動產生 CHANGELOG 檔案,並為版本加上標記。

使用進階部署模式

在開發例項上以 PR 形式提交變更後,Release Please 外掛程式會使用 v1.2.3 等版本標記標記變更。Looker 的進階部署模式隨後會在 Looker UI 中提供這些版本,供 QA 和正式環境例項使用。

如要部署變更,請從 Looker IDE 選擇 Deployment Manager:

IDE 中的 Looker Deployment Manager 位置。

按一下 Deployment Manager 右上方的「Select Commit」連結。接著,選取要部署代碼的三點圖示選單,然後選擇「Deploy to Environment」(部署至環境):

Looker Deployment Manager UI,用於部署至環境。

您不需要再次標記部署作業,因此請選擇「Deploy without tagging」(部署但不標記),然後按下「Deploy to Environment」(部署至環境) 按鈕:

Looker Deployment Manager 使用者介面,可不加上標記而直接部署。

最後,使用 Deployment Manager 推送至正式環境。

使用 Looker 持續整合

如要驗證開發分支版本中的變更,或驗證提取要求中的變更,開發人員可以使用 Looker 持續整合。持續整合提供下列驗證器:

您可以將這些驗證器分組到持續整合套件中,並在提取要求、排定時間或手動時自動執行。

SQL Validator

持續整合 SQL 驗證工具會驗證您「探索」中的維度是否能針對資料庫正確執行。這項測試會檢查 LookML 檢視表中定義的欄位,是否對應資料庫中的有效 SQL 資料欄或運算式。

SQL 驗證工具具有下列主要功能:

如要瞭解詳情和設定選項,請參閱「持續整合 SQL 驗證器」說明文件頁面。

LookML Validator

持續整合 LookML 驗證器會檢查 LookML 專案是否有語法錯誤,例如缺少括號或無效的欄位參照。如果開發人員在 Looker IDE 以外編寫 LookML,這個驗證工具就特別實用。

LookML 驗證器具備下列主要功能:

  • 可設定嚴重性門檻 (錯誤、警告或資訊),決定哪些嚴重性等級的訊息會導致執行失敗。
  • 可設定驗證作業的逾時時間長度。

如要瞭解詳情和設定選項,請參閱「持續整合 LookML 驗證器」說明文件頁面。

Content Validator

Continuous Integration Content Validator 會驗證儲存的內容 (例如 Look 和使用者定義的資訊主頁 (UDD)) 在 LookML 變更後是否仍能正常運作。

Content Validator 具備下列主要功能:

如要瞭解詳情和設定選項,請參閱「持續整合內容驗證器」說明文件頁面。

Assert Validator

持續整合斷言驗證器會執行專案中定義的 LookML 資料測試,驗證模型邏輯和資料完整性。

舉例來說,LookML 資料測試可能如下所示:

test: historic_revenue_is_accurate {
  explore_source: orders {
    column: total_revenue { field: orders.total_revenue }
    filters: [orders.created_date: "2024"]
  }
  assert: revenue_is_expected_value {
    expression: ${orders.total_revenue} = 626000 ;;
  }
}

斷言驗證器具備下列主要功能:

如要瞭解詳情和設定選項,請參閱「持續整合斷言驗證器」說明文件頁面。

管理及執行 CI 套件

如要管理及執行持續整合測試,請按照下列步驟操作:

根據預設,系統會為 Look 和資訊主頁提供遞增的數字 ID,這些 ID 會用於 Look 或資訊主頁的網址。不過,這些項目無法在不同系統之間保持同步。因此,開發中的特定資訊主頁網址不會指向 QA 或正式環境中的相同資訊主頁。

對於 UDD,您可以選擇使用 Slug,而非 ID 做為網址的一部分。Slug 是半隨機的字元組合,而非數字。您可以在匯入時設定代碼,這樣類似的網址就能在開發、QA 和正式環境中指向相同的 UDD。使用代碼而非 ID 是最佳做法,特別是從 Look 或其他 UDD「按一下」前往 UDD 時。

檢查 gzr dashboard cat 的輸出內容,即可找到 slug。您可以在資訊主頁網址中使用 Slug,取代數字 ID。

使用 Gazer 遷移使用者內容

在開發、QA 和正式環境之間複製外觀和資訊主頁等內容,通常很有用。您可能想製作內容來展示新增的 LookML,或是驗證儲存的內容在 LookML 變更後是否仍能正常運作。在這種情況下,可以使用 Gazer 在執行個體之間複製內容。

LookML 資訊主頁

在一般的 LookML CI/CD 工作流程中,系統會在執行個體之間同步處理 LookML 資訊主頁。不過,如果任何 UDD 都與 LookML 資訊主頁同步,可以使用下列指令透過 Gazer 更新:

gzr dashboard sync_lookml DASHBOARD_ID --host TARGET_SYSTEM_URL

使用者定義的資訊主頁

您可以透過 Gazer 遷移使用者定義的資訊主頁 (UDD),方法是參照資訊主頁的 ID,以及 UDD 所在的 Looker 執行個體網址。Gazer 會將資訊主頁設定儲存至 JSON 檔案,然後匯入目標 Looker 執行個體。

擷取 UDD 設定的指令如下:

gzr dashboard cat DASHBOARD_ID --host TARGET_SYSTEM_URL --dir .

這會產生名為 Dashboard_DASHBOARD_ID_DASHBOARD_NAME.json 的檔案,其中包含資訊主頁的設定。

您可以使用下列指令,將 UDD 匯入目標系統:

gzr dashboard import Dashboard_DASHBOARD_ID_DASHBOARD_NAME.json FOLDER_ID \
    --host TARGET_SYSTEM_URL

Look 圖表

Look 圖表遷移作業與 使用者定義資訊主頁:UDD 遷移作業非常相似。首先,請使用 Gazer 將 Look 設定儲存至 JSON 檔案:

gzr look cat LOOK_ID --host SOURCE_SYSTEM_URL --dir .

接著,將 Look 匯入目標執行個體:

gzr look import Look_LOOK_ID_LOOK_NAME.json FOLDER_ID \
    --host TARGET_SYSTEM_URL