この記事でできるようになること
mainマージ=リリースとする運用を前提に、
PR → CI → mainマージ の流れでRenderへ自動デプロイする構成を構築できるようになります。
前提
- デプロイはRender
- CIでRubocop, breakman使用
- デプロイするときはmainにプッシュしたタイミング
本構成では、main ブランチにはブランチ保護ルールを設定し、CI(Rubocop / Brakeman)が成功しないとマージできないようにしています。
そのため、main への push が発生した時点で品質チェックは通過しており、push トリガーでそのままデプロイする構成にしています。
自動デプロイの設計
1. PR作成
↓
2. GitHub ActionsでCIが走る(Rubocop / Brakeman)
↓
3. CI成功しないとマージ不可(ブランチ保護)
↓
4. mainにマージ
↓
5. 自動デプロイ
CI成功後にデプロイするような設定(workflow_run 構成)も検討しましたが、
今回はブランチを保護して品質を担保しているため、
よりシンプルに構成できるpushをトリガーにすることを採用しました。
deploy.ymlの作成
アプリのルートから.github/workflowsに移動してdeploy.ymlを作成する。
# .github/workflows/deploy.yml
name: Deploy to Render
# mainブランチにプッシュしたタイミングor手動で叩く
on:
push:
branches: [ main ]
workflow_dispatch: {}
jobs:
deploy:
# ifで手動で叩くときにそのときのブランチがmain以外のときは動かないようにしています
# 手動実行時は必ずmainを選んでください
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Trigger Render deploy hook
run: curl -fsSL -X POST "$RENDER_DEPLOY_HOOK_URL"
env:
RENDER_DEPLOY_HOOK_URL: ${{ secrets.RENDER_DEPLOY_HOOK_URL }}
secretsの設定
GitHub ActionsからsecretsにRENDER_DEPLOY_HOOK_URLというvalueを作る。
中身にはRenderのダッシュボードから自分のアプリケーションに移動し、
Settingをクリックする。
Deploy Hookの中身をコピーして、RENDER_DEPLOY_HOOK_URLの中身にペーストする。
なお、Deploy Hookの中身は秘密情報です。
漏洩のリスクがありますので、直接コードに書くことはやめましょう。
設定しているうちに怪しくなったらすぐに無効化し、再生成しましょう。
Github ActionsからDeploy to Renderを手動で叩いて挙動を確認してみましょう。
設定は以上となります。
備考
本構成は、個人開発アプリ「月めぐるノート」で実際に運用しています。
- アプリ:https://tsukimeguru-note.com/
- GitHub:https://github.com/okarina-chaan/tsukimeguru_note
個人開発ではありますが、PRを書いてからmainにマージするように徹底しています。
毎回の手動デプロイでは作業漏れやタイミングミスの原因になると感じていたので、今回実装してみました。