我想运行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个文件。
我的问题:
.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/
*~
答案 0 :(得分:2)
如果我正确阅读了.gitlab-ci.yml
,则似乎是在将Cloud SDK安装在要部署应用程序的同一目录内-也就是您的应用程序目录。
由于SDK目录未包含在.gcloudignore
文件中,因此它会作为应用程序的一部分上载。在您执行wget
和tar 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。
希望这会有所帮助。