Как сохранить кеш в Monorepo для npm установки, node_modules в CircleCI? - PullRequest
0 голосов
/ 12 июля 2020

У меня есть монорепозиторий, в котором серверная часть и интерфейс находятся в разных папках.

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 путем объединения файлов пакета. Я просто ищу другой способ сделать это, более интуитивно понятный и понятный.

Я изучаю это, поэтому не знаю, как об этом думать. Документация была для меня не очень понятной. Спасибо.

...