開発中の機能
コード管理
CI/CDの設定

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を使用してサービスアカウントとして認証します。

前提

  1. 始め方OIDC信頼ポリシーが設定済みであること
  2. OIDC信頼ポリシーのIssuer/Audience/Bound Claimsが、CI/CDの発行するID Tokenと整合していること

環境変数

bm syncは、以下のいずれかの方法で認証情報を読み取ります。

方法用途
環境変数 BM_OIDC_TOKENCI/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作成時の差分検出

  1. PRが作成されると、CIが自動で bm sync --dry を実行します。
  2. 設定ファイルとベースマキナ上の設定の差分が検出されます。
  3. 差分の内容がPRにコメントとして投稿されます(PRコメントに貼り付ける処理はワークフロー側で実装します)。

これにより、マージ前に設定変更の影響を確認できます。

開発環境への反映時、bm syncは実行環境を自動で検出し、GitHub ActionsおよびGitLab CI上ではPRコメントに貼り付けやすいMarkdown形式(<details>タグで折り畳み可能)で出力します。オプションによる切り替えは不要です。

PRマージ時の反映

  1. PRがマージされると、CDが自動で bm sync を実行します。
  2. 設定の差分がベースマキナの開発環境に反映されます。

環境への同期

環境への同期用のブランチにマージすると、bm sync <環境ID>が実行され、環境間のバージョンと有効化設定の同期が行なわれます。