有没有更好的方法在目录中设置gcloud项目?

anu*_*ups 9 python google-app-engine

我在任何一周内都会参与多个appengine项目.即假设多个客户.早些时候我可以application参加app.yaml.因此,每当我这样做时appcfg.py update....,将确保部署到正确的项目.

部署时,应用程序变量会引发错误gcloud deploy.我不得不使用 gcloud app deploy --project [YOUR_PROJECT_ID].那么曾经是项目的目录级别设置,现在进入我们的构建工具.并错过了简单的细节可以将项目代码推送给错误的客户.即如果我这样做gcloud config set project proj1,然后以某种方式gcloud app deploy在proj2中做了,它将部署到proj1.生产部署是在对构建工具进行详细验证之后完成的,因此它不是一个问题,因为我们仍然使用该--project标志.

但很难在开发环境中做类似的事情.dev_appserver.py没有--project国旗.在启动服务器之前我dev_appserver.py要做的事情gcloud config set project <project-id>.当我使用PubSub或GCS(在开发主题或开发桶中)之类的东西时,这很重要.

遗憾的是,错过了一个简单的配置,比如在开发环境中设置项目ID,可能会导致将blob/messages/etc上传到错误的dev gcs存储桶或错误的dev pubsub主题(不使用模拟器).这种情况已经发生了很多次,特别是在开始新项目时.

我发现上述解决方案是hackish-workarounds.有没有一种好的方法可以确保我们在某个目录下工作时不会在错误的项目中部署或开发?

Tux*_*ude 7

TL;DR - 基于当前工作目录不支持,但有解决方法。

可用的解决方法

gcloud不直接让您设置每个工作目录的配置。相反,您可以使用以下 3 个选项之一来实现类似的效果:

  1. 指定--project--region--zone每个命令感兴趣的配置。这很痛苦,但可以完成工作。

  2. 每个命令指定不同的 gcloud 配置目录(默认gcloud使用~/.config/gcloudon ):*nix

    CLOUDSDK_CONFIG=/path/to/config/dir1 gcloud COMMAND
    CLOUDSDK_CONFIG=/path/to/config/dir2 gcloud COMMAND
    
    Run Code Online (Sandbox Code Playgroud)
  3. 创建多个配置并根据需要在它们之间切换。

    gcloud config configurations activate config-1 && gcloud COMMAND
    
    Run Code Online (Sandbox Code Playgroud)

外壳助手

由于上述所有选项都是在命令行上自定义的方法,因此您最喜欢的 shell 中的别名和/或函数也将有助于使事情变得更容易。

例如,在 bash 中,选项 2 可以按如下方式实现:

function gcloud_proj1() {
  CLOUDSDK_CONFIG=CLOUDSDK_CONFIG=/path/to/config/dir1 $@
}

function gcloud_proj2() {
  CLOUDSDK_CONFIG=CLOUDSDK_CONFIG=/path/to/config/dir2 $@
}

gcloud_proj1 COMMAND
gcloud_proj2 COMMAND
Run Code Online (Sandbox Code Playgroud)


Dan*_*scu 0

这些正是我非常不喜欢的原因gcloud。强制使用命令行参数并删除配置文件支持,对我来说太容易出错。

到目前为止,我仍然可以使用 GAE SDK 而不是 Google Cloud SDK(请参阅Google's App Engine SDK 和 Cloud SDK 之间的关系是什么?),这可能是一种选择 - 基本上继续“以旧方式”做事。请注意,这不再是推荐的方法。

您可以在此处找到仍然兼容的 GAE SDK 。

每当上述内容不再成为一种选择并且我将被迫切换到 Cloud SDK 时,我的计划是在每个应用程序目录中包含版本控制的备忘单文本文件,其中包含用于运行开发服务器的确切命令,对于该特定项目,我可以将其复制粘贴到终端中,而不必担心犯错误。您仔细设置一次,然后只需复制粘贴它们即可。作为奖励,您可以为不同的环境(例如登台/生产)拥有不同的分支版本。

实际上,即使对于 GAE SDK,我也使用这种方法 - 以防止将应用程序级配置文件意外部署到错误的 GAE 应用程序(此类部署必须使用 cmdline 参数来指定多服务应用程序中的应用程序)。

或者执行相同的操作,但使用环境配置文件和包装脚本而不是备忘单文件(如果这是您的偏好)。