如何在Angular 2+项目中调用circleCI环境变量?

时间:2019-01-19 03:27:11

标签: angular cypress circleci-2.0 circleci-workflows

我有一个有角度的项目,其中包含一个如下所示的api-keys.ts文件:

export var masterFirebaseConfig = {apiKey: $fireBaseApiKey, authDomain: 'dataJitsu.firebaseapp.com',databaseURL: 'https://datajitsu.firebaseio.com',storageBucket: '',messagingSenderId: '495992924984'};

认为 $fireBaseApiKey作为环境变量存储在circleCI上的项目中,如您在此处的图片所示:

enter image description here

但是,当我在circleCI上运行配置时,仍然出现以下错误:

  src / app / api-keys.ts(1,44)中的

ERROR:错误TS2304:找不到名称   '$ fireBaseApiKey'。 src / app / app.module.ts(75,11):错误TS2304:无法   找到名称“ apiKey”。

(app.module.ts中的错误直接来自api-keys.ts中的错误)

我试图弄清楚问题是出在circleCI方面,还是我将其插入Angular的方式,所以我尝试echo在我的配置文件中找出环境变量:

version: 2.1
orbs:
  cypress: cypress-io/cypress@1.0.1
steps:
  - run:
      name: Setup Environment Variables
      command: |
        echo '$fireBaseApiKey'
workflows:
  build:
    jobs:
      - cypress/install:
          build: 'npm run build'
          context: fireBaseApiKey
      - cypress/run:
          requires:
            - cypress/install
          start: 'npm start'
          context: fireBaseApiKey

出错后我进入了会话,看不到任何指示 我的echo命令甚至被确认。

我希望echo方面或Angular方面的帮助对解决问题/问题很有帮助。

此外,我正在使用cypress进行集成测试,因此正在使用Cypress的orb设置和运行测试。我不确定如何/是否环境变量渗透到orb作业中,所以我也将变量添加到了项目的上下文中(上下文和唯一键值对的键名相同):< / p>

enter image description here

更新:这是circleCI日志文件的输出:

  

0信息,如果以ok 1冗长cli [   '/ usr / local / bin / node','/ usr / local / bin / npm','run','build'] 2信息   使用npm@6.4.1 3信息使用node@v10.13.0 4详细运行脚本[   'prebuild','build','postbuild'] 5信息生命周期   data-jitsu@0.0.0~prebuild:data-jitsu@0.0.0 6信息生命周期   data-jitsu@0.0.0~build:data-jitsu@0.0.0 7详细的生命周期   data-jitsu@0.0.0~build:生命周期中的unsafe-perm true 8详细   生命周期数据-jitsu@0.0.0~build:PATH:   /usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/root/project/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/ sbin:/ usr / bin:/ sbin:/ bin   9详细的生命周期数据-jitsu@0.0.0~build:CWD:/ root / project 10   愚蠢的生命周期data-jitsu@0.0.0~build:Args:['-c','ng build'] 11   愚蠢的生命周期数据-jitsu@0.0.0~build:返回:代码:1信号:   null 12信息生命周期data-jitsu@0.0.0~build:执行失败   脚本13详细堆栈错误:data-jitsu@0.0.0构建:ng build 13   详细堆栈退出状态1 13在详细堆栈   EventEmitter。   (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:301:16)   13 EventEmitter.emit的详细堆栈(events.js:182:13)13   ChildProcess的详细堆栈。   (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)   13 ChildProcess.emit的详细堆栈(events.js:182:13)13   可能关闭时的详细堆栈(internal / child_process.js:962:16)13   Process.ChildProcess._handle.onexit上的详细堆栈   (internal / child_process.js:251:5)14详细的pkgid data-jitsu@0.0.0 15   详细的cwd / root / project 16详细的Linux 4.4.0-141-generic 17   详细的argv“ / usr / local / bin / node”“ / usr / local / bin / npm”“运行”“ build”   18详细节点v10.13.0 19详细npm v6.4.1 20错误代码   ELIFECYCLE 21错误errno 1 22错误data-jitsu@0.0.0内部版本:ng build 22错误退出状态1 23错误data-jitsu@0.0.0失败   构建脚本。 23错误这可能不是npm的问题。那里   可能是上面的其他日志记录输出。 24详细出口[1,true]

2 个答案:

答案 0 :(得分:1)

您是否尝试过echo $fireBaseApiKey(无引号)?

要对CircleCI进行故障排除,在本地启动图像很有用。

示例:以下命令将启动环境变量fireBaseApiKey设置为asdf-asdf-asdf的本地ubuntu实例。您的本地文件将安装在/usr/src/app中。

docker run -it -e fireBaseApiKey=asdf-asdf-asdf -v $PWD:/usr/src/app ubuntu bash

要检查您的环境变量,请尝试:

echo $fireBaseApiKey

cd /usr/src/app并逐步运行您的构建脚本。我发现对因未知原因而导致的构建失败进行故障排除很有帮助。

答案 1 :(得分:0)

好吧,我终于弄清楚了,尽管可能是一种怪异的方式。我只是使用sed将环境变量替换为api-keys.ts文件。

因此,这是新的config.yml脚本(请注意进行了广泛的更改,包括wait-on: 'http-get://localhost:4200'(请注意使用http-get而不是http!)。

version: 2.1
orbs:
  cypress: cypress-io/cypress@1.5.1
jobs:
  build:
    working_directory: ~/project
    docker:
      - image: circleci/node:9.6.1-browsers
    environment:
      circleCiApiKey: fireBaseApiKey
    steps:
      - checkout
      - run:
          name: Show current branch
          command: |
            echo ${CIRCLE_BRANCH}
            ls -larth
            echo $fireBaseApiKey
            cat src/app/api-keys.ts
            sed -i "s/circleCiApiKey/$fireBaseApiKey/g" src/app/api-keys.ts
            cat src/app/api-keys.ts
      - restore_cache:
          keys:
            - v1-dependencies-{{checksum "package.json"}}
            - v1-dependencies-
      - run:
          name: Install local dependencies
          command: |
            npm install
      - save_cache:
          key: v1-dependencies-{{checksum "package.json"}}
          paths:
            - node_modules
      - run:
          name: Building
          command: npm run build
      - save_cache:
          key: v1-dist-{{ .Environment.CIRCLE_BRANCH}}-{{ .Environment.CIRCLE_SHA1}}
          paths:
            - dist
workflows:
  version: 2.1
  build:
    jobs:
      - build
      - cypress/install:
          requires:
            - build
          build: 'npm run build'
      - cypress/run:
          requires:
            - cypress/install
            - build
          start: 'npm start'
          store_artifacts: true
          wait-on: 'http-get://localhost:4200'

替换发生在sed -i "s/circleCiApiKey/$fireBaseApiKey/g" src/app/api-keys.ts行上。

api-keys.ts文件又包含:

export var masterFirebaseConfig = {
    apiKey: "circleCiApiKey",
    authDomain: "dataJitsu.firebaseapp.com",
    databaseURL: "https://datajitsu.firebaseio.com",
    storageBucket: "",
    messagingSenderId: "495992924984"
  };

export var masterStripeConfig = {
  publicApiTestKey: "pk_test_NKyjLSwnMosdX0mIgQaRRHbS",
  secretApiTestKey: "sk_test_6YWZDNhzfMq3UWZwdvcaOwSa",
  publicApiKey: "",
  secretApiKey: ""
};