在CircleCI构建的目录中找不到package.json

时间:2019-04-20 13:28:22

标签: continuous-integration yaml circleci

我有一个包含两个子项目的仓库。为了完整起见,前端项目和firebase云功能项目(都使用单独的package.jsons)。现在对于这个项目,我想同时开始两个工作。但是我无法使用CircleCI完成设置。我没有任何缓存配置。

项目结构

-creepy-stories
  -.circleci
  -cloud-functions
    -functions
     package.json
  -frontend
   package.json

config.yml

version: 2.1
jobs:
  cloud-functions:
    docker:
      - image: circleci/node:10.8.0

    working_directory: ~/creepy-stories/cloud-functions/functions

    steps:
      - checkout
      - run: npm install
      - run: npm run lint
      - run: npm run build

  frontend:
    docker:
      - image: circleci/node:10.8.0

    working_directory: ~/creepy-stories/frontend
    steps:
      - checkout
      - run: npm install
      - run: npm run lint
      - run: npm run build
      - run: npm run test:coverage

workflows:
  version: 2
  cloud-functions_and_frontend:
    jobs:
      - cloud-functions
      - frontend

所以现在我想我的问题是环境找不到我的package.json文件。打印的错误如下所示:

npm运行皮棉

#!/bin/bash -eo pipefail
npm run lint
npm ERR! path /home/circleci/creepy-stories/frontend/package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open '/home/circleci/creepy-stories/frontend/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent 

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/circleci/.npm/_logs/2019-04-20T13_08_45_252Z-debug.log
Exited with code 254

我不知道在我的配置中两次设置工作目录是否正确,但是至少要在两个diff中进行设置。工作。

更新

如果我检出Project的根目录,然后cd到所需的文件夹并执行脚本,我就设法使其正常工作。但这并不是真正的DRY(不要重复自己),也许你们中的一些人有更好的解决方案:

version: 2.1

jobs:
  cloud-functions:
    docker:
      - image: circleci/node:10.8.0

    working_directory: ~/creepy-stories

    steps:
      - checkout
      - run: cd cloud-functions/functions && npm install
      - run: cd cloud-functions/functions && npm run lint
      - run: cd cloud-functions/functions && npm run build

  web:
    docker:
      - image: circleci/node:10.8.0

    working_directory: ~/creepy-stories
    steps:
      - checkout
      - run: cd web && npm install
      - run: cd web && npm run lint
      - run: cd web && npm run build
      - run: cd web && npm run test:coverage

workflows:
  version: 2
  concurrently:
    jobs:
      - cloud-functions
      - web

2 个答案:

答案 0 :(得分:1)

签出时,会自动将git信息库的根复制到当前工作目录中。如果要使工作目录成为根目录的子目录,则需要为检出步骤提供一个路径,该路径将文件复制到工作目录的父目录中。

示例:

working_directory: ~/creepy-stories/cloud-functions
steps:
  - checkout:
      path: ~/creepy-stories

链接到文档:https://circleci.com/docs/2.0/configuration-reference/#checkout

答案 1 :(得分:0)

我认为您已经添加了一个目录。

您应该向CircleCi前端任务添加一个额外的运行,该任务先执行pwd,然后执行ls -la

您可能会发现结帐已结束于与您的仓库相同名称的目录中。

编辑以回答后续问题:

如果我没记错的话,checkout命令总是将其放在服务器的根目录中,因此您可以更新工作目录来容纳该目录。像这样

    working_directory: ~/creepy-stories/web
    steps:
      - checkout
      - run: npm install
      - run: npm run lint
      - run: npm run build
      - run: npm run test:coverage