My preference is to have the delta between the staging/QA and production reflected in (and controlled via) the VCS (git in my case):
- my main development happens on the main branch, where the staging environment config is reflected in the
.yaml
files' contents
- my production branch is pulled off the main branch and contains the production environment config - the
.yaml
files are modified accordingly
When I perform a deployment I do it from a workspace based on the appropriate branch depending on which config I need to deploy.
The delta between the production branch and the main branch is pretty much just deployment config changes. Whenever I'm happy with the staging results and I'm ready to deploy in production I just sync the production branch to the main refpoint corresponding to the OK'd staging deployment and deploy.
Another possible approach is to directly use the SDK's appcfg.py
tool, which is what goapp deploy
ultimately invokes anyways:
goapp deploy wraps the appcfg.py python tool provided in the SDK. You
can also invoke this tool directly if you need greater control over
the deployment:
The appcfg.py
tool allows you to actually have and use alternate .yaml
files residing in the same app/module directory (you'd probably have to use that anyways if you go with multiple or non-standard module configurations, since auto-detection from the app's dir won't work anymore):
appcfg.py update app-qa.yaml