从未签入源代码管理的文件中加载 CodeBuild 环境变量

Load in CodeBuild environment variables from a file that's not checked into source control

我有一个在本地使用的环境文件,但我没有签入源代码管理。它看起来类似于:

env.ts

const config = {
  prod: {
    serviceA: {
      varA: 'xyz',
      varB: 'xyz',
      varC: 'xyz',
      varD: 'xyz',
    },
    serviceB: {
      varA: 'xyz',
      varB: 'xyz',
      varC: 'xyz',
      varD: 'xyz',
    },
  },
  test: {
    serviceA: {
      varA: 'xyz',
      varB: 'xyz',
      varC: 'xyz',
      varD: 'xyz',
    },
    serviceB: {
      varA: 'xyz',
      varB: 'xyz',
      varC: 'xyz',
      varD: 'xyz',
    },
  },
};

export default config;

使用 Webpack,我可以在本地构建时为特定服务加载适当的环境变量。模块可以像这样访问这些环境变量:

import config from '@env';

  const {
    varA,
    varB,
    varC,
    varD,
  } = config[process.env.NODE_ENV].serviceA;

我用 AWS CodePipeline 和 CodeBuild 设置了这个项目,我意识到测试和构建将无法进行,因为我的 env.ts 文件没有被检查进入源代码管理,因为它包含敏感凭据。

我可以在 CodePipeline / CodeBuild 控制台中添加环境变量,但我认为这行不通,因为代码引用了一个名为 env.ts 的文件,该文件未签入源代码管理。

是否可以将此 env.ts 保存在 S3 之类的东西中,然后将其拉入管道以在构建期间在云中使用?也许我可以在构建规范中以某种方式加载这个文件?这是我当前的构建规范以供参考:

version: 0.2

phases:
  install:
    commands:
      - echo installing packages...
      - npm install --global yarn
      - yarn install
      # <-- load in env.ts file here somehow?
  build:
    commands:
      - echo running tests...
      - yarn jest
      - echo building...
      - yarn build

artifacts:
  files:
    - $CODEBUILD_SRC_DIR/dist/prod/*

代码构建已经为此提供了环境变量设置。 或者您可以使用 S3 私有存储桶来存储配置文件并在运行时使用 AWS S3 cli 命令提取文件。只需确保 codebuild 已获得必要的权限,以便在构建期间从 s3 中提取配置文件。 如果您正在使用代码构建环境变量,您可以使用参数存储来存储您的敏感信息,并通过在您添加到代码构建的环境变量前面添加“$”来访问 buildspecyml