🙌
NxモノレポをGitHub Actionsでビルド・デプロイする際のTips
はじめに
Nxでビルドする際は、全てをビルドするのではなく、 nx affected
で変更が影響するものだけをビルドすることで、Nxの恩恵の大部分を享受できます。
このとき、 dist/apps
以下にビルド成果物が作成されたりされなかったりするため、それに応じて必要なデプロイだけを走らせる対応が必要です。
ここではそれをやるためのTipsを紹介します。
やったこと
dist/apps
直下のディレクトリをリストのJSONとして取得し、それをbuildジョブの出力に設定しました。そして、以降のdeployジョブで、buildジョブで出力されたJSON中に自身がビルドすべきappの名前が含まれていれば、デプロイを実行するようにしました。
jobs:
build:
runs-on: ubuntu-latest
outputs:
# JobのOutputsにJSONをセットする
affected-apps: ${{ steps.list-affected-apps.outputs.affected-apps }}
steps:
...
- run: npx nx affected --target=build --parallel=3
# dist/apps直下のディレクトリ一覧をJSONとして出力
- id: list-affected-apps
run: |
affected_apps=$(npx nx affected:apps --plain | jq -ncR '[inputs]')
echo "::set-output name=affected-apps::$affected_apps"
deploy-web:
# buildジョブのOutputをパースし、デプロイ対象のappが含まれている場合のみ実行
if: contains(fromJSON(needs.build.outputs.affected-apps), 'web')
needs: build
runs-on: ubuntu-latest
steps:
- run: # フロントのデプロイ処理
Discussion