我想使用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标志。
答案 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: subs,cloud build docs: build steps,mastering cloud build syntax (bash things)