我正在尝试在文件中设置一组env变量,并尝试使用命令gcloud run deploy ... --env-vars-file=.env.yaml
加载/使用该文件。我正在浏览器中运行来自谷歌cloudshell控制台的命令(最终我将使用云构建(,所以我想将此文件存储在谷歌云中,并使用其文件路径在该命令中访问它。我尝试将文件存储在云存储中,并尝试像这样访问它CCD_ 2。但它抛出了一个错误:;无法读取文件";。
我知道问题在于将文件存储在谷歌cloudshell可以访问的位置。我正在努力找出在谷歌云中存储和检索文件的最佳方式。
注意:我正在使用下面的yaml文件进行构建。(根据Kolban提供的输入添加的gsutil cp脚本(
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', '<image-url>' ]
- name: 'gcr.io/cloud-builders/docker'
args: ['push', '<image-url>']
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'gsutil'
args: ['cp', 'gs://my-storage/dev.env.yaml', '/tmp/dev.env.yaml']
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'gcloud'
args: ['run', 'deploy', 'my-app', '--image', '<image-url>', '--env-vars-file', '/tmp/dev.env.yaml']
如果我们查看gcloud运行部署命令上的文档,我们会发现:
具有所有环境变量定义的本地YAML文件的路径。在添加新的环境变量之前,将删除所有现有的环境变量。
关键部分是该文件是本地文件的路径。这将是运行gcloud的本地文件系统上的一个文件。谷歌云存储不被视为本地存储。
一些选择是:
- 在运行gcloud之前,运行
gsutil cp
将GCS文件复制到本地存储(例如/tmp(,然后传递本地文件名 - 运行
gsutil cat
以回显/显示文件的内容,然后使用输出使用--set-env-vars
。这可能意味着GCS中存储的环境文件必须具有正确的格式
在这些概念中,我最喜欢第一个。类似以下内容:
tfile = $(mktemp)
gsutil cp gs://GCSFILEPATH ${tfile}
gcloud ... --env-vars-file=${tfile}
rm ${tfile}
关于你问题的第二部分。。。如果您正在使用Cloud Build并运行一系列步骤,请理解这些步骤运行在它们自己的Docker容器中,因此也运行在它们自身的文件系统中。如果我们阅读这里,我们会发现有关使用文件系统在步骤之间共享数据的文档。简单地说,默认情况下,目录/workspace
在每个步骤之间共享。如果一个步骤中的文件写入/workspace
,则后续步骤将看到该文件。
在您的示例中,将/tmp/dev.env.yaml
更改为/workspace/dev.env.yaml
,您将获得更好的成功。