Railway/Tutorials
GitHub Actions PR環境
GitHub Actions と Railway CLI を使って PR 用の環境を自動作成する方法を解説します。
著者: AIイノベーションズ 阿部隼也(X / Twitter)GitHub Actions PR環境
Railwayのプレビュー環境機能は非常に強力ですが、CI/CDプロセスをより細かく制御したい場合があるかもしれません。このチュートリアルでは、GitHub ActionsとRailway CLIを使用して、プルリクエスト(PR)ごとに独自のプレビュー環境をプログラムで作成および管理する方法を説明します。
The Action
このワークフローの中核は、GitHub Actions内からRailway CLIコマンドを実行することです。これにより、環境の作成、サービスのデプロイ、データベースのシーディングなど、カスタムの自動化を構築できます。
以下は、新しいプルリクエストが開かれるたびに、Railwayで新しい環境を作成し、アプリケーションをデプロイし、データベースをマイグレーションし、最後にPRにデプロイ先のURLをコメントするワークフローの例です。
name: PR Environment
on:
pull_request:
types: [opened]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Create and Deploy PR Environment
uses: railwayapp/action@v1
with:
railway_token: ${{ secrets.RAILWAY_TOKEN }}
run: |
# Create a new environment based on the PR number
railway environment create pr-${{ github.event.number }}
# Deploy the services to the new environment
railway up --environment pr-${{ github.event.number }}
# Run database migrations
railway run --environment pr-${{ github.event.number }} --service backend npm run db:migrate
- name: Comment on PR with Deployment URL
uses: actions/github-script@v6
with:
script: |
const { data: services } = await github.rest.repos.getRepoServices({
owner: context.repo.owner,
repo: context.repo.repo,
});
const frontendService = services.find(s => s.name === 'frontend');
const url = frontendService.domains[0].name;
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `🚀 Preview environment deployed at: https://${url}`
})
プルリクエストがマージまたはクローズされたときに、対応する環境をクリーンアップするための別のワークフローを追加することも重要です。
結論
GitHub ActionsとRailway CLIを組み合わせることで、プレビュー環境のライフサイクルを完全に自動化し、開発ワークフローを大幅に効率化できます。これにより、コードレビューが迅速化され、すべての変更がマージ前に徹底的にテストされることが保証されます。
PR