CI/CDの設定
CI/CDを使うと、PRやマージリクエスト(MR)の作成・マージをトリガーに、設定の差分検出や反映を自動化できます。コード管理は以下のCIサービスに対応しています。
- GitHub Actions — 公式のComposite Action
bm-actionでOIDC認証・bm sync実行・PRコメント投稿を一括で扱う - GitLab CI —
id_tokensでOIDC ID Tokenを取得し、bm syncを実行する
認証の考え方
どちらのCIでも、bm syncはOIDC ID Tokenを使ってベースマキナのサービスアカウントとして認証します。CI/CDが発行したID Tokenを環境変数BM_OIDC_TOKENに設定すると、bm syncがこれを参照します。
あらかじめサービスアカウントにOIDC信頼ポリシーを設定し、CI/CDが発行するID TokenのIssuer / Audience / Bound Claimsが整合していることを確認してください。IssuerやBound Claimsに設定する具体的な値はCIサービスごとに異なります。詳細は各ページをご参照ください。Bound Claimsに指定するclaimの選び方はBound Claimsの選び方をご参照ください。
bm syncは実行環境(GitHub Actions、GitLab CI、ローカル端末など)を自動で検出し、出力形式を切り替えます。GitHub ActionsおよびGitLab CI上では、変更の詳細を<details>タグで折り畳んでPRやMRのコメントに貼り付けやすいMarkdown形式で出力します。
差分プレビューだけを実行する
bm sync --dryは、設定ファイルとベースマキナ上の設定を読み取って比較するだけで、変更を一切加えません。同期先の環境IDを指定した場合も同じです。そのため、どのグループにも所属していない(ロールを持たない)サービスアカウントでも実行でき、差分プレビューを取得できます。
一方、変更を反映するbm sync(--dryなし)には管理権限が必要です。開発環境への反映にはアクション・ビューの管理権限、他の環境への同期には有効化設定の管理権限が要ります。権限を持たないサービスアカウントで実行するとエラーになり、設定は反映されません。
この差を利用すると、反映用と差分プレビュー用でサービスアカウントを分け、差分プレビュー用にはどのグループへの所属も与えない構成にできます。PRでの差分確認は権限を持たないサービスアカウントに任せ、実際の反映は権限を持つサービスアカウントに限定できます。
GitHub Actionsでの具体的な設定方法は差分プレビューのみを実行するワークフローをご参照ください。
認証先サービスアカウントの指定
BM_OIDC_TOKENに設定したID Tokenが複数のサービスアカウントの信頼ポリシーに合致しうる場合があります。このとき、環境変数BM_SERVICE_ACCOUNT_EMAILに認証先のサービスアカウントのメールアドレスを設定すると、どのサービスアカウントとして認証するかを指定できます。省略した場合は、合致した信頼ポリシーのうち最初の1件が選ばれます。複数のポリシーに合致しうる状況では意図しないサービスアカウントとして認証される可能性があるため、BM_SERVICE_ACCOUNT_EMAILを指定して曖昧さをなくすことを推奨します。