Blog

GitHub ActionsとCodeシリーズを使用してモノレポ用のデプロイパイプラインを構築した話

はじめに

こんにちは。ニフティ株式会社の添野翔太です。
今回はモノレポ用のデプロイパイプラインを構築した話を共有します。

背景

現在、@niftyトップページではアプリケーション基盤の刷新を進めていますが、その過程で一部においてモノレポを採用しています。このリポジトリは、Web3層アーキテクチャにおけるWeb層にあたるもの、App層にあたるもの、およびその他のバッチ処理からなる構成です。
デプロイパイプラインの構築には、Github ActionsとCodeシリーズ(AWS CodePipeline、AWS CodeBuild、AWS CodeDeploy)を利用しています。

モノレポ用のデプロイパイプラインを作ってみる

Codeファミリーに関する問題として、一つのパイプラインに対応するブランチが一つしか設定できないという点が挙げられます。
そこで、Stack OverflowのQ&Aを参考にしながら、GitHub Actions上で特定のブランチに強制Pushする機構を作成しました。
まず、ディレクトリ構成を以下に示します。 次に、特定のブランチかつ特定のファイルで、Codeシリーズが監視するブランチに強制Pushするコード(.github/workflows/auto_push.yaml)を以下に示します。pathsキーには、主にCodeシリーズで使用するファイル類(BuildSpecやAppSpec、ECSタスク定義など)やデプロイ対象のソースコードを並べます。 そして、./.github/actions/applications/sample/deploy/action.yamlに共通処理である強制Pushを行う以下のコードを記載します。 上記コードのイメージを以下に示します。developブランチとmasterブランチはPRを使用して更新します。PRがマージされると、自動的に別のブランチに強制的にPushされます。強制Pushするブランチ先(pipeline/dev/appブランチとpipeline/prod/appブランチ)は、Codeシリーズを使用して作成するデプロイパイプラインとそれぞれ対応しています。
ここまでApp層のみをデプロイ対象として説明しましたが、Web層をデプロイしたい場合にも同様に展開できます。

おわりに

今回はモノレポ用のデプロイパイプラインを構築した話を紹介しました。何かの参考になれば幸いです。

We are hiring!

ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です! ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! Tech TalkやMeetUpも開催しております! こちらもお気軽にご応募ください!