CI/CDの設定
GitHub Actionsを使って、PRの作成やマージをトリガーに設定の差分検出や反映を自動化できます。
概要
CI/CDでは、bm syncコマンドをGitHub Actionsから実行することで、以下のような自動化が可能です。
- PR作成時:
bm sync --dryで差分を検出し、PRにコメントする - PRマージ時:
bm syncで設定を開発環境に反映する - 環境同期時:
bm sync <環境ID>で環境間のバージョンと有効化設定を同期する
ブランチ構成や環境の対応は、プロジェクトの運用に合わせて自由に設定できます。具体的な設定例は運用例をご参照ください。
認証
bm syncはベースマキナに対して認証する必要があります。CI/CDでは、CI/CDが発行するOIDC ID Tokenを使用してサービスアカウントとして認証します。
前提
- 始め方でOIDC信頼ポリシーが設定済みであること
- OIDC信頼ポリシーの
Issuer/Audience/Bound Claimsが、CI/CDの発行するID Tokenと整合していること
環境変数
bm syncは、以下のいずれかの方法で認証情報を読み取ります。
| 方法 | 用途 |
|---|---|
環境変数 BM_OIDC_TOKEN | CI/CDでの実行。CI/CDが発行するOIDC ID Tokenを設定する |
~/.basemachina/credentials.json | ローカルでの実行。bm loginコマンドで自動的に保存される |
BM_OIDC_TOKENが設定されている場合は、BM_OIDC_TOKENのトークンが優先されます。
セットアップ
GitHub Actionsの設定ファイル
GitHub Actionsのワークフローでは、OIDC ID Tokenを発行するためにid-token: writeのパーミッションが必要です。取得したID Tokenを環境変数BM_OIDC_TOKENに設定し、bm syncを実行します。
name: Sync to dev
on:
pull_request:
branches: [main]
push:
branches: [main]
permissions:
id-token: write # OIDC ID Token の発行に必須
contents: read
pull-requests: write # PRコメントの投稿に必要(PR作成時のみ)
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- name: Fetch OIDC ID Token
id: oidc
uses: actions/github-script@v7
with:
script: |
const token = await core.getIDToken("https://basemachina.com")
core.setSecret(token)
core.setOutput("token", token)
- name: Dry run
if: github.event_name == 'pull_request'
run: npx bm sync --dry
env:
BM_OIDC_TOKEN: ${{ steps.oidc.outputs.token }}
- name: Sync
if: github.event_name == 'push'
run: npx bm sync
env:
BM_OIDC_TOKEN: ${{ steps.oidc.outputs.token }}core.getIDToken("https://basemachina.com")の引数は、OIDC信頼ポリシーで設定したAudienceと一致している必要があります。一致しない場合、bm syncが認証エラーになります。
動作の流れ
PR作成時の差分検出
- PRが作成されると、CIが自動で
bm sync --dryを実行します。 - 設定ファイルとベースマキナ上の設定の差分が検出されます。
- 差分の内容がPRにコメントとして投稿されます(PRコメントに貼り付ける処理はワークフロー側で実装します)。
これにより、マージ前に設定変更の影響を確認できます。
開発環境への反映時、bm syncは実行環境を自動で検出し、GitHub ActionsおよびGitLab CI上ではPRコメントに貼り付けやすいMarkdown形式(<details>タグで折り畳み可能)で出力します。オプションによる切り替えは不要です。
PRマージ時の反映
- PRがマージされると、CDが自動で
bm syncを実行します。 - 設定の差分がベースマキナの開発環境に反映されます。
環境への同期
環境への同期用のブランチにマージすると、bm sync <環境ID>が実行され、環境間のバージョンと有効化設定の同期が行なわれます。