我的问题是我想通过使用不同的GCP项目来创建dev
,stage
,prod
环境。
基本上他们运行相同的代码,只是在不同的隔离环境中运行它们。
我现在在命令行中使用gcloud app deploy
来部署应用程序。
如何有效地将应用部署到不同的项目?
我是否每次都必须gcloud init
更改默认项目的配置?
必须有一些更好的做法。
或者,我是否有更好的方法在app引擎的上下文中设置dev
...环境?
感谢。
答案 0 :(得分:2)
"标准"方法是使用版本,例如
qa.myApp.appspot.com
一旦版本准备好进行下一步,您就可以使用不同的版本ID进行部署。
使用多个项目的一个问题是您必须为每个项目维护不同的数据集。
答案 1 :(得分:1)
对于Python应用程序,您可以在app.yaml文件中设置应用程序。这允许您为每个项目使用不同的数据。这是在使用appcfg.py命令进行部署时。
application: myproject
version: alpha-001
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /
script: home.app
如果您不想为每个项目更改此文件中的应用程序值,可以运行以下命令:
appcfg.py -A <YOUR_PROJECT_ID> -V v1 update myapp/
https://cloud.google.com/appengine/docs/python/config/appref
如果未在文件中指定应用程序,请在部署时使用appcfg命令中的--application选项。使用gcloud app deploy命令进行部署时,将忽略此元素。
答案 2 :(得分:1)
我的偏好是通过与代码相同的版本控制来管理不同的环境 - 每个环境一个分支,使部署与代码更改的自然流完全一致,通过分支合并提升:dev
- &GT; stage
- &gt; production
。
为了最大限度地降低人为错误的风险,我尽可能地将代码配置保留在代码本身中(即 - 从.yaml
文件中获取应用程序ID,版本等,而不是通过将cmd部署为args)。部署cmds本身保存在一个备忘单文件中(此时太简单,无法保证完整的脚本),也是git-controlled。在这个答案中说明:https://stackoverflow.com/a/34111170/4495081
部署是从单独的专用工作区完成的 - 每个环境一个,基于相应的git分支(我从不切换这些工作区中的分支)。我只是将对应于所需环境的工作空间更新为所需的版本,并从工作空间的备忘单中复制粘贴部署cmd。
这个模型是IMHO CI / CD-ready,可以很容易地完全自动化。
答案 3 :(得分:1)
不是每次都使用gcloud init
更改配置,而是使用此代码更快地部署到多个项目:
gcloud app deploy -q --project [YOUR_PROJECT_ID]
如果您的项目具有相似的ID,请说:test1
,test2
,test3
,test4
,您可以使用一个命令部署到这四个项目。使用此代码:
for i in {1..4}; do gcloud app deploy -q --project test${i}; done