dbt platformのCI ジョブをGitHub Actionsを用いて実行してみた

dbt platformのCI ジョブをGitHub Actionsを用いて実行してみた

2026.03.26

かわばたです。

dbt platform には、PR をトリガーとして CI ジョブを自動実行する機能があります。
通常は GitHub とのネイティブ統合により、PR を作成するだけで CI ジョブが自動的にトリガーされます。
しかし、ネットワーク制約などでネイティブ統合が利用できないケースもあります。

今回は GitHub Actions を使い、dbt platform の Administrative API(v2)を経由して CI ジョブをトリガーする方法を検証しました。

【公式ドキュメント】
dbt platform CI jobs
https://docs.getdbt.com/docs/deploy/ci-jobs

dbt platform Administrative API(v2)- Trigger Job Run
https://docs.getdbt.com/dbt-cloud/api-v2

対象読者

  • dbt platform のネイティブ Git 統合が利用できない環境の方
  • GitHub Actions から dbt platform の CI ジョブをトリガーしたい方
  • CI ジョブの API トリガーで必要なパラメータを知りたい方

検証環境

  • dbt platform Enterprise 版
    • Latestバージョン
  • Snowflake トライアルアカウント Enterprise 版
  • GitHub Actions

前提知識: dbt platform のジョブ種別

dbt platform のジョブには大きく3種類あります。

項目 CI ジョブ Merge ジョブ Deploy ジョブ
トリガー PR 作成・更新時 PR マージ時 スケジュール / 手動 / API / 他ジョブ完了時
デフォルトコマンド dbt build --select state:modified+ dbt build --select state:modified+ dbt build
対象モデル 変更モデル中心(state-aware) 変更モデル中心(デフォルト設定時) 全体ビルドが基本だがコマンド変更可
Deferral あり(比較対象環境を指定) あり(デフォルトで作成元環境と比較) 利用可(デフォルトは No deferral)
スキーマ dbt_cloud_pr_ プレフィックスを持つ一時スキーマ 実行環境のターゲットスキーマ 実行環境のターゲットスキーマ
Run slot 消費 しない する する
主用途 PR のコード検証(CI) マージ後の自動デプロイ(CD) 定期的な本番ビルド

CI ジョブは dbt build --select state:modified+ をデフォルトで実行し、変更されたモデルとその下流のみをビルド・テストします。Run slot を消費しないため、本番の Deploy ジョブをブロックしません。

Merge ジョブは PR がマージされたタイミングで自動的にトリガーされ、継続的デプロイ(CD)を実現します。デフォルトで state:modified+ と deferral が有効であり、変更されたモデルのみを効率的にデプロイします。

アプローチ

ネイティブ統合が利用できないため、今回は GitHub Actions から Administrative API を呼び出して CI ジョブを起動する構成を採用します。

【処理フロー】
1. 開発者が main ブランチへ PR を作成
2. GitHub Actions が PR イベントを検知
3. dbt platform API に CI ジョブのトリガーリクエストを送信
4. dbt platform が CI ジョブを実行(Slim CI + Deferral)

実際に試してみた

事前準備: GitHub Secrets の登録

GitHub Actions から dbt platform API を呼び出すため、以下の Secrets をリポジトリに登録します。

GitHub → リポジトリ → Settings → Secrets and variables → Actions → New repository secret

Secret 名 説明 取得場所
DBT_CLOUD_API_TOKEN dbt platform の service token(推奨)。CI/CD 用には個人トークンではなく service token の利用を推奨 dbt platform → Account Settings → Service Tokens
DBT_CLOUD_ACCOUNT_ID dbt platform のアカウント ID dbt platform URL の /accounts/ の後の数字
DBT_CLOUD_JOB_ID CI ジョブの ID dbt platform → Deploy → Jobs → 該当ジョブの URL の数字
DBT_CLOUD_HOST dbt platform のホスト URL(任意) 未設定時は https://cloud.getdbt.com

2026-03-26_14h33_48

事前準備: dbt platform CI ジョブの作成

dbt platform で事前に CI ジョブを作成します。

dbt platform → Deploy → Jobs → Create Job → Continuous Integration Job

項目 設定値
Job name CI - Slim Build & Test
Environment CI/Staging 用の環境
Commands dbt build --select state:modified+
Deferral Production 環境を指定

2026-03-26_14h35_13

※Triggered by pull requestsは今回APIで実行するため、チェックを入れていません。

GitHub Actions ワークフロー

.github/workflows/dbt_cloud_ci.yml を作成します。

# =============================================================================
# dbt Cloud CI Job Trigger
#
# 概要:
#   mainブランチへのPR作成・更新時にdbt Cloud CI jobをAPIでトリガーする
#   ネイティブGit統合が利用できない環境向けのワークフロー
#
# CI jobのAPIトリガーに必要なパラメータ:
#   - cause          : トリガー理由(ログ・追跡用の任意テキスト)
#   - git_sha        : チェックアウトするコミットSHA(PRのHEADコミット)
#   - github_pull_request_id : PR番号(integer)。state:modified+やdeferralに必要
#
# 注意事項:
#   - git_sha と git_branch は同時に指定できない(400エラーになる)
#   - github_pull_request_id がないとCI job固有の機能(Slim CI、deferral)が動作しない
#
# 必要なGitHub Secrets:
#   - DBT_CLOUD_API_TOKEN  : dbt Cloudのservice token(推奨)
#   - DBT_CLOUD_ACCOUNT_ID : dbt CloudのアカウントID
#   - DBT_CLOUD_JOB_ID     : トリガーするCI jobのID
#   - DBT_CLOUD_HOST       : dbt CloudのホストURL(任意。未設定時はhttps://cloud.getdbt.com)
# =============================================================================
name: dbt Cloud CI Job Trigger

on:
  pull_request:
    branches:
      - main
    types: [opened, synchronize, reopened, ready_for_review]

jobs:
  trigger-dbt-ci:
    runs-on: ubuntu-latest

    steps:
      - name: Trigger dbt Cloud CI job
        env:
          DBT_CLOUD_TOKEN: ${{ secrets.DBT_CLOUD_API_TOKEN }}
          DBT_ACCOUNT_ID: ${{ secrets.DBT_CLOUD_ACCOUNT_ID }}
          DBT_JOB_ID: ${{ secrets.DBT_CLOUD_JOB_ID }}
          DBT_CLOUD_HOST: ${{ secrets.DBT_CLOUD_HOST }}
        run: |
          set -euo pipefail

          if [ -z "${DBT_CLOUD_HOST:-}" ]; then
            DBT_CLOUD_HOST="https://cloud.getdbt.com"
          fi

          REQUEST_BODY=$(jq -n \
            --arg cause "Triggered from GitHub Actions: repo=${GITHUB_REPOSITORY}, pr=${{ github.event.pull_request.number }}, sha=${{ github.event.pull_request.head.sha }}" \
            --arg git_sha "${{ github.event.pull_request.head.sha }}" \
            --argjson github_pull_request_id ${{ github.event.pull_request.number }} \
            '{cause: $cause, git_sha: $git_sha, github_pull_request_id: $github_pull_request_id}')

          echo "Request Body:"
          echo "$REQUEST_BODY"

          HTTP_CODE=$(curl --silent --output response.json --write-out "%{http_code}" \
            --request POST \
            --url "${DBT_CLOUD_HOST}/api/v2/accounts/${DBT_ACCOUNT_ID}/jobs/${DBT_JOB_ID}/run/" \
            --header "Content-Type: application/json" \
            --header "Authorization: Token ${DBT_CLOUD_TOKEN}" \
            --data "$REQUEST_BODY" \
          )

          echo "HTTP Status: $HTTP_CODE"
          echo "Response:"
          cat response.json

          if [ "$HTTP_CODE" -ge 400 ]; then
            exit 1
          fi

API リクエストのパラメータ解説

CI ジョブを API でトリガーする際に送信するパラメータの詳細です。

パラメータ 必須 説明
cause string 任意 トリガー理由。dbt platform のログに表示される
git_sha string 必須* チェックアウトするコミット SHA
git_branch string 必須* チェックアウトするブランチ名
github_pull_request_id integer 必須 PR 番号。CI ジョブ固有の機能に必要

*git_shagit_branch はいずれか一方のみ指定可能です。両方指定すると 400 エラーになります。

ファイルの配置

ワークフローファイルは必ずリポジトリルートの .github/workflows/ に配置してください。

my-dbt-project/
├── .github/
│   └── workflows/
│       └── dbt_cloud_ci.yml    # ここに配置
├── my_dbt_project/
│   ├── models/
│   ├── macros/
│   └── dbt_project.yml
└── ...

動作確認

PR を作成すると、GitHub Actions が起動し dbt platform の CI ジョブがトリガーされます。

2026-03-26_14h40_36

2026-03-26_14h48_12

dbt platform 側でも CI ジョブが実行され、変更されたモデルのみがビルド・テストされていることを確認できます。
2026-03-26_14h41_26

Compare changesも確認することができました。
2026-03-26_14h41_56

最後に

今回の検証で、ネイティブ Git 統合が使えない環境でも、GitHub Actions と dbt platform API を組み合わせることで CI ジョブをトリガーできることが確認できました。

ポイントは API リクエストに git_shagithub_pull_request_id を含める ことです。これらがないと CI ジョブ固有の Slim CI や deferral 機能が正しく動作せず、挙動が異なってしまいます。

この記事が何かの参考になれば幸いです!

この記事をシェアする

FacebookHatena blogX

関連記事