本番環境をDockerイメージを使ってデプロイするときに思わぬ変更で本番環境のRailsアプリケーションが起動できないことがあります。
それを事前に検知できたら便利ということで最低限Railsのサーバーが立ち上がりヘルスチェックのエンドポイントが正常なレスポンスを返すことを確認するGitHub Actionを作ったのでメモ📝
name: Docker build health check on:pull_request:jobs:build:timeout-minutes:10runs-on: ubuntu-latest steps:- uses: actions/checkout@v2 - name: get Ruby version id: ruby-version run: echo "value=$(cat .ruby-version)">> $GITHUB_OUTPUT - name: get Node version id: node-version run: echo "value=$(cat .node-version)">> $GITHUB_OUTPUT - name: Build uses: docker/build-push-action@v6 with:push:falsetags: | sample-app:latest build-args: | RUBY_VERSION=${{ steps.ruby-version.outputs.value }} NODE_VERSION=${{ steps.node-version.outputs.value }} RAILS_ENV=production - name: run server and health check run: | docker run -d -p 3000:3000 --rm \ --env SECRET_KEY_BASE="dummy" \ --name sample-app sample-app sleep 5 # サーバーが完全に起動するのを待つ curl -sSf http://localhost:3000/up || exit 1- name: stop server run: docker stop sample-app
上記のように単純にdocker/build-push-action
を使ってbuildしたイメージをGitHub Actionに最初から入っているDockerで起動してRails標準のヘルスチェックのパスにcurlでリクエストを送信してるだけ📝
Rails v7.1から追加された標準のヘルスチェックのエンドポイント、こういうちょっとした起動確認に便利ですね✨