NodeJS: Как включить переменную окружения из CircleCI в приложение - PullRequest
0 голосов
/ 07 апреля 2020

В моем клиентском приложении я храню конфиденциальную информацию в среде и использую ее следующим образом:

const client_secret = process.env.CLIENT_SECRET;

В локальной разработке я использую пакет dotenv для передачи значения в .env файле

CLIENT_SECRET=XXXXX

Файл .env не зафиксирован.

Я использую CircleCI для своего процесса развертывания и сохранил значение CLIENT_SECRET в переменных среды CircleCI , но как я могу перейти в приложение?

Это мой CircleCI config.yml:

      - deploy:
          name: Deploy
          command: |
            ENVIRONMENT=${ENVIRONMENT:=test}
            VERSION=`date "+%Y-%m-%dt%H%M"`
            if [ "${ENVIRONMENT}" = "production" ]; then
                APP_FILE=app-prod.yaml
            else
                APP_FILE=app.yaml
            fi
            gcloud app deploy ${APP_FILE} --quiet --version ${VERSION}

Я могу сделать это в app.yaml:

env_variables:
  NODE_ENV: 'production'
  CLIENT_SECRET: XXXXX

Но я не хочу включать конфиденциальную информацию в файл .yaml и фиксировать их. Кто-нибудь знает, как я могу передать значения среды в приложение?

Я использую Google Cloud Platform, а gcloud app deploy команда , кажется, не имеет флага включить переменные окружения.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020

Читая об этом, действительно, как вы упоминали, единственный "официальный" способ задания переменных среды - это установка их в app.yaml - , эта статья предоставляет дополнительную информацию об этом. Учитывая это, я пошел искать дальше и нашел этот хороший вопрос от Сообщества - доступен здесь - где представлены некоторые обходные пути.

Например, тот, который вы упомянули, о Создание второго файла со значениями и вызов его в app.yaml - хороший вариант. Вы можете использовать .gitignore для файла, которого нет в хранилище - если вы его используете. Другим вариантом будет использование Cloud Datastore для хранения информации и использования ее в вашем приложении. Таким образом, Datastore будет сохранять эту информацию защищенной и доступной для вашего приложения, не публикуя c в конфигурации вашего App Engine.

Я просто подумал, что неплохо было бы добавить эту информацию сюда со статьей и вопросом включены, если вы хотите больше информации! :)

Дайте мне знать, помогла ли вам информация!

0 голосов
/ 07 апреля 2020

Использование сценария bash для создания файла .env с переменными среды вручную

app.yaml.sh

#!/bin/bash
echo """
env: flex
runtime: nodejs
resources:
  memory_gb: 4.0
  disk_size_gb: 10
manual_scaling:
  instances: 1
env_variables:
  NODE_ENV: 'test'
  CLIENT_SECRET: \"$CLIENT_SECRET\"
"""

config.yml

    steps:
      - checkout
      - run:
          name: chmod permissions
          command: chmod -R 755 ./
      - run:
          name: Copy across app.yaml config
          command: ./app.yaml.sh > ./app.yaml
      - deploy:
          name: Deploy
          command: |
            VERSION=`date "+%Y-%m-%dt%H%M"`
            gcloud app deploy app.yaml --quiet --version ${VERSION}
...