
dbt Cloud でカスタムブランチを使用する
はじめに
dbt Cloud では、Custom Branch(カスタムブランチ)としてデフォルトブランチ以外のブランチを保護対象とすることができます。
こちらを試してみたので概要を本記事でまとめます。
dbt Cloud で保護対象となるブランチ
dbt Cloud でプロジェクトを作成すると、デフォルトブランチが保護対象となります。リポジトリ側で特に変更していない場合は、デフォルトである main ブランチがそのまま保護対象となります。保護対象のブランチは名称の横に鍵マークが付与されています。
dbt Cloud の IDE で作業する場合、保護されたブランチであれば、他のブランチに移動せずにファイルを編集してしまっても変更は、新しいブランチに対してコミットされます。
例えば、main ブランチでファイルを編集しても、この状態でいきなりファイルを作成し Commit and sync としても下図のように変更は新しいブランチに対するものとなります。
当然、新しく作成されるブランチも main から派生します。
保護対象のブランチに関する注意点として、保護対象のブランチは dbt プロジェクトで一つのみです。
カスタムブランチ
カスタムブランチの作成
カスタム ブランチを指定すると、デフォルトの動作がオーバーライドされます。つまり、カスタム ブランチとして指定したブランチが保護対象となり、そこから新しい開発ブランチを作成できるようになります。
カスタムブランチは「Deploy > Environments」から指定の環境に対して設定できます。
任意の環境を選択し「Settings > Edit」から赤枠内のチェックボックスにチェックを入れるとカスタムブランチとして指定するブランチを指定できます。
設定を保存し IDE を再起動すると、指定したブランチが保護対象のブランチとなっています。
同時に保護されるのは一つのみなので、ここではデフォルトの main は保護対象のブランチから外れます。
なお、カスタムブランチを指定する際は事前にリポジトリ側で対象のブランチを作成しておく必要があります。
ブランチがない場合、IDE 起動時にとエラーとなります。
カスタムブランチの挙動
dbt Cloud におけるカスタムブランチは、デフォルトブランチのような挙動をとります。カスタムブランチ上で新たな開発ブランチを作成すると、当然ですが、カスタムブランチから派生していることが確認できます。
カスタムブランチに対してマージを行い、デフォルトブランチ(main)に dbt Cloud 上で移動すると下図のように表示されます。リポジトリ側で特に保護を有効化していない場合、プルできてしまいます。
同様に、dbt Cloud で保護されていない main ブランチでファイルを編集すると直接プッシュも可能です。
カスタムブランチを指定しない本番環境に該当する Environment に対する挙動
デフォルトブランチとは異なるブランチをカスタムブランチとして指定した状態で本番環境に該当する Environment を定義し、この環境に対するジョブを定義します。
この際、環境定義時にカスタムブランチを指定することもできますが、まずは特に指定しない状態で環境を定義します。
ジョブを実行すると、デフォルトブランチの内容(main ブランチ)がクローンされこのブランチの内容でモデルがビルドされます。
リポジトリ側でデフォルトブランチを変更した際の挙動
Git 側でデフォルトブランチを main から develop に変更してみます。
この状態で再度同じ環境に対してジョブを実行するとデフォルトブランチ(develop)の内容でモデルがビルドされます。
カスタムブランチを指定した際の本番環境に該当する Environment に対する挙動
ここで本番を想定した環境のカスタムブランチを下図のように変更します。
この時点で設定は以下になります。
- デフォルトブランチ:develop(main から変更)
- 本番環境のカスタムブランチ:main
この状態でジョブを実行します。実行ログは以下のようになります。
通常であればデフォルトブランチの内容でジョブが実行されますが、カスタムブランチを指定する場合、ここで指定したブランチがデフォルトブランチのような扱いとなります。
ここまでの各実行のまとめは以下の通りです。
デフォルトブランチを変更後に dbt プロジェクトを作成した場合
ここではプロジェクト作成後にデフォルトブランチを変更しましたが、あらかじめデフォルトブランチを変更し、dbt プロジェクトを作成した場合は、変更後のデフォルトブランチが保護対象となります。
main ブランチの保護を有効化
カスタムブランチを指定する場合 main ブランチは保護対象から外れるため、保護の設定はリポジトリ側で実施しておく必要があります。
例として main に対して以下の保護を有効化します。
- Require a pull request before merging
- Block force pushes
この状態であれば dbt Cloud 上で main ブランチから Commit and sync してしまった場合でもエラーとできます。
さいごに
dbt Cloud におけるカスタムブランチを試してみました。デフォルトのブランチを変更する場合やカスタムブランチを指定する際は、main ブランチが保護対象ではなくなるので、リポジトリ側で保護設定が必要です。
こちらの内容が何かの参考になれば幸いです。