У нас есть два отдельных проекта GCP (один для разработчика и один для продукта).Мы используем CloudBuild для развертывания нашего проекта с помощью зеркалирования репозитория и триггера CloudBuild, который срабатывает при обновлении веток dev или prod.Файл cloudbuild.yaml выглядит следующим образом:
# Firestore security rules deploy
- name: "gcr.io/$PROJECT_ID/firebase"
args: ["deploy", "--only", "firestore:rules"]
secretEnv: ['FIREBASE_TOKEN']
# Firestore indexes deploy
- name: "gcr.io/$PROJECT_ID/firebase"
args: ["deploy", "--only", "firestore:indexes"]
secretEnv: ['FIREBASE_TOKEN']
secrets:
- kmsKeyName: 'projects/my-dev-project/locations/global/keyRings/ci-ring/cryptoKeys/deployment'
secretEnv:
FIREBASE_TOKEN: 'myreallylongtokenstring'
timeout: "1600s"
Проблема, с которой мы столкнулись, заключается в том, что kmsKeyName, по-видимому, необходимо жестко закодировать, чтобы GCP мог его прочитать, то есть мы не можем сделать что-то вроде этого:
secrets:
- kmsKeyName: 'projects/$PROJECT_ID/locations/global/keyRings/ci-ring/cryptoKeys/deployment'
secretEnv:
FIREBASE_TOKEN: 'myreallylongtokenstring'
Это не подходит для процесса непрерывного развертывания, подобного тому, который мы используем, так как мы хотели бы, чтобы строка kmsKeyName была динамически установлена с соответствующим значением id проекта в зависимости от dev илиокружающая среда, в которой мы развертываем.
Есть ли способ обойти это, что позволило бы нам динамически указывать kmsKeyName?
Обновление: Мы нашли быстрое / грязное решение, которое было бысоздайте отдельные файлы cloudbuild.yaml: один для dev (cloudbuild-dev.yaml) и один для prod (cloudbuild-prod.yaml).Каждый файл cloudbuild идентичен, за исключением последней части, где мы указываем нашу жестко закодированную информацию о «секретах».Объяснение: GCP Cloud Build использует отдельные триггеры для каждой сборки среды, и каждый триггер можно настроить так, чтобы он указывал на определенный файл yaml cloudbuild, что мы и сделали.Триггерные точки сборки для разработчиков в cloudbuild-dev.yaml, а также производственные триггерные точки в cloudbuild-prod.yaml.