如何在Google Cloud Build上使用env vars部署Vue.js应用程序?

时间:2019-06-28 19:13:45

标签: firebase docker vue.js google-cloud-build

我想使用Google Cloud构建(到Firebase Hosting)部署Vue.js应用。即使这是这两种产品的比较琐碎的用法,两种针对环境变量的服务的实现也似乎是矛盾的。

Google Cloud Build要求环境变量以“ VUE_APP”前缀开头,否则它将完全忽略它们,并且其内容未定义。另一方面,Google云构建要求变量的前缀为“ _”,否则抛出的替代变量不是“有效的内置替代”。所以我仍然看不到将变量从Google Cloud Build传递到Vue.js应用程序。

我还尝试了以下方法:

- name: 'gcr.io/cloud-builders/npm'
  args: [ 'ci', '--prefix', 'web/vue_js_landing/' ]
  env: [ 'VUE_APP_FIREBASE_WEB_API_KEY=${_FIREBASE_WEB_API_KEY}' ]

但是它会抛出“模板“ VUE_APP_FIREBASE_WEB_API_KEY”中的密钥不是有效的内置替代项”

有人知道这种情况的解决方法吗?

更正:

这个问题令人误解。上面的代码回答了我的问题。还有一个错字。应该是“ args:['build','--prefix','web / vue_js_landing /']”。我提到的错误(如果有人偶然发现)是由于我在配置的其他位置“回显$ VUE_APP_FIREBASE_WEB_API_KEY”而触发的,这也许是因为未设置ALLOW_LOOSE标志。

1 个答案:

答案 0 :(得分:1)

这是您的整个构建配置吗?如果您还有更多内容,请发帖

我不确定您的上下文中是否需要VUE_APP前缀,但是您可以定期设置替换和env var,而无需该前缀。

需要替换的_前缀在构建过程中被替换,但是在构建步骤中不被替换为env。 Env var不需要多余的前缀,但是需要使用$$来调用。

您如何传递Web API密钥?这是通过cli传递示例 gcloud builds submit --no-source --substitutions _SECRET_KEY='123'

cloudbuild.yaml

steps:
- name: 'gcr.io/cloud-builders/npm'
  entrypoint: 'bash'
  args: ['-c', 'echo $$FIREBASE_WEB_API_KEY']
  env: ['FIREBASE_WEB_API_KEY=${_SECRET_KEY}']

这是另一个显示替换和env变量的示例。如果您想玩gcloud builds submit --no-source,可以使用它。

cloudbuild.yaml

steps:
- id: 'breakout syntax'
  name: 'gcr.io/cloud-builders/npm'
  entrypoint: 'bash'
  args:
   - '-c'
   - |
     echo 'print all env vars'
     env
     echo 'print one env var with $$'
     echo '1: '$$BUILD_ENV_VAR
     echo '2: '$$STEP_ENV_VAR
     echo '3: '$$SUB_IN_ENV_VAR
     echo 'print one substitution with $ or ${}'
     echo '1: '${_SUB_VAR}
     echo '2: ' $$_SUB_VAR ## doesn't exist in env, fails
     echo '3: '$_SUB_VAR
  env: ['STEP_ENV_VAR=step-var']

substitutions:
    _SUB_VAR: sub-var
options:
    env:
     - BUILD_ENV_VAR=env-var
     - SUB_IN_ENV_VAR=env-var-with-${_SUB_VAR}

来源:cloud build docs: subscloud build docs: build stepsmastering cloud build syntax (bash things)