我很难为 Google Cloud Build 设置替换变量。我不断收到“build.substitutions”错误的无效值

问题描述 投票:0回答:1

从开发者的角度来看,我对 Google Cloud 还比较陌生。我已经设置了一个基本网站,并将 Google Cloud Build 配置为在我将更改推送到 GitHub 时运行。在我决定集成 Firebase DB 之前,这种方法一直运行良好。 当 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 Secrets 在 Google Secret Manager 中,我试图从那里提取,但我无法让它发挥作用。现在我将秘密设置为云构建触发器中的替换变量。

我不确定哪里出了问题。我尝试使用 ChatGPT,但这使事情变得更加复杂(并且非常没有帮助)。预先感谢您的指点!!!

从事 IT/开发 10 年,这是我的第一篇 StackExchange 帖子!呜呼!

google-cloud-platform google-cloud-build cloudbuild.yaml
1个回答
0
投票

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
之后吗?此步骤中环境变量已存在。

对于 AppEngine 部署步骤,

source
之前的
gcloud app deploy
没有用;该命令不考虑环境变量。您的
.env
文件仅在应用程序引擎部署需要时才有用。

© www.soinside.com 2019 - 2024. All rights reserved.