Можно ли импортировать BUILD_ID облачной сборки в python-контейнер Cloud Run?
Мы хотим использовать функцию кэширования redis в django, которая позволяет нам указывать номера версий, что эффективно аннулирует значения кэша предыдущей сборки (до того, как код изменился).
GCP's Cloud build имеет значение $BUILD_ID по умолчанию, доступное в yaml-файлах сборки, но есть ли способ для развернутого контейнера получить доступ к этому значению BUILD_ID? Если бы это было возможно, мы могли бы использовать его (или его значение по модулю) в качестве уникальной версии кэша.
- См. https://cloud.google.com/build/docs/configuring-builds/substitute-variable-values для переменных сборки GCP
- См. https://docs.djangoproject.com/en/4.0/topics/cache/#cache-arguments для документации по кэшу django
Используйте API Method:prjects.builds.list, вы можете использовать этот API для получения всего списка, а также вы можете запросить pageSize для получения количества результатов в списке.
Когда вы получите ответ от API, вы можете просто делать то, что хотите с вашим $BUILD_ID
Надеюсь, эта информация будет полезной.
Ваш файл cloudbuild.yaml может передавать подстановочные переменные в развертываемый контейнер с помощью флага set-env-vars.
# Deploy container image to Cloud Run
- id: "deploy"
name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args:
- 'run'
- 'deploy'
- '${_SERVICE_NAME}'
- '--image'
- 'gcr.io/$PROJECT_ID/${_SERVICE_NAME}:$COMMIT_SHA'
- '--platform=managed'
- '--region=${_DEPLOY_REGION}'
- '--vpc-connector redis'
- '--set-env-vars REDISHOST=${_REDIS_HOST},REDISPORT=${_REDIS_PORT},BUILD_ID=$BUILD_ID'
Здесь мы передаем _REDIS_HOST и _REDIS_PORT и BUILD_ID в контейнер как REDISHOST, REDISPORT и BUILD_ID.
Теперь мы можем прочитать их в python следующим образом:
файл settings.py:
...
redis_host = os.environ.get('REDISHOST', 'localhost')
redis_port = int(os.environ.get('REDISPORT', 6379))
build_id = int(os.environ.get('BUILD_ID', None))