1

在 cloudbuild 模板中,我有一个部署 Cloud 功能的步骤。我尝试在同一步骤部署传递明确环境变量的函数,但也传递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

有什么想法、最佳实践或好的解决方法吗?

4

2 回答 2

1

应在env字段中的构建步骤本身上设置明文环境变量:

steps:
- name: 'gcr.io/cloud-builders/gcloud'
  env:
  - USER=my-username
  secretEnv: ['PASSWORD']

secretEnv:
- kmsKeyName: projects/...
  secretEnv:
    PASSWORD: ajklddafjkalda....
于 2019-11-06T18:32:45.467 回答
0

只需部署该功能两次。首先部署更改并从文件中设置环境变量,然后再次使用--update-env-vars添加加密变量。

根据更新环境变量文档,--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
于 2019-11-08T12:46:23.210 回答