【问题标题】:deploy nodejs app to gae/se: gcloud app deploy : This deployment has too many files将 nodejs 应用程序部署到 gae/se: gcloud app deploy :此部署文件太多
【发布时间】:2019-05-18 04:37:16
【问题描述】:

我想运行 gitlab-ci 管道将我的 express.js 网络应用程序部署到 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/
*~

【问题讨论】:

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


    【解决方案1】:

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

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

    gcloud app deploy --verbosity=debug

    我还找到了一个类似的 StackOverflow 答案,描述了所有这些细节here

    希望这会有所帮助。

    【讨论】:

    • 感谢您的建议。虽然 app.yaml 文件中的skip_files 设置不能解决这个问题,但gcloud app deploy --verbosity=debug 选项可以帮助我更清楚地了解它的行为。
    【解决方案2】:

    如果我正确阅读了您的.gitlab-ci.yml,您似乎将云 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 文件中 - 超过了 10k 的限制。

    您可以尝试将 SDK 安装在应用程序目录之外的某个位置,或者您可以将其目录模式添加到 .gcloudignore 文件中。

    【讨论】:

    • 非常感谢您的帮助。你的假设是绝对正确的。在我将google-cloud-sdk/ 目录添加到.gcloudignore 文件后,gcloud app deploy 命令成功完成。我想我必须更多地了解 docker 和 gitlab-ci runner 是如何工作的。
    猜你喜欢
    • 2017-07-16
    • 2019-04-10
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2017-04-10
    相关资源
    最近更新 更多