Я пытаюсь создать триггер Cloud Build, в котором секретные переменные среды шифруются облачной KMS и сохраняются в качестве переменной подстановки в Cloud Build. Таким образом, мой yaml для облачной сборки достаточно универсален и одинаков для всех сред, в которых мы развертываем.
Этот облачный билд работает нормально:
steps:
- name: 'ubuntu'
entrypoint: 'bash'
args: ['-c', 'echo "$$APP_NAME HAS A VALUE $$HELLO_WORLD"']
env:
- 'APP_NAME=${_APP_NAME}'
secretEnv:
- 'HELLO_WORLD'
secrets:
- kmsKeyName: 'projects/my-first-cicd-project/locations/europe-west1/keyRings/keyring-dev/cryptoKeys/key-backend'
secretEnv:
HELLO_WORLD: xxxxxxxxxxx
Шаги сборки производят эту строку журнала:
My App Name HAS A VALUE Hello there world!
Точно так, как задумано.
Теперь о том, что не работает, или, по крайней мере, я не могу приступить к работе. Допустим, я хочу сделать имя брелока динамическим. Затем я бы заменил «keyring-dev» в этом yaml на ${_KMS_KEYRING_NAME}
. Это приведет к ошибке вроде:
invalid build: failed to check access to "projects/my-first-cicd-project/locations/europe-west1/keyRings/${_KMS_KEYRING_NAME}/cryptoKeys/key-backend"
Если я изменю строку base64 в YAML (начиная с «CiQAH ...») на переменную подстановки, например $ {_ KMS_VAR_HELLO_WORLD}, я получу эту ошибку:
failed unmarshalling build config cloudbuild.yaml: illegal base64 data at input byte 0
FYI: значение этой строки base64 не превышает максимальное количество символов 255 для значения переменной.
Так что я думаю, Cloud Build ничего не заменяет в разделе секретов cloudbuild.yaml. Кто-нибудь знает решение этой проблемы?