Google cloud - 触发器中的云构建和应用程序变量替换

Google cloud - cloubduild and app variabile substitution in trigger

当 github 中出现新提交时,我正在使用 cloudbuild 部署我的应用程序的新版本。 一切正常。

现在我正在尝试在触发器配置中设置一个变量替换,因为我想将我的版本号一次性放入触发器中,这样我就可以在不修改cloudbuild配置文件的情况下找到部署的正确版本。 变量替换在我的 cloudbuild 文件中效果很好,例如: (cloudbuild.yaml)

# TEST: PRINT VARIABLE IN LOG
- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args: ['-c', 'echo', '${_VERSION}']

# DEPLOY APP
- name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy", "-v", "${_VERSION}", "app.yaml"]
  dir: 'frontend'
  timeout: "20m"

${_VERSION} 已正确替换为我放入触发器中的字符串。

现在我想在 app.yaml 文件中获得相同的结果,替换为环境变量,例如: (app.yaml)

runtime: nodejs
env: flex
service: backend

env_variables:
  VERSION: "${_VERSION}"
  TEST_ENV: "read from google"

当我从我的应用程序读取 TEST_ENV 时,它有效,但 _VERSION 没有被替换。

有什么建议吗?

当您执行此步骤时

# DEPLOY APP
- name: "gcr.io/cloud-builders/gcloud"
  args: ["app", "deploy", "-v", "${_VERSION}", "app.yaml"]
  dir: 'frontend'
  timeout: "20m"

app.yaml as-is 提供给 gcloud 命令,但未对其进行评估。您必须手动更新它。像这样

# REPLACE: PUT THE CORRECT VALUE IN APP.YAML FILE
- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args: ['-c', 'sed', "-i", "sed -i "s/$${_VERSION}/${_VERSION}/g", 'app.yaml']

当然如果你让

env_variables:
  VERSION: "${_VERSION}"

as-is 在您的 app.yaml 文件中。您可以更改此替换字符串

我想添加这个解决方案,以防有人对 giullade 提出的解决方案有疑问(在我的例子中,cloudbuild 在执行 sed 命令时给我一个错误)。

我还将替换字符串更改为更具可读性并避免转义 $ 符号。

# Step 0: REPLACE variables in app.yaml file
- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  dir: 'backend'
  args:
  - '-c'
  - |
    sed -i "s/__VERSION/${_VERSION}/g" app-staging.yaml

在我的 app.yaml:

env_variables:
  VERSION_ENV: "__VERSION"