簡體   English   中英

app.yaml env_variables 在雲構建步驟中作為 envs 訪問

[英]app.yaml env_variables accessible as envs during cloud build steps

如標題中所述,一些框架如 Next.js 或 Nuxt.js 需要在app.yaml中定義的一些環境變量(只能在運行時訪問)才能在構建步驟期間訪問,主要是npm run build

我目前使用的解決方法是在 2 個不同的地方定義相同的環境變量app.yaml和雲構建觸發器環境變量:它根本不理想

同意,在 2 個地方保持相同的值是失去一致性和產生錯誤的最好方法。 因此,最好的解決方案是只定義一次這些變量。

把它們放在你想要的地方:

  • 在文件中(例如 .env 文件)
  • 在您的觸發器配置中
  • 在 app.yaml 文件中

但只有一次。 然后在您的 Cloud Build 作業中創建一個步驟來解析配置變量文件並提取值以將它們放在正確的位置,然后再繼續構建過程。

grepcutsed效果很好。 您可以提供文件示例,因為您需要具有此替換的代碼示例。


編輯 1

根據您的評論,幾乎沒有什么可知道的。 Cloud Build 很棒……但是 Cloud Build 也很無聊……

env var 管理就是一個很好的例子。 簡短的回答是:不可能在步驟 N+x 中重用步驟 N 中定義的環境變量。

要解決這個問題,你需要做一些丑陋的事情,比如這樣

steps:
  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args:
      - -c
      - |
        MY_ENV_VAR="cool"
        echo $${MY_ENV_VAR} > env-var-save.file
  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args:
      - -c
      - |
        MY_ENV_VAR=$$(cat env-var-save.file)
        echo $${MY_ENV_VAR}

因為只有/workspace目錄在每個步驟之間是通用的,所以您必須將環境變量保存在文件中,然后在您想要的步驟中讀取它們。

關於app.yaml文件,你可以這樣做

app.yaml文件內容示例

runtime: go114
service: go-serverless-oracle

env_variables:
  ORACLE_IP: "##ORACLE_IP##"

Cloud Build 步驟示例,從 Cloud Build 中的 substituions 變量獲取值。

  - name: 'gcr.io/cloud-builders/gcloud'
    entrypoint: 'bash'
    args:
      - -c
      - |
        sed -i -e 's/##ORACLE_IP##/$_ORACLE_IP/g' app.yaml
        cat app.yaml
substitutions:
  _ORACLE_IP: 127.0.0.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM