google-app-engine - 如何使用 cloudbuild 将秘密管理器秘密传递给 app.yaml 中的应用程序引擎环境变量
问题描述
下面是我的 app.yaml
runtime: python39
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
python_version: 3
env_variables:
SEC: %sec%
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
这是我的 cloudbuild.yaml 应用程序引擎试图将一个秘密值传递给 app.yaml 作为 env veriable
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
args: ['-c', "export _VAL=$(echo $$SEC)
&& echo $$SEC;echo $_VAL && sed -i 's/%sec%/'$$SEC'/g' app.yaml
&& gcloud config set app/cloud_build_timeout 1600 && gcloud app deploy"
]
secretEnv: ["SEC"]
availableSecrets:
secretManager:
- versionName: projects/$PROJECT_ID/secrets/db_secret/versions/3
env: 'SEC'
timeout: '1600s'
解决方案
你是对的,你犯了一个引用错误,因为你试图运行一个内联命令。
更喜欢|
结构,更具可读性,因此易于调试和编写。每行按顺序执行,类似于&&
您的内联命令
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
args:
- '-c'
- |
export _VAL=$(echo $$SEC)
echo $$SEC
echo $_VAL
sed -i "s/%sec%/$$SEC/g" app.yaml
gcloud config set app/cloud_build_timeout 1600
gcloud app deploy
secretEnv: ["SEC"]
availableSecrets:
secretManager:
- versionName: projects/$PROJECT_ID/secrets/db_secret/versions/3
env: 'SEC'
timeout: '1600s'
编辑 1:
如果您的密码包含破坏 SED 表达式的特殊字符,则会出现错误。您可以使用替代解决方案来替换整行,例如
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'bash'
args:
- '-c'
- |
export _VAL=$(echo $$SEC)
echo $$SEC
echo $_VAL
cat app.yaml | awk "{ if (NR == $(grep -n '%sec%' app.yaml | cut -d : -f 1)) print \" SEC: $$SEC\"; else print }" > app.yaml
gcloud config set app/cloud_build_timeout 1600
gcloud app deploy
secretEnv: ["SEC"]
availableSecrets:
secretManager:
- versionName: projects/$PROJECT_ID/secrets/db_secret/versions/3
env: 'SEC'
timeout: '1600s'
试一试
推荐阅读
- html - 如何在 html bootstrap 中将 Table 列分成多列
- python - 如何设置 Excel 的工作表 ActiveWindow.DisplayGridlines = False 使用 Python xlwings
- visual-studio - 为什么 _makepath_s 不返回错误?
- haskell - 无法在haskell中编译一个hello world
- c++ - 使用 stringstream 从混合字符串中提取数字
- asp.net-core - 部署时不提供 Nuget 包内容文件
- angular - 使用传递的函数引用调用方法时未定义的 Angular DI 变量
- r - 在 dplyr 组内应用函数
- vuejs2 - 我可以在 vuex 3 中使用 2 个参数调度动作吗?
- android - 画布:试图绘制太大(151099200字节)位图