将nodejs应用程序部署到gae / se:gcloud app deploy:该部署文件过多

时间:2018-12-17 19:03:22

标签: node.js express google-app-engine google-cloud-platform gitlab-ci

我想运行gitlab-ci管道将我的express.js Web应用程序部署到GAE / SE环境。

当我的gitlab-ci管道开始并运行gcloud app deploy时,gcloud命令失败,如下所示:

ERROR: (gcloud.app.deploy) INVALID_ARGUMENT: This deployment has too many files. New versions are limited to 10000 files for this app.
- '@type': type.googleapis.com/google.rpc.BadRequest
  fieldViolations:
  - description: This deployment has too many files. New versions are limited to 10000
      files for this app.
    field: version.deployment.files[...]

我尝试使用命令find . -type f | wc -l对文件进行计数,但是它说我的存储库中只有3886个文件。

我的问题:

  • 为什么GAE / SE服务器说文件太多,无法上传?
  • 如果我忽略了某件事,是否有解决方法? (或者,我必须使用flex env吗?)

.gitlab-ci.yml

image: node:8

cache:
  paths:
  - node_modules/

stages:
  - deploy

deploy:production:
  stage: deploy
  environment:
    name: production
    url: `${GAE_URL}`
  before_script:
    - wget https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz
    - tar zxvf google-cloud-sdk.tar.gz && ./google-cloud-sdk/install.sh --usage-reporting=false --path-update=true
    - PATH="google-cloud-sdk/bin:${PATH}"
  script:
    - echo $GAE_KEY_FILE > gae_auth.json
    - ./google-cloud-sdk/bin/gcloud auth activate-service-account --key-file gae_auth.json
    - ./google-cloud-sdk/bin/gcloud app deploy --project=$GAE_PROJECT_ID
  only:
  - dev

.gcloudignore

.git/
node_modules/
*~

2 个答案:

答案 0 :(得分:2)

如果我正确阅读了.gitlab-ci.yml,则似乎是在将Cloud SDK安装在要部署应用程序的同一目录内-也就是您的应用程序目录。

由于SDK目录未包含在.gcloudignore文件中,因此它会作为应用程序的一部分上载。在您执行wgettar zxvf命令之后,我计算了SDK目录中的文件数量:

$> wget https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz
$> tar zxvf google-cloud-sdk.tar.gz
$> find google-cloud-sdk/ | wc -l
6442

将其添加到应用程序的3.8k文件中-超过了1万个限制。

您可以尝试将SDK安装在应用程序目录之外,也可以将其目录模式添加到.gcloudignore文件中。

答案 1 :(得分:0)

在App Engine上,每个目录有limit个文件,每个应用程序有10000个文件。我认为与您的应用程序一起部署的库导致此错误。您可以使用app.yaml文件skip_files指令来忽略部署到App Engine不需要的文件/文件夹。

要确定正在部署的文件,并可能导致此错误,可以按如下所示在deploy命令中将verbosity标志设置为 debug

  

gcloud应用程序部署--verbosity = debug

我还找到了类似的StackOverflow答案,其中描述了所有详细信息here

希望这会有所帮助。