はじめに
GitHub Actions を利用した CI/CD パイプラインの設定では、効率的なジョブトリガーの設計が重要です。
特に、main
ブランチへのすべてのプッシュでワークフローをトリガーする設定では、不要なジョブが実行され、リソースの浪費や実行時間の増加につながることがあります。
本記事では、特定のファイルやディレクトリに変更があった場合のみワークフローをトリガーする方法を中心に、無駄を省き、効率的な運用を実現するための設定方法について解説します。
少し困っていたこと
以下の設定では、main
ブランチに対するすべての変更(ファイルの種類や内容に関係なく)でワークフローがトリガーされます。
on:
push:
branches:
- main
そのため、不要なトリガーが発生し、この先、ちょっとした変更を加えただけで、全てが実行されて少しだけストレスでした
問題点:全ての変更でトリガーされる
この設定では、main
ブランチに対するすべての変更(ファイルの種類や内容に関係なく)でワークフローがトリガーされます。その結果、以下の問題が発生する可能性があります:
問題点
-
非効率なリソース消費
- 不必要なジョブ実行により、GitHub Actions の実行時間や料金が浪費されます。
-
無関係な変更でも実行される
- 例えば、ドキュメントやREADMEファイルの変更でもジョブが実行され、効率が低下します。
-
ジョブの実行が遅くなる
- 不要な実行が増え、並列実行数の制限に達することで、重要なジョブの実行が遅れる可能性があります。
-
ビルド・デプロイの無駄
- アプリケーションに関係のない変更(例: ドキュメント更新など)でもDockerイメージのビルドやS3へのデプロイが行われ、無駄なリソース利用が発生します。
変更前の.github/workflows/deploy_to_s3.yml
のファイルについて
name: Deploy to S3
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
・・・(省略)
-
設定内容
main
ブランチへのすべてのプッシュイベントでワークフローがトリガーされる設定。 -
動作
ファイルの種類や内容に関係なく、すべての変更でジョブが実行される。
変更後の.github/workflows/deploy_to_s3.yml
のファイルについて
name: Deploy to S3
on:
push:
branches:
- main
paths:
- 'src/**' # srcディレクトリ以下の変更のみでトリガー
jobs:
deploy:
runs-on: ubuntu-latest
・・・(省略)
on.push.paths:
paths
フィールドを追加し、src/
ディレクトリ以下の変更を検知してトリガー。
これにより、main
ブランチの中でも src/
ディレクトリ内に変更がない場合はデプロイが実行されません。
src/**:
Reactファイルが通常置かれるディレクトリである src/
以下を監視。
この設定により、src/
内で変更があった場合にのみデプロイプロセスが実行されます。
変更後の設定について
上記のように変更する前は、テスト用のHTMLファイルを作成すると、すべての場合でGitHub Actionsがトリガーされていました。
しかし、今回の設定変更によって、src/
内で変更があった場合にのみGitHub Actionsがトリガーされるようになり、正しく設定が反映されていることを確認できました。
まとめ
ここまでお読みいただき、ありがとうございました!今回の実装は簡単でしたが、このような細かい配慮が非常に重要であると改めて実感しました。
インフラのコード化に向けた第一歩として、非常に重要なポイントです。この内容をまとめることで、より深い理解を得ることができました。
この記事が、誰かの技術的な支えになれば嬉しいです!