#deploy (1)
environment inputの罠
workflow_dispatch に environment の choice input を用意すると、「Use workflow from」(ブランチ選択UI、削除不可)との組み合わせで 任意ブランチのコードを本番にデプロイできてしまう。デプロイ先はブランチで自動決定し、inputに環境選択を持たせない設計が安全。
# NG: inputで環境を選ばせる
environment: ${{ inputs.environment }}
# OK: ブランチで自動決定
environment: ${{ github.ref == 'refs/heads/master' && 'production' || 'develop' }}
ブランチガードパターン
develop/master 以外からの手動実行をスキップする:
jobs:
deploy:
if: github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/master'
concurrency group も同じ式で統一すると一貫性が保てる。
develop push の自動デプロイは慎重に
開発ブランチへの push で自動デプロイすると、他メンバーが個別に Functions 等を反映している場合に競合する。開発環境は手動デプロイの方が安全なケースがある。
Environments の Required Reviewers の制約
承認設定は環境単位で適用される。push 自動デプロイは即時、手動デプロイは承認必須、を分けたい場合は環境名を分ける必要がある(例: production / production-manual)。ただしコードの安全性は PR レビュー、デプロイの安全性はブランチ制約で役割分担すれば、デプロイ時の承認は不要な場合が多い。
新規ワークフロー作成チェックリスト
- デプロイ先はブランチで自動決定しているか(environment input 不使用)
- develop/master 以外の実行をスキップするガードがあるか
- concurrency 設定があるか
- timeout-minutes が設定されているか
- push トリガーのブランチは適切か(develop の自動デプロイが本当に必要か)
- README に手順・パラメータが記載されているか