[英]app.yaml env_variables accessible as envs during cloud build steps
如標題中所述,一些框架如 Next.js 或 Nuxt.js 需要在app.yaml
中定義的一些環境變量(只能在運行時訪問)才能在構建步驟期間訪問,主要是npm run build
我目前使用的解決方法是在 2 個不同的地方定義相同的環境變量app.yaml
和雲構建觸發器環境變量:它根本不理想
同意,在 2 個地方保持相同的值是失去一致性和產生錯誤的最好方法。 因此,最好的解決方案是只定義一次這些變量。
把它們放在你想要的地方:
但只有一次。 然后在您的 Cloud Build 作業中創建一個步驟來解析配置變量文件並提取值以將它們放在正確的位置,然后再繼續構建過程。
grep
, cut
和sed
效果很好。 您可以提供文件示例,因為您需要具有此替換的代碼示例。
編輯 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.