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

时间:2017-07-07 14:11:41

标签: 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然后以某种方式在proj2中做了gcloud app deploy,它将部署到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。有没有一种好方法可以确保我们在某个目录下工作时不会在错误的项目中进行部署或开发?

3 个答案:

答案 0 :(得分:1)

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

可用的解决方法

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

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

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

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

    gcloud config configurations activate config-1 && gcloud COMMAND
    
  4. Shell助手

    由于上述所有选项都是在命令行上进行自定义的方法,因此您喜欢的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
    

答案 1 :(得分:0)

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

到目前为止,我仍然可以使用GAE SDK代替Google Cloud SDK(请参阅What is the relationship between Google's App Engine SDK and Cloud SDK?),这可能是一个选项 - 基本上继续做的事情&#34;旧的方式&#34 ;。请注意,它不再是推荐的方法。

您可以找到仍然兼容的GAE SDK here

只要上述内容不再是一个选项而且我将被迫切换到Cloud SDK,我的计划就是在每个app目录中都有版本控制的备忘单文本文件,其中包含要使用的确切cmds为特定项目运行devserver,deploy等,我可以将其复制粘贴到终端,而不用担心会出错。你仔细设置了一次,然后你只需复制粘贴它们。作为奖励,您可以针对不同的环境(例如,分段/制作)使用不同的分支版本。

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

或者使用环境配置文件和包装脚本而不是作弊表文件,如果这是您的偏好。

答案 2 :(得分:0)

多年来我一直遇到这个问题,我相信我找到了一个不错的妥协。

  1. 创建一个名为contextual-gcloud的简单脚本。请注意\ gcloud,这是以后使用别名的基础。
?$ cat > contextual-gcloud 
#!/bin/bash

if [ -d .gcloudconfig/ ]; then
    echo "[$0] .gcloudconfig/ directory detected: using that dir for configs instead of default."
    CLOUDSDK_CONFIG=./.gcloudconfig/ \gcloud "$@"
else
    \gcloud "$@"
fi
  1. 添加到您的.bashrc并重新加载/开始新的bash。这将修复自动补全。

    alias gcloud = contextual-gcloud

  2. 就是这样!如果您有一个称为该目录的目录,系统将改为使用该目录,这意味着您可以将配置加载到源代码控制等中。仅记住git忽略诸如日志和私有内容(密钥,证书等)的内容。 / p>

注意:自动完成功能由别名;)

固定。

代码:https://github.com/palladius/sakura/blob/master/bin/contextual-gcloud