Google云-触发器中的cloubduild和应用程序可变替换

问题描述

当新提交出现在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文件中获得相同的结果,用env变量替换,例如: (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是按原样提供给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}"

原样位于您的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"