首页 > 解决方案 > NodeJS:如何将 CircleCI 中的环境变量包含到应用程序中

问题描述

在我的前端应用程序中,我将敏感信息存储在环境中并按如下方式使用它们:

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 命令似乎没有包含环境变量的标志。

标签: node.jsgoogle-app-enginedeploymentenvironment-variablescircleci-2.0

解决方案


.env使用 bash 脚本手动创建带有环境变量的文件

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}

推荐阅读