如何在 Google Cloud Build 上部署带有环境变量的 Vue.js 应用程序?
How to deploy a Vue.js app with env vars on Google Cloud Build?
我想使用 google 云构建部署一个 Vue.js 应用程序(到 Firebase 托管)。即使这两个产品的使用相当简单,但两个环境变量服务的实现似乎是矛盾的。
Google Cloud Build 要求环境变量以 "VUE_APP" 前缀开头,否则它会完全忽略它们并且它们的内容是未定义的。另一方面,Google 云构建要求变量具有前缀“_”,否则它会抛出替换变量不是 "a valid built-in substitution"。所以我无论如何都看不到将变量从 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}' ]
但是它抛出 'key in the template "VUE_APP_FIREBASE_WEB_API_KEY" is not a valid built-in substitution'
有人知道这种情况的解决方法吗?
更正:
这个问题具有误导性。上面的代码回答了我的问题。里面还有错别字。应该是 "args: [ 'build', '--prefix', 'web/vue_js_landing/' ]"。我提到的错误,如果其他人偶然发现,这是因为我在我的配置中的其他点做了 "echo $VUE_APP_FIREBASE_WEB_API_KEY" 而触发的,这可能是因为 ALLOW_LOOSE 标志没有设置。
这是您的整个构建配置吗?请post如果你有更多
我不确定在您的上下文中如何需要 VUE_APP
前缀,但您可以定期设置没有此前缀的替换和环境变量。
替换需要 _
前缀在构建期间被替换,但在构建步骤期间不在环境中。环境变量不需要额外的前缀,但需要用 $$
.
调用
您如何传递网络 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}']
这是另一个显示替换和环境变量的示例。如果你想玩,你可以 运行 和 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)
我想使用 google 云构建部署一个 Vue.js 应用程序(到 Firebase 托管)。即使这两个产品的使用相当简单,但两个环境变量服务的实现似乎是矛盾的。
Google Cloud Build 要求环境变量以 "VUE_APP" 前缀开头,否则它会完全忽略它们并且它们的内容是未定义的。另一方面,Google 云构建要求变量具有前缀“_”,否则它会抛出替换变量不是 "a valid built-in substitution"。所以我无论如何都看不到将变量从 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}' ]
但是它抛出 'key in the template "VUE_APP_FIREBASE_WEB_API_KEY" is not a valid built-in substitution'
有人知道这种情况的解决方法吗?
更正:
这个问题具有误导性。上面的代码回答了我的问题。里面还有错别字。应该是 "args: [ 'build', '--prefix', 'web/vue_js_landing/' ]"。我提到的错误,如果其他人偶然发现,这是因为我在我的配置中的其他点做了 "echo $VUE_APP_FIREBASE_WEB_API_KEY" 而触发的,这可能是因为 ALLOW_LOOSE 标志没有设置。
这是您的整个构建配置吗?请post如果你有更多
我不确定在您的上下文中如何需要 VUE_APP
前缀,但您可以定期设置没有此前缀的替换和环境变量。
替换需要 _
前缀在构建期间被替换,但在构建步骤期间不在环境中。环境变量不需要额外的前缀,但需要用 $$
.
您如何传递网络 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}']
这是另一个显示替换和环境变量的示例。如果你想玩,你可以 运行 和 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)