首页 > 解决方案 > 如何使用 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'

标签: google-app-enginegoogle-cloud-platformgoogle-cloud-buildgoogle-app-engine-pythoncicd

解决方案


你是对的,你犯了一个引用错误,因为你试图运行一个内联命令。

更喜欢|结构,更具可读性,因此易于调试和编写。每行按顺序执行,类似于&&您的内联命令

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'

试一试


推荐阅读