在前面幾篇裡介紹了我們在 dbt Ci/CD pipeline 中使用的工具、指令和套件:
dbt run
指令前驗證 SQL 能否執行這篇將會把上述所有內容集結成完整的 CI/CD pipeline
先來複習一下 CI 的流程:
使用 pr-check 套件中的 git_diff_operator
來識別發生變更的模型,並執行 dry-run:
# get_modified_folders.py 使用 pr-check git_diff_operator 來檢索異動資料夾
DRY_RUN_MODELS=$(python3.11 get_modified_folders.py)
if [ "$(DRY_RUN_MODELS)" != "" ]; then
dbt compile --select $(DRY_RUN_MODELS)
dbt-dry-run --tags $(DRY_RUN_MODELS)
fi
在執行模型變更和數據驗證之前,需要生成 dbt manifest 文件:
echo "Generate base manifest"
# 切換到改動前的 commit
git checkout HEAD^1
dbt deps --profiles-dir .
# 產生改動前的 dbt manifest 在 base 資料夾
dbt parse --profiles-dir . --target-path base
echo "Generate target manifest"
git checkout -
dbt clean --profiles-dir . --target-path target
dbt deps --profiles-dir .
# 產生改動後的 dbt manifest 在 target 資料夾
dbt parse --profiles-dir . --target-path target
執行變更的模型及其相依模型:
dbt build --models "state:modified+" --state base --target-path target
--profiles-dir . --target ci --favor-state
# 檢索 PR 的分支名稱
SOURCE_BRANCH=$(System.PullRequest.SourceBranch)
BRANCH_NAME=${SOURCE_BRANCH#refs/heads/}
# pr_check_report 會產生 PR 檢查報告並發送至 PR 頁面
python3.11 .cicd/pr_check_report.py $BRANCH_NAME
前三步驟與 CI 指令類似就不重複介紹
透過 dbt docs generate
建立 dbt 文件,並上傳到 GCS,dbt 文件的網頁會讀取 GCS 上的 dbt 文件檔案
dbt docs generate --profiles-dir . --target-path target --no-compile
gsutil --quiet -m rsync -d -r target $(DBT_DOC_PATH)
建立最新的 dbt 映像檔並上傳至 GAR
gcloud beta builds submit --config cloudbuild_prod.yaml
透過整合 dbt 內建指令、第三方套件以及自行開發的套件,形成以上完整的 CI/CD 流程,下一篇將會介紹 dbt 新功能:unit test。