CI失敗時にデプロイを止める

Web技術メモ

はじめに

現在開発しているWebアプリで CI/CD を導入したのですが、CI が失敗しているにも関わらずデプロイまで実行されてしまうという問題がありました。

個人開発なので致命的ではありませんが、業務でやってしまうと大問題です。

問題

CI で失敗してもデプロイが実行されてしまう。

原因

デプロイのトリガーが CI の完了ではなく、単純に push イベントになっていたため。

# ❌NG
on:
  push:
    branches: [main]
  workflow_dispatch:

...

jobs:
  deploy:
    ...

対策

デプロイのトリガーを CI の実行結果を参照するように修正。

# ✅OK
on:
  workflow_run:
    workflows: ['CI']
    branches: [main]
    types: [completed]

...

jobs:
  deploy:
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    ...

テスト

修正が正しく動作するかを確認するため、意図的に CI を失敗させます。

RSpec に以下のテストコードを追加しました。

it "CI-TEST: fails intentionally" do
  expect(1).to eq(2)
end
テスト実行結果:レッド

コミット & push → CI が失敗したことを確認します。

CIが失敗することを確認

デプロイがスキップされていることを確認します。

デプロイがスキップされることを確認

これで「CI が失敗した場合にデプロイされない」ことを確認できました。

最後に、CI テスト用のコードを削除し、再度実行して正常に動作することを確認します。

テスト実行結果:グリーン

CIが成功することを確認します。

CIが成功することを確認

デプロイが実行されることを確認します。

デプロイが実行されることを確認

以上で、テスト完了です。

タイトルとURLをコピーしました