はじめに
Next.js環境でfirebaseを使用したCD構築の際に、上記のエラーが出たので解決策をまとめました。
問題
GitHub Actions
で自動で firebase```` にデプロイしようと、
main.yml``` を作成しました。
deploy:
name: Pushed deploy & test
on:
push:
workflow_dispatch:
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: "18"
- name: Install dependencies
run: npm install
- name: Run build
run: npm run build
name: deploy
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Node.js and cache // エラー箇所
uses: actions/setup-node@v2 // ..
with: // ..
node-version: "18" // ..
cache: "npm" // ..
- name: Install firebase-tools
run: npm install --save-dev firebase-tools
- name: Decode Firebase service account key
run: |
echo "${{ secrets.FIREBASE_KEY }}" | base64 -d > ./firebase-key.json
echo "GOOGLE_APPLICATION_CREDENTIALS=${{ github.workspace }}/firebase-key.json" >> $GITHUB_ENV
- name: change space
run: |
./node_modules/.bin/firebase use ${{ secrets.FIREBASE_PROJECT_ID }}
- name: Deploy to Firebase Hosting
run: |
./node_modules/.bin/firebase deploy
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
FIREBASE_CLI_EXPERIMENTS: webframeworks
- name: delete GOOGLE_APPLICATION_CREDENTIALS
run: rm $GOOGLE_APPLICATION_CREDENTIALS
if: ${{ always() }}
上記のアクションで GiuHub
に push
すると、
Cache service responded with 400
というエラーが出る。
解決方法
setup-node@v2
ではなく setup-node@v4
を使用することでエラーは出なくなりました。
v4ではv2 のキャッシュエラーでアクションが失敗しないように修正されたようです。
v4でのキャッシュの変更点
actions/setup-node@v4は、内部的にactions/cache@v3以降のバージョンを使用しています。actions/cache@v3では、キャッシュの安定性が大幅に向上し、以下のような変更が加えられました。堅牢なキャッシュキーの取り扱い: v3は、キャッシュキーの取り扱いをより堅牢にし、キャッシュキーの長さや文字に関する制限を緩和しました。これにより、複雑なキーでもエラーが発生しにくくなりました。
キャッシュの分割と統合: v3は、キャッシュのアップロードとダウンロードのプロセスを改善し、ネットワークの問題やキャッシュサービスの応答不良に対する耐性を高めました。
より信頼性の高いキャッシュサービス連携: キャッシュサービスのAPIとの通信方法が改善され、エラーの発生頻度が減少しました。
name: Pushed deploy & test
on:
push:
workflow_dispatch:
jobs:
build:
name: build
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "18"
- name: Install dependencies
run: npm install
- name: Run build
run: npm run build
deploy:
name: deploy
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js and cache
uses: actions/setup-node@v4
with:
node-version: "18"
cache: "npm"
- name: Install firebase-tools
run: npm install --save-dev firebase-tools
- name: Decode Firebase service account key
run: |
echo "${{ secrets.FIREBASE_KEY }}" | base64 -d > ./firebase-key.json
echo "GOOGLE_APPLICATION_CREDENTIALS=${{ github.workspace }}/firebase-key.json" >> $GITHUB_ENV
- name: change space
run: |
./node_modules/.bin/firebase use ${{ secrets.FIREBASE_PROJECT_ID }}
- name: Deploy to Firebase Hosting
run: |
./node_modules/.bin/firebase deploy
env:
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
FIREBASE_CLI_EXPERIMENTS: webframeworks
- name: delete GOOGLE_APPLICATION_CREDENTIALS
run: rm $GOOGLE_APPLICATION_CREDENTIALS
if: ${{ always() }}
おわりに
バージョンをUP or DOWNさせることをまずは検討することが大事。
参考