У меня есть монорепозиторий, в котором серверная часть и интерфейс находятся в разных папках.
backend / package. json
frontend / package. json
Я бы хотелось бы сохранить node_modules в кеш для бэкэнда и внешнего интерфейса отдельно, поэтому мне не нужно запускать npm ci для тестирования и сборки отдельно.
Вот моя конфигурация
version: 2.1
jobs:
# hello-world:
# docker:
# - image: amazon/aws-cli
# steps:
# - checkout
# - run:
# name: Say Hello
# command: |
# echo "Hello World"
backend-build:
docker:
- image: circleci/node:13.8.0
steps:
- checkout
- run:
name: Backend Build
command: |
ls
cd backend
npm ci
npm run build
- save_cache:
key: backend-{{ checksum "package-lock.json" }}
paths:
- backend/node_modules
backend-test:
docker:
- image: circleci/node:13.8.0
steps:
- checkout
- restore_cache:
keys: backend-{{ checksum "/backend/package-lock.json" }}
- run:
name: Run Backend tests with JUnit as reporter
command: |
cd backend
npm t -- --ci --reporters=default --reporters=jest-junit
environment:
JEST_JUNIT_OUTPUT_DIR: ./reports/junit/
- store_test_results:
path: ./reports/junit/
- store_artifacts:
path: ./reports/junit
- run:
name: Backend Tests failed
command: |
echo "Backend tests have failed, placeholder for later"
when: on_fail
frontend-build:
docker:
- image: circleci/node:13.8.0
steps:
- checkout
- run:
name: Frontend Build
command: |
cd frontend
npm ci
npm run build
- save_cache:
key: frontend-{{ checksum "./frontend/package-lock.json" }}
paths:
- frontend/node_modules
frontend-test:
docker:
- image: circleci/node:13.8.0
steps:
- checkout
- restore_cache:
keys: frontend-{{ checksum "./frontend/package-lock.json" }}
- run:
name: Run frontend tests with JUnit as reporter
command: |
cd frontend
npm t -- --ci --reporters=default --reporters=jest-junit
environment:
JEST_JUNIT_OUTPUT_DIR: ./reports/junit/
- store_test_results:
path: ./reports/junit/
- store_artifacts:
path: ./reports/junit
- run:
name: frontend Tests failed
command: |
echo "frontend tests have failed, placeholder for later"
when: on_fail
workflows:
default:
jobs:
- hello-world
- backend-build
- frontend-build
- backend-test:
requires:
- backend-build
- frontend-test:
requires:
- frontend-build
Есть ли способ сделать это отдельно для серверной части и внешнего интерфейса, создав 2 разных ключа для папок пакетов?
Я не уверен, что могу создать 2 разных кеша с 2 разных ключа. Я думаю, что каждый ключ представляет другой объект кеша, это правда?
Или у вас есть только один объект кеша? Я читал о создании одного package.lock . json путем объединения файлов пакета. Я просто ищу другой способ сделать это, более интуитивно понятный и понятный.
Я изучаю это, поэтому не знаю, как об этом думать. Документация была для меня не очень понятной. Спасибо.