3ブランチ運用
main、stg、prdの3つのブランチで、開発環境・検証環境・本番環境を管理する運用例です。
本番リリース前に検証環境での動作確認を挟むため、より安全なリリースフローを実現できます。
ブランチと環境の対応
| ブランチ | ベースマキナの環境 | 説明 |
|---|---|---|
main | 開発環境 | 日常的な開発を行なうブランチ |
stg | 検証環境 | リリース前の検証を行なうブランチ |
prd | 本番環境 | 本番リリース用のブランチ |
開発環境への変更
1. featureブランチで開発
mainからfeature/xxxブランチを作成し、アクションやビューの設定を編集してPRを作成します。
2. CIで差分を確認
PRが作成されると、CIでbm push --dryが実行され、設定の差分がPRにコメントされます。
3. マージして開発環境に反映
PRをマージすると、CDで設定がベースマキナの開発環境に反映されます。
反映される内容は、変更した設定の種類によって異なります。
| 設定の種類 | 反映方法 |
|---|---|
| アクション | 新しいバージョンが作成され、開発環境では常に最新バージョンが使用されるため即時反映 |
| ビュー | 開発環境用のストレージにビルドしたファイルが配置される |
| レビュー設定、データソースなど | 全環境に変更が反映 |
検証環境への変更
開発環境で確認が取れたら、検証環境にデプロイします。
1. PRの作成
stgブランチにmainをマージするPRを作成します。
2. マージして検証環境にデプロイ
PRをマージすると、CDで以下の処理が実行されます。
- ビュー: 検証環境用のストレージにビルドしたファイルが配置される
- アクション: 検証環境のすべてのアクションのバージョンが開発環境に合わせて同期される
本番環境への変更
検証環境で確認が取れたら、本番環境にデプロイします。
1. PRの作成
prdブランチにstgをマージするPRを作成します。
2. マージして本番環境にデプロイ
PRをマージすると、CDで以下の処理が実行されます。
- ビュー: 本番環境用のストレージにビルドしたファイルが配置される
- アクション: 本番環境のすべてのアクションのバージョンが検証環境に合わせて同期される
コード管理した設定のWeb上での変更
コード管理している設定は、引き続きWeb上(ベースマキナの管理画面)からも変更できます。
ただし、Web上で変更した内容はGitリポジトリには反映されないため、次回のbm pushで差分として検出されます。コード管理を開始した後は、設定の変更はコードで行なうことを推奨します。
⚠️
Web上での変更時には、コード管理されている設定であることを示す警告が表示されます。
CI/CDの設定例
| トリガー | 対象ブランチ | 実行内容 | 説明 |
|---|---|---|---|
| PR作成時 | main | bm push --dry | 設定の差分をPRにコメント |
| PRマージ時 | main | bm push | 設定の差分を開発環境に反映 |
| PRマージ時 | stg | bm deploy <stg環境ID> | 開発環境のバージョンを検証環境に同期 |
| PR作成時 | prd | bm deploy --dry <prd環境ID> | 本番環境へのデプロイの差分をPRにコメント |
| PRマージ時 | prd | bm deploy <prd環境ID> --from <stg環境ID> | 検証環境のバージョンを本番環境に同期 |
GitHub Actionsの設定ファイル例
以下は.github/workflows/に配置するワークフローファイルの例です。
開発環境への反映(.github/workflows/push.yml)
name: Push to dev
on:
pull_request:
branches: [main]
push:
branches: [main]
jobs:
push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- name: Dry run
if: github.event_name == 'pull_request'
run: bm push --dry
env:
BASEMACHINA_TOKEN: ${{ secrets.BASEMACHINA_TOKEN }}
- name: Push
if: github.event_name == 'push'
run: bm push
env:
BASEMACHINA_TOKEN: ${{ secrets.BASEMACHINA_TOKEN }}検証環境へのデプロイ(.github/workflows/deploy-stg.yml)
name: Deploy to stg
on:
push:
branches: [stg]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- name: Deploy
run: bm deploy <stg環境ID>
env:
BASEMACHINA_TOKEN: ${{ secrets.BASEMACHINA_TOKEN }}本番環境へのデプロイ(.github/workflows/deploy-prd.yml)
name: Deploy to prd
on:
pull_request:
branches: [prd]
push:
branches: [prd]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- name: Dry run
if: github.event_name == 'pull_request'
run: bm deploy --dry <prd環境ID> --from <stg環境ID>
env:
BASEMACHINA_TOKEN: ${{ secrets.BASEMACHINA_TOKEN }}
- name: Deploy
if: github.event_name == 'push'
run: bm deploy <prd環境ID> --from <stg環境ID>
env:
BASEMACHINA_TOKEN: ${{ secrets.BASEMACHINA_TOKEN }}