1

为看似显而易见的问题道歉,但我认为答案可能对其他人有所帮助。我终生无法在 Google App Engine VM (Cloud Shell) 中的文件路径上找到文档,我可以在其中找到提供的静态文件。我需要从私人 github 存储库中提取最新的上游更改。

请注意,我在 VM 中的其他位置导航,甚至重新启动会话并没有像我预期的那样将我置于 VM 内的默认项目根路径中。

4

1 回答 1

9

这里有几个问题需要解决:

Cloud Shell 是一个虚拟外壳

Google Cloud Shell 是 Google Cloud Platform 的交互式 shell 环境。

您工作的环境是在 GCP 内 Google 拥有的项目中的 VM 中运行的容器。

您可以通过检查元数据服务器来验证这一点(仅适用于 GCP 虚拟机):

curl -H 'Metadata-Flavor:Google' "http://metadata.google.internal/computeMetadata/v1/?recursive=true&alt=text"

在提供的元数据中,您将看到如何创建和配置此容器。

Cloud Shell 与用户绑定,因此无论项目如何,如果您使用相同的凭据访问它,您将始终访问相同的环境。但是,如果您使用不同的用户访问,您将获得不同的环境。

您无法访问 GAE 标准实例

GAE 是一个完全托管的环境,您将无法访问它。这样,您将无法找到正在运行的应用引擎项目的根目录。

但是,GAE 部署代码的方式是,它使用暂存桶在编译之前收集代码。您可以通过App Engine Admin API找到您的暂存存储桶。这通常是staging.<PROJECT_ID>.appspot.com,尽管您可以更改此配置。您可以从那里获取您的文件。

您可以访问 GAE flex 应用程序

但是,flex 中的部署会获取您的文件,使用它们构建一个 Docker 容器,然后将该容器部署到 VM 中。

根据文档,您可以通过运行直接连接到您的容器:

gcloud app instances ssh [INSTANCE-NAME] --service [SERVICE] --version [VERSION] 
docker exec -it gaeapp /bin/bash

关于你的问题

根据您在问题评论中所说的,您的问题可能来自无数地方。从更改您要连接的 shell,到重置您的 shell 环境(删除所有文件),再到一千种不同的可能问题。

考虑它的最佳方式是将 Cloud Shell 视为运行命令的临时环境,而不是虚拟机。

知道这一点后,您可以挂载一个持久文件系统(通过 GCSFuseCloud Filestore等 GCS)来持久化您的工作,或者简单地使用 Git 让您的工作始终在repo上同步。

GAE Flex 有一些不错的 CI 集成,所以这是走 Git 路线的一个加分项。

于 2018-08-15T15:11:25.063 回答