【问题标题】:Using Google Cloud Secret as environment variables in Google Cloud Build在 Google Cloud Build 中使用 Google Cloud Secret 作为环境变量
【发布时间】:2021-02-13 03:18:57
【问题描述】:

我正在使用 Cloud Build 将我的 Node 应用程序部署到 Google Cloud Run,并且我想在构建期间运行一些测试。我的测试需要一些环境变量,所以我一直关注this guide 来实现这一点。

指南做了以下说明:

注意:要在环境变量中使用秘密,您需要前缀 带有下划线“_”的变量名并使用转义值 '('。例如:_VARIABLE_NAME=$(cat password.txt) && echo -n \)_VARIABLE_NAME。

但是,我不太确定如何实现这一点。 我在cloudbuild.yaml 中尝试了以下操作。

  - id: Execute tests
    name: node
    args: ['_VAR_ONE=$(cat var-one.txt)', '_VAR_TWO=$(cat var-two.txt)', 'jest -V']

返回以下内容:Error: Cannot find module '/workspace/_VAR_ONE=$(cat var-one.txt)'。 我还尝试了上述注释提到的一些转义变体,但它们会导致相同的错误。

将秘密作为环境变量放入我的代码的最佳方法是什么? 另外,如果我需要使用多个环境变量,使用带有.env 文件的 Cloud KMS 会更好吗?

谢谢!

【问题讨论】:

标签: google-cloud-platform continuous-integration google-cloud-build


【解决方案1】:

您似乎错误地使用了node 图像提供的entrypoint。您正在有效地运行命令:

node _VAR_ONE=$(cat var-one.txt) _VAR_TWO=$(cat var-two.txt) jest -V

我想跑题,说这个模式在Node中不起作用,你需要先指定环境变量调用node,例如VAR_ONE=$(cat foo.txt) VAR_TWO=bar node run test

无论如何,我认为你要运行的是:

_VAR_ONE=$(cat var-one.txt) _VAR_TWO=$(cat var-two.txt) jest -V

我们将这样做 - 假设您在上一步中将机密内容写到文件 var-one.txtvar-two.txt 中 - 以下是您在node step,这只是从命令行运行命令时使用环境变量的标准方式:

- id: Execute tests
  name: node
  entrypoint: '/bin/bash'
  args:
     '-c', 
     '_VAR_ONE=$(cat var-one.txt) _VAR_TWO=$(cat var-two.txt) jest -V'
  ]

您需要确保在节点环境中使用指定的变量(即process.env._VAR_ONEprocess.env._VAR_TWO)。我认为您不需要在此处添加 _ 字符前缀,但我尚未对其进行测试以确认这一点。您可以尝试上述方法,我认为它应该会让您走得更远。

【讨论】:

    猜你喜欢
    • 2022-10-02
    • 2020-05-18
    • 2019-01-05
    • 1970-01-01
    • 2021-05-19
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多