cat posts/ci-cd-%e3%82%92%e6%95%b4%e3%81%88%e3%81%9f%e3%82%89%e3%80%8c%e5%8b%95%e3%81%84%e3%81%a6%e3%82%8b%e3%81%8b%e3%81%aa%e3%80%8d%e3%81%8c%e3%80%8c%e5%8b%95%e3%81%84%e3%81%a6%e3%82%8b%e3%81%ae%e3%81%8c.md

CI/CD を整えたら「動いてるかな」が「動いてるのが当たり前」になった

デプロイのたびにドキドキしていた時期がありました。

手順書を読みながら SSH でサーバーに入り、git pull して npm run build して、ブラウザで確認して、「よし動いた」と安堵する。毎回このルーティンでした。手順を一つ飛ばすと壊れました。

GitHub Actions で自動化した

main ブランチへのマージをトリガーに、テストを走らせてコンテナをビルドし、本番にデプロイするパイプラインを書きました。

on:
  push:
    branches: [main]

jobs:
  deploy:
    steps:
      - uses: actions/checkout@v4
      - name: Run tests
        run: npm test
      - name: Build & push image
        run: docker build -t myapp . && docker push myapp
      - name: Deploy
        run: ssh deployer@prod "docker pull myapp && docker compose up -d"

変わったこと

プルリクを出してマージするだけでデプロイが終わります。デプロイを「イベント」として意識しなくなりました。テストが落ちれば main に入らないので、本番で初めて気づくパターンが大幅に減りました。

整備コストは最初の数時間だけです。その後の恩恵を考えると、もっと早くやればよかったと思っています。