When I run
gcloud app deploy app.yaml
which files actually get uploaded?
The project folder contains folders and files such as .git
, .git_ignore
, Makefile
or venv
that are irrelevant for the deployed application.
How does gcloud app deploy
decide which files get uploaded?
gcloudignore file would help by preventing the upload of any file or directory. The syntax is the same as the . gitignore file. First you could make sure gcloudignore is enabled: gcloud config list. If it is not, then you may enable it: gcloud config set gcloudignore/enabled true.
When firing of gcloud preview app deploy the whole process takes ~8 minutes, most of which is "updating service".
Warning: You cannot undo this operation. If you want to delete a deployment, but keep all the underlying resources, you must use the Google Cloud CLI or the API. In the console, open the Deployments page.
tl;dr: you should use a .gcloudignore
file, not skip_files
in app.yaml
.
While the prior two answers make use of skip_files
in the app.yaml
file. There is now a .gcloudignore
that is created when using gcloud deploy
or upload
commands. The default will depend on the detected language that you are using but here is automatically created .gcloudignore
that I found in my Python project:
# This file specifies files that are *not* uploaded to Google Cloud Platform # using gcloud. It follows the same syntax as .gitignore, with the addition of # "#!include" directives (which insert the entries of the given .gitignore-style # file at that point). # # For more information, run: # $ gcloud topic gcloudignore # .gcloudignore # If you would like to upload your .git directory, .gitignore file or files # from your .gitignore file, remove the corresponding line # below: .git .gitignore # Python pycache: __pycache__/
Note: These commands will not work when both skip_files
is defined and .gcloudignore
is present. This is not mentioned in the skip_filesdefinition of the
app.yaml` reference.
It seems better to have a globally recognized standard across gcloud
commands and makes more sense to adopt the .gcloudignore
versus using the skip_files
which is only relevant without App Engine. Additionally, it works pretty much like a .gitignore
file which the reference mentions:
The syntax of .gcloudignore borrows heavily from that of .gitignore; see https://git-scm.com/docs/gitignore or man gitignore for a full reference.
https://cloud.google.com/sdk/gcloud/reference/topic/gcloudignore
EDIT Aug 2018: Google has since introduced .gcloudignore
, which is now preferred, see dalanmiller's answer.
They're all uploaded, unless you use the skip_files
instruction in app.yaml
. Files with a dot like .git
are ignored by default. If you want to add more, beware that you're overriding these defaults and almost certainly want to keep them around.
skip_files: - ^Makefile$ - ^venv$ # Defaults - ^(.*/)?#.*#$ - ^(.*/)?.*~$ - ^(.*/)?.*\.py[co]$ - ^(.*/)?.*/RCS/.*$ - ^(.*/)?\..*$
Note also that they are uploaded to different places if you use a static handler. Static files are sent to a CDN and are not available to your language run time (although there are ways around that, too).
Make sure to read the docs:
https://cloud.google.com/appengine/docs/standard/python/config/appref#skip_files
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With