Как вызвать переменную окружения circleCI в проекте Angular 2+? - PullRequest
0 голосов
/ 19 января 2019

У меня есть угловой проект, в котором есть файл 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): ошибка 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 или на угловом фронте будет продуктивной для решения вопроса / проблемы.

Кроме того, я использую Cypress для интеграционного тестирования и, следовательно, использую Cypress Orb для настройки и запуска тестов. Я не был уверен, как / нужно ли переменным окружения проникать в задания orb, поэтому я также добавил переменную в контекст проекта (и контекст, и ключ одиночной пары ключ-значение имеют одно и то же имя):

enter image description here

Обновление: вот вывод из файла журнала circleCI:

0 информация работает, если она заканчивается ok 1 verbose cli [ '/ usr / local / bin / node', '/ usr / local / bin / npm', 'run', 'build'] 2 info используя npm@6.4.1 3 info используя node@v10.13.0 4 verbose run-script [ '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 подробный жизненный цикл 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 / бен: / SBIN: / бен 9 подробный жизненный цикл data-jitsu@0.0.0~ build: CWD: / root / project 10 глупый жизненный цикл data-jitsu@0.0.0~build: Args: ['-c', 'ng build'] 11 глупый жизненный цикл data-jitsu@0.0.0~build: возвращено: код: 1 сигнал: null 12 info жизненный цикл data-jitsu@0.0.0~build: не удалось выполнить сборку Скрипт многословной ошибки 13: data-jitsu@0.0.0 build: 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 многословный стек в MaybeClose (внутренний / 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 verbose argv "/ usr / local / bin / node" "/ usr / local / bin / npm" "run" "build" 18 verbose node v10.13.0 19 verbose npm v6.4.1 20 код ошибки ELIFECYCLE 21 ошибка errno 1 22 ошибка data-jitsu@0.0.0 build: ng build 22 ошибка Состояние выхода 1 23 ошибка Ошибка data-jitsu@0.0.0 Сценарий сборки. 23 ошибка Это, вероятно, не проблема с npm. Там скорее всего, дополнительный вывод журнала выше. 24 подробных выхода [1, правда]

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Хорошо, я наконец-то понял это, хотя, вероятно, хакерским способом. Я просто использовал 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: ""
};
0 голосов
/ 20 января 2019

Вы пробовали 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 и запустите скрипт сборки, шаг за шагом. Я считаю полезным устранять неполадки, возникающие при сбоях по неизвестным причинам.

...