Загрузка переменных среды в Google Cloud Build с помощью файла

Я хочу настроить переменные среды (их не нужно шифровать) для Cloud Build.

env.sh

export GCP_PROJECT_ID=example
export GCP_KMS_KEYRING=example-secrets
export GCP_KMS_KEYNAME=example-identity
export GCP_KMS_ROLE=roles/cloudkms.cryptoKeyDecrypter
export GCP_KMS_KEY_ID=projects/$GCP_PROJECT_ID/locations/global/keyRings/$GCP_KMS_KEYRING/cryptoKeys/$GCP_KMS_KEYNAME

cloudbuild.yaml

steps:
# 1 Install Dependencies
- name: 'python'
  id: Pip install
  args: ['pip3', 'install', '-r', 'requirements.txt', '--user']
# 2 Set env variables for its execution
- name: 'ubuntu'
  args: ['bash', 'scripts/env.sh']
# 3 Run Tests
- name: 'python'
  args: ['python3', '-m', 'pytest', 'functions/test/']

Выполнение шага 2 не устанавливает их должным образом. Я не получаю ошибок при запуске скрипта, но позже в моих тестах, когда я пытаюсь получить GCP_KMS_KEY_ID из os.env, я получаю сообщение об ошибке. Я понимаю, что могу установить env: на этапе выполнения тестов, но мой проект требует загрузки env из файла.

Как лучше всего настроить переменные среды?


person user1222324562    schedule 14.06.2019    source источник
comment
Проблема в том, что вы запускаете новую оболочку bash. Вы хотите, чтобы текущая оболочка запускала env.sh. Я не пробовал это с Cloud Build, но в обычном Linux вы бы заменили bash на source, как в source ./scripts/env.sh   -  person John Hanley    schedule 14.06.2019
comment
@JohnHanley Это тоже не сработало, но хорошее предложение. Для gcloud functions deploy есть флаг --env-vars-file, который принимает .yaml файл. Вы знаете, есть ли аналог для pytest?   -  person user1222324562    schedule 14.06.2019


Ответы (2)


Вы также можете установить переменные env и замены для всей сборки, а не только для шага сборки. Для ваших переменных я бы предложил использовать комбинацию замен и переменных env.

steps:
- name: 'python'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    # subs must being with _
    echo $_NAME
    echo $_GREETING
    # env vars called with double $
    echo $$MESSAGE
- name: 'ubuntu'
  args: ['bash', '-c', 'echo $$MESSAGE']

substitutions:
    _NAME: sam
    _GREETING: hello
options:
    env:
    - MESSAGE=$_GREETING, $_NAME!

В вашем примере может сработать

substitutions:
    _GCP_PROJECT_ID: example
    _GCP_KMS_KEYRING: example-secrets
    _GCP_KMS_KEYNAME: example-identity
    _GCP_KMS_ROLE: roles/cloudkms.cryptoKeyDecrypter
options:
    env:
    - GCP_KMS_KEY_ID=projects/$_GCP_PROJECT_ID/locations/global/keyRings/$_GCP_KMS_KEYRING/cryptoKeys/$_GCP_KMS_KEYNAME
person guille    schedule 25.06.2019

Как насчет объединения шага 2 с шагом 3?

args: ['bash', 'scripts/envs.h', '&&', 'python3', '-m', 'pytest', 'functions/test/']
person Cloud Ace    schedule 14.06.2019