Как развернуть приложение Vue.js с переменными env в Google Cloud Build?

Я хочу развернуть приложение Vue.js с облачной сборкой Google (для хостинга Firebase). Даже если это довольно тривиальное использование двух продуктов, реализации двух сервисов для переменных среды кажутся противоречивыми.

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 /']». Ошибка, о которой я упоминал, если кто-то еще наткнется, это было вызвано тем, что я сделал "echo $ VUE_APP_FIREBASE_WEB_API_KEY" в какой-то другой точке моей конфигурации, и это может быть потому, что флаг ALLOW_LOOSE не был установлен.


person Andreas Tzionis    schedule 28.06.2019    source источник


Ответы (1)


Это вся ваша конфигурация сборки? Пожалуйста, опубликуйте, если у вас есть еще

Я не уверен, как префикс VUE_APP требуется в вашем контексте, но вы можете регулярно устанавливать замены и переменные env без этого префикса.

Подстановки, требующие префикса _, заменяются во время сборки, но не находятся в env на этапе сборки. Переменным env не нужен дополнительный префикс, но их нужно вызывать с $$.

Как вы передаете ключ веб-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}

источники: документы облачной сборки: subs, документы облачной сборки: шаги сборки, освоение синтаксиса сборки облака (вещи bash)

person guille    schedule 28.06.2019
comment
Этот ответ - слиток золота. Я прочитал все упомянутые ссылки, но не смог собрать воедино. Для того, что стоит в Vue.js, есть такое ограничение, что из соображений безопасности доступны только переменные env, начинающиеся с VUE_APP. cli.vuejs.org/guide/mode-and-env.html - person Andreas Tzionis; 29.06.2019