Можно ли импортировать BUILD_ID облачной сборки в python-контейнер Cloud Run?

Мы хотим использовать функцию кэширования redis в django, которая позволяет нам указывать номера версий, что эффективно аннулирует значения кэша предыдущей сборки (до того, как код изменился).

GCP's Cloud build имеет значение $BUILD_ID по умолчанию, доступное в yaml-файлах сборки, но есть ли способ для развернутого контейнера получить доступ к этому значению BUILD_ID? Если бы это было возможно, мы могли бы использовать его (или его значение по модулю) в качестве уникальной версии кэша.

Используйте 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))
Вернуться на верх