Google cloud build - 部署一个云函数,在同一步骤中传递明确的 ENV vars 和 KMS secretEnv vars
Google cloud build - Deploy a Cloud function passing clear ENV vars but also KMS secretEnv vars in the same step
在cloudbuild 模板中,我有一个部署Cloud function 的步骤。
我尝试在同一步骤中部署传递明确环境变量和 secretEnv 的函数。
我尝试了几件事都没有成功,文档清楚地说明了我们不能在同一命令中使用 --set-env-vars 和 --env-vars-file 或 --update-env-vars .
是否有人成功发送了两种变量类型:从文件中清除的变量和使用 secretEnv 的秘密变量?
以下定义成功地从 .env.prod.yaml 创建了变量,但 USER 和 PASSWORD 机密未创建到 Cloud 函数中。
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args: ['functions',
'deploy', 'my-function',
'--runtime', 'go111',
'--entry-point', 'MyFunction',
'--env-vars-file', '.env.prod.yaml',
'--trigger-topic', 'my-topic']
secretEnv: ['USER', 'PASSWORD']
secrets:
- kmsKeyName: projects/my-project/locations/global/keyRings/my-keyring/cryptoKeys/my-key
secretEnv:
USER: XXXXXXXXXXXXXXXXXXXXXXXXXXX
PASSWORD: XXXXXXXXXXXXXXXXXXXXXXXXXXX
有什么想法、最佳实践或好的解决方法吗?
纯文本环境变量应该在 env
字段中的构建步骤中设置:
steps:
- name: 'gcr.io/cloud-builders/gcloud'
env:
- USER=my-username
secretEnv: ['PASSWORD']
secretEnv:
- kmsKeyName: projects/...
secretEnv:
PASSWORD: ajklddafjkalda....
只需部署函数两次。首先部署更改并设置文件中的 env 变量,然后再次使用 --update-env-vars
添加加密变量。
根据 Updating environment variables 文档,--update-env-vars
在添加新环境变量之前不会删除所有现有环境变量。
cloudbuild.yaml
的示例可以是:
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args: ['functions', 'deploy', 'my-function’,
'--runtime', 'go111',
'--entry-point', 'MyFunction',
'--env-vars-file', 'env.prod.yaml',
'--trigger-topic', 'my-topic']
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args: ['-c', 'gcloud functions deploy my-function --update-env-vars USER=$$USER,PASSWORD=$$PASSWORD']
secretEnv: ['USER', 'PASSWORD']
secrets:
- kmsKeyName: projects/[PROJECT-ID]/locations/global/keyRings/[KEYRING-NAME]/cryptoKeys/[KEY-NAME]
secretEnv:
USER: XXXXXXXXXXXXXXXXXXXXXXXXX
PASSWORD: XXXXXXXXXXXXXXXXXXXXX
在cloudbuild 模板中,我有一个部署Cloud function 的步骤。 我尝试在同一步骤中部署传递明确环境变量和 secretEnv 的函数。
我尝试了几件事都没有成功,文档清楚地说明了我们不能在同一命令中使用 --set-env-vars 和 --env-vars-file 或 --update-env-vars .
是否有人成功发送了两种变量类型:从文件中清除的变量和使用 secretEnv 的秘密变量?
以下定义成功地从 .env.prod.yaml 创建了变量,但 USER 和 PASSWORD 机密未创建到 Cloud 函数中。
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args: ['functions',
'deploy', 'my-function',
'--runtime', 'go111',
'--entry-point', 'MyFunction',
'--env-vars-file', '.env.prod.yaml',
'--trigger-topic', 'my-topic']
secretEnv: ['USER', 'PASSWORD']
secrets:
- kmsKeyName: projects/my-project/locations/global/keyRings/my-keyring/cryptoKeys/my-key
secretEnv:
USER: XXXXXXXXXXXXXXXXXXXXXXXXXXX
PASSWORD: XXXXXXXXXXXXXXXXXXXXXXXXXXX
有什么想法、最佳实践或好的解决方法吗?
纯文本环境变量应该在 env
字段中的构建步骤中设置:
steps:
- name: 'gcr.io/cloud-builders/gcloud'
env:
- USER=my-username
secretEnv: ['PASSWORD']
secretEnv:
- kmsKeyName: projects/...
secretEnv:
PASSWORD: ajklddafjkalda....
只需部署函数两次。首先部署更改并设置文件中的 env 变量,然后再次使用 --update-env-vars
添加加密变量。
根据 Updating environment variables 文档,--update-env-vars
在添加新环境变量之前不会删除所有现有环境变量。
cloudbuild.yaml
的示例可以是:
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args: ['functions', 'deploy', 'my-function’,
'--runtime', 'go111',
'--entry-point', 'MyFunction',
'--env-vars-file', 'env.prod.yaml',
'--trigger-topic', 'my-topic']
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args: ['-c', 'gcloud functions deploy my-function --update-env-vars USER=$$USER,PASSWORD=$$PASSWORD']
secretEnv: ['USER', 'PASSWORD']
secrets:
- kmsKeyName: projects/[PROJECT-ID]/locations/global/keyRings/[KEYRING-NAME]/cryptoKeys/[KEY-NAME]
secretEnv:
USER: XXXXXXXXXXXXXXXXXXXXXXXXX
PASSWORD: XXXXXXXXXXXXXXXXXXXXX