Мне сложно настроить переменные подстановки для Google Cloud Build. Я продолжаю получать недопустимое значение для ошибки build.substitutions

Я относительно новичок в Google Cloud с точки зрения разработчика. Я настроил базовый веб-сайт и настроил Google Cloud Build для запуска каждый раз, когда я добавляю изменения в GitHub. Это работало хорошо, пока я не решил интегрировать базу данных Firebase. При запуске Cloud Build я получаю следующую ошибку.

Your build failed to run: generic::invalid_argument: invalid value for 'build.substitutions': key in the template "FIREBASE_API_KEY" is not a valid built-in substitution

Ниже копия моего текущего cloudbuild.yaml.

steps:
  - name: "gcr.io/cloud-builders/npm"
    dir: "dev"
    entrypoint: "bash"
    args:
      - "-c"
      - |
        set -e

        # Install dependencies
        npm install

  - name: "gcr.io/cloud-builders/npm"
    dir: "dev"
    entrypoint: "bash"
    env:
      - "FIREBASE_API_KEY=${_FIREBASE_API_KEY}"
      - "FIREBASE_AUTH_DOMAIN=${_FIREBASE_AUTH_DOMAIN}"
      - "FIREBASE_PROJECT_ID=${_FIREBASE_PROJECT_ID}"
      - "FIREBASE_STORAGE_BUCKET=${_FIREBASE_STORAGE_BUCKET}"
      - "FIREBASE_MESSAGING_SENDER_ID=${_FIREBASE_MESSAGING_SENDER_ID}"
      - "FIREBASE_APP_ID=${_FIREBASE_APP_ID}"
    args:
      - "-c"
      - |
        set -e

        # Create .env file with environment variables
        echo "FIREBASE_API_KEY=${FIREBASE_API_KEY}" > .env
        echo "FIREBASE_AUTH_DOMAIN=${FIREBASE_AUTH_DOMAIN}" >> .env
        echo "FIREBASE_PROJECT_ID=${FIREBASE_PROJECT_ID}" >> .env
        echo "FIREBASE_STORAGE_BUCKET=${FIREBASE_STORAGE_BUCKET}" >> .env
        echo "FIREBASE_MESSAGING_SENDER_ID=${FIREBASE_MESSAGING_SENDER_ID}" >> .env
        echo "FIREBASE_APP_ID=${FIREBASE_APP_ID}" >> .env

        # Source environment variables
        source .env

        # Build the project
        npm run build

  - name: "gcr.io/cloud-builders/gcloud"
    dir: "dev"
    entrypoint: "bash"
    args:
      - "-c"
      - |
        set -e

        # Source environment variables
        source .env

        # Deploy the app
        gcloud app deploy --project=my-project --appyaml=app.yaml

timeout: "1200s"
options:
  logging: CLOUD_LOGGING_ONLY

substitutions:
  _FIREBASE_API_KEY: ""
  _FIREBASE_AUTH_DOMAIN: ""
  _FIREBASE_PROJECT_ID: ""
  _FIREBASE_STORAGE_BUCKET: ""
  _FIREBASE_MESSAGING_SENDER_ID: ""
  _FIREBASE_APP_ID: ""

Я попробовал итерации нумерации изменения моего файла cloudbuild.yaml, чтобы заставить это работать. Первоначально секреты от DB находились в Google Secret Manager, и я пытался извлечь их оттуда, но не смог заставить это работать. Теперь я устанавливаю секреты как переменные подстановки в триггере сборки облака.

В приведенном ниже фрагменте я использую переменные. Файл .env все еще используется, но я открыт для лучших и более чистых решений.

import { initializeApp } from "firebase/app"
import { getFirestore, doc, getDoc, setDoc, updateDoc } from "firebase/firestore"

// Initialize Firebase with environment variables
const firebaseConfig = {
  apiKey: process.env.FIREBASE_API_KEY,
  authDomain: process.env.FIREBASE_AUTH_DOMAIN,
  projectId: process.env.FIREBASE_PROJECT_ID,
  storageBucket: process.env.FIREBASE_STORAGE_BUCKET,
  messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID,
  appId: process.env.FIREBASE_APP_ID
}

// Initialize Firebase
const app = initializeApp(firebaseConfig)
const db = getFirestore(app)

Я не уверен, где что-то идет не так. Я попробовал использовать Заранее спасибо за любые подсказки!!!

10 лет в ИТ/разработке и это мой первый пост на StackExchange!! уууу!

Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
0
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не стыдно опубликовать свой первый вопрос спустя 10 лет! Все новое сложно, и ответ вы увидите довольно «странным»!


На своем этапе вы определяете ENV VARS, которые принимают значения переменных подстановки. Эта часть в порядке

Затем на своем этапе вы вызываете свою переменную окружения, и это неправильно. Если в Cloud Build вы используете один $, вы вызываете переменные подстановки. Если вы используете двойной $, на этот раз вы вызовете переменные окружения! Подробности здесь, в документе

Попробуйте это вместо этого

...
 - name: "gcr.io/cloud-builders/npm"
    dir: "dev"
    entrypoint: "bash"
    env:
      - "FIREBASE_API_KEY=${_FIREBASE_API_KEY}"
      - "FIREBASE_AUTH_DOMAIN=${_FIREBASE_AUTH_DOMAIN}"
      - "FIREBASE_PROJECT_ID=${_FIREBASE_PROJECT_ID}"
      - "FIREBASE_STORAGE_BUCKET=${_FIREBASE_STORAGE_BUCKET}"
      - "FIREBASE_MESSAGING_SENDER_ID=${_FIREBASE_MESSAGING_SENDER_ID}"
      - "FIREBASE_APP_ID=${_FIREBASE_APP_ID}"
    args:
      - "-c"
      - |
        set -e

        # Create .env file with environment variables
        echo "FIREBASE_API_KEY=$${FIREBASE_API_KEY}" > .env
        echo "FIREBASE_AUTH_DOMAIN=$${FIREBASE_AUTH_DOMAIN}" >> .env
        echo "FIREBASE_PROJECT_ID=$${FIREBASE_PROJECT_ID}" >> .env
        echo "FIREBASE_STORAGE_BUCKET=$${FIREBASE_STORAGE_BUCKET}" >> .env
        echo "FIREBASE_MESSAGING_SENDER_ID=$${FIREBASE_MESSAGING_SENDER_ID}" >> .env
        echo "FIREBASE_APP_ID=$${FIREBASE_APP_ID}" >> .env

        # Source environment variables
        source .env

        # Build the project
        npm run build
...


При этом, какова цель создания файла .env? Просто чтобы source это сразу после? На этом этапе переменная env уже существует.

На этапе развертывания AppEngine знак source перед gcloud app deploy бесполезен; команда не учитывает переменные окружения. Ваш файл .env полезен только в том случае, если он необходим для развертывания движка приложения.

Изначально .env предназначался для локального тестирования, и я сохранил его при переходе на Cloud Build. Я добавил код, который используется в моем исходном сообщении. Я открыт для рефакторинга, но не знаю, как лучше всего это сделать.

C Knight 06.07.2024 06:30

Вот в чем была моя проблема. Спасибо за быстрый ответ. Теперь о моем следующем выпуске!

C Knight 07.07.2024 04:00

Удачи! Мы здесь, чтобы помочь ;)

guillaume blaquiere 07.07.2024 13:46

Другие вопросы по теме