GitLab CI
GitLab CIを使って、マージリクエスト(MR)の作成やマージをトリガーに設定の差分検出や反映を自動化できます。
GitHub Actions向けの公式Composite Action bm-actionに相当するツールは、GitLab向けには提供していません。GitLab CIでは、id_tokensキーワード (opens in a new tab)でOIDC ID Tokenを取得し、環境変数BM_OIDC_TOKENを通じてbm syncを実行します。
認証
bm syncはOIDC ID Tokenを使ってベースマキナのサービスアカウントとして認証します。GitLab CIでは、.gitlab-ci.ymlのid_tokensキーワード(GitLab 15.7以降で利用可能)でID Tokenを発行します。
id_tokensで発行したID Tokenは、指定した名前の環境変数としてジョブに渡されます。環境変数名をBM_OIDC_TOKENにすると、bm syncがこの環境変数を自動で参照します。
あらかじめサービスアカウントにOIDC信頼ポリシーを設定し、GitLabが発行するID TokenのIssuer / Audience / Bound Claimsが整合していることを確認してください。
| 項目 | 設定値 |
|---|---|
Issuer | https://gitlab.com(GitLab.comの場合。セルフマネージド版はGitLabインスタンスのURL) |
Audience | id_tokensのaudに指定した値(例:https://basemachina.com) |
Bound Claims | 呼び出し元のプロジェクト・ブランチを特定するclaim(例:key: sub, pattern: project_path:my-group/my-project:ref_type:branch:ref:main) |
audは企業アカウントごとに固有の値(例:https://your-tenant.example.com)を設定すると、漏洩したトークンが他の企業アカウントで悪用されるのを防げます。OIDC信頼ポリシーに登録したAudienceと完全に一致する値を指定してください。
セットアップ
.gitlab-ci.ymlに、MR作成時に差分を検出するジョブと、デフォルトブランチへのマージ時に設定を反映するジョブを定義します。
default:
image: node:22
stages:
- sync
# MR作成時に差分を検出する(ドライラン)
bm_sync_dry:
stage: sync
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
id_tokens:
BM_OIDC_TOKEN:
aud: "https://basemachina.com"
script:
- npm ci
- npx tsc --noEmit
- npx bm sync --dry
# デフォルトブランチへのマージ時に開発環境へ反映する
bm_sync:
stage: sync
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
id_tokens:
BM_OIDC_TOKEN:
aud: "https://basemachina.com"
script:
- npm ci
- npx tsc --noEmit
- npx bm syncnpx tsc --noEmitで型チェックを通してからbm syncを実行すると、設定ファイルやJavaScriptアクション、同じリポジトリで管理しているビューコードの型エラーを同期前に検出できます。
開発環境への反映時に設定ファイルから削除されたコード管理のアクションを無効化したい場合は、npx bm sync --with-disableを指定します。--dryや--with-disableなどのオプションの詳細はbm syncをご参照ください。
Web UIで作成した未取り込みのアクションは、ローカルでbm pullを実行してリポジトリに取り込み、通常のMRとしてレビューしてください。
差分の確認
bm syncは実行環境を自動的に検出します。GitLab CI上では、折り畳み可能なMarkdown(<details>タグ)として差分を出力します。bm sync --dryの実行結果はジョブのログから確認できます。
MRのコメントとして差分を表示したい場合は、bm sync --dryの出力をglab CLI (opens in a new tab)やGitLab APIでMRのノートに投稿してください。GitHub Actionsのbm-actionが行なうsticky-comment(同じコメントの上書き投稿)に相当する処理は、GitLab向けには提供していません。
環境への同期
開発環境から検証環境や本番環境へ同期する場合は、npx bm sync <環境ID>を実行します。環境IDはGitLab CI/CD変数 (opens in a new tab)などで管理することを推奨します。
script:
- npm ci
- npx bm sync "$BM_PRD_ENV_ID"環境間の同期では、同期元で無効化されているアクションも同期先へ無効状態として反映されます。同期先の指定方法やオプションの詳細はbm syncをご参照ください。