1

我有一个角度项目,它有一个 api-keys.ts 文件,如下所示:

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

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

在此处输入图像描述

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

src/app/api-keys.ts(1,44) 中的错误:错误 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

我在会话出错后 ssh 进入会话,我看不到任何迹象表明我的 echo 命令已被确认。

我希望echo前面或 Angular 前面的帮助能够有效地解决问题/问题。

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

在此处输入图像描述

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

0 信息如果它以 ok 结束 1 详细 cli ['/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'build'] 2 使用 npm@6.4 的信息。 1 3 info using node@v10.13.0 4 verbose run-script [ 'prebuild', 'build', 'postbuild' ] 5 info 生命周期 data-jitsu@0.0.0~prebuild: data-jitsu@0.0.0 6 info 生命周期data-jitsu@0.0.0~build: data-jitsu@0.0.0 7 详细生命周期 data-jitsu@0.0.0~build: unsafe-perm in生命周期 true 8 详细生命周期 data-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 愚蠢的生命周期数据-jitsu@0.0.0~build: Args: [ '- c', 'ng 构建'] 11 愚蠢的生命周期 data-jitsu@0.0.0~build:返回:代码:1 信号:null 12 info 生命周期 data-jitsu@0.0.0~build:无法执行构建脚本 13 详细堆栈错误:data-jitsu@0.0 .0 构建:ng build13 详细堆栈 退出状态 1 13 EventEmitter 的详细堆栈。(/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:301:16) EventEmitter.emit 的 13 个详细堆栈 (events.js:182:13) ChildProcess 的 13 个详细堆栈。(/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14) 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 .ng build22 错误 退出状态 1 23 错误 在 data-jitsu@0.0.0 构建脚本中失败。23 错误 这可能不是 npm 的问题。上面可能有额外的日志输出。24 详细退出 [1, true]

4

2 回答 2

1

你试过echo $fireBaseApiKey(不带引号)吗?

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

示例:下面的命令将启动一个本地 ubuntu 实例,并将环境变量fireBaseApiKey设置为asdf-asdf-asdf. 您的本地文件将安装在/usr/src/app.

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

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

echo $fireBaseApiKey

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

于 2019-01-19T22:25:40.573 回答
0

好的,我终于想通了,虽然可能是一种 hacky 方式。我只是用来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: ""
};
于 2019-02-16T05:59:02.870 回答