Проблема с развертыванием функций Firebase из AWS Code Build

#node.js #firebase

#node.js #firebase

Вопрос:

У меня возникли трудности с развертыванием функций Firebase из CI (а именно AWS CodeBuild) по неизвестным причинам.

firebase deploy Команда вызывается с --token аргументом, поэтому это не похоже на проблему с аутентификацией, фактически файлы хостинга развертываются без каких-либо проблем.

Одно из моих подозрений заключается в том, что когда я запускаю это локально, оно работает как шарм, и очевидное отличие заключается в той части, которая гласит package . (263 B) for uploading , что, когда я запускаю его локально, у него намного больше, чем 263 байта (говорит local 69.23 MB ). ). Кроме того, поскольку он работает локально без каких-либо проблем, я не думаю, что есть какие-либо проблемы с firebase.json неправильной настройкой.

Кто-нибудь сталкивался с подобной проблемой?

 $ export DOTENV_RUNTIME=qa1 amp;amp; cross-env NODE_ENV=production firebase deploy --only hosting,functions --token $FIREBASE_TOKEN

...
i  deploying functions, hosting
i  functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i  functions: ensuring required API cloudbuild.googleapis.com is enabled...
✔  functions: required API cloudbuild.googleapis.com is enabled
✔  functions: required API cloudfunctions.googleapis.com is enabled
i  functions: preparing . directory for uploading...
i  functions: packaged . (263 B) for uploading
✔  functions: . folder uploaded successfully
i  hosting[project-xyz]: beginning deploy...
i  hosting[project-xyz]: found 47 files in public
✔  hosting[project-xyz]: file upload complete
i  functions: updating Node.js 12 function nextServer(us-central1)...
⚠  functions[nextServer(us-central1)]: Deployment error.
Build failed: function.js does not exist; Error ID: 7485c5b6


Functions deploy had errors with the following functions:
    nextServer


To try redeploying those functions, run:
    firebase deploy --only "functions:nextServer"


To continue deploying other features (such as database), run:
    firebase deploy --except functions

Error: Functions did not deploy properly.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
 

Вот содержимое некоторых соответствующих файлов конфигурации:

firebase.json

 {
  "hosting": {
    "public": "public",
    "rewrites": [
      {
        "source": "**",
        "function": "nextServer"
      }
    ]
  },
  "functions": {
    "source": ".",
    "ignore": [
      ".git/**",
      ".firebase/**",
      ".firebaserc",
      "**/node_modules/**",
      "**/public/**",
      "**/src/**"
    ]
  }
}
 

package.json

 {
  ...
  "main": "dist/server/index.js",
  "engines": {
    "node": "12"
  },
  ...
}
 

Вот структура корневого каталога.

 $ tree -v -L 1 -a
.
├── .firebase
├── .firebaserc
├── .git
├── .gitignore
├── README.md
├── dist
├── firebase.json
├── node_modules
├── package.json
├── public
├── src
└── yarn.lock
 

Комментарии:

1. Можете ли вы рассказать, как выглядит корневой каталог вашего проекта?

2. @nVitius Спасибо за ваш комментарий. Добавлена структура корневых каталогов.

3. Где вы определяете свои функции? Ваша конфигурация firebase настроена на использование . каталога для функций, но его нет index.js . Я считаю, что это может быть причиной проблемы.

4. @nVitius Спасибо за ваш комментарий. Функции определены dist/server/index.js так, как указано в package.json main директиве. Учитывая ваш вклад, я попытался переместить index.js до корня, но никакой разницы не произошло, и размер упаковки по-прежнему кажется очень маленьким. Кроме того, я думаю, что deploy собирает этот файл без проблем, поскольку в журнале упоминается об этом: updating Node.js 12 function nextServer(us-central1). ( nextServer это одна из функций, объявленных в dist/server/index.js )

Ответ №1:

Я просмотрел исходный код firebase-tools и обнаружил, что при использовании AWS Code Build исходный код загружается и создается /codebuild/output/src123456789/src/github.com/... . Если вы проигнорируете **/src/** , никакие файлы не будут предназначены для развертывания, поскольку имя пути содержит src . Это также объясняет, почему размер пакета был таким маленьким.

Спасибо @nVitius за вопросы.