Как вызвать переменную окружения circleCI в проекте Angular 2+?
У меня есть угловой проект, который имеет файл api-keys.ts, который выглядит следующим образом:
export var masterFirebaseConfig = {apiKey: $fireBaseApiKey, authDomain: 'dataJitsu.firebaseapp.com',databaseURL: 'https://datajitsu.firebaseio.com',storageBucket: '',messagingSenderId: '495992924984'};
Я думаю $fireBaseApiKey
хранится как переменная окружения в моем проекте на circleCI, как вы можете видеть на картинке здесь:
https://stackru.com/images/d7b128bd733d892f1b0eceb1 33f0c6acd083539b.png
Тем не менее, я все еще получаю следующую ошибку при запуске моей конфигурации на 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, поэтому я также добавил переменную в контекст проекта (и контекст, и ключ одиночной пары ключ-значение имеют одно и то же имя):
Обновление: вот вывод из файла журнала 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.1 3.0 4 verbose run-script [ 'prebuild', 'build', 'postbuild' ] 5 info жизненный цикл data-jitsu@0.0.0~prebuild: data-jitsu@0.0.0 6 info lifecycle 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/bin:/sbin:/bin 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 сигнал: ноль 12 info lifecycle data-jitsu@0.0.0~build: не удалось выполнить сценарий сборки 1 3 многословного стека Ошибка: data-jitsu@0.0.0 build:
ng build
1 3 многословный стек Выход из состояния 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 (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 verbose Linux 4.4.0-141-generic 17 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "build" 18 подробный узел v10.13.0 19 подробный 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 ответа
Хорошо, я наконец понял это, хотя, вероятно, хакерским способом. Я просто использовал 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: ""
};
Ты пытался 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
и запустите свой скрипт сборки, шаг за шагом. Я считаю полезным устранять неполадки сборок по неизвестным причинам.