为什么 Travis CI 在 npm 安装期间不能创建目录?

Why can't Travis CI create a directory during an npm install?

我最近的提交以某种方式导致 Travis CI 在尝试 运行 npm install 时停止工作。我唯一的改变是更正了调用 Javascript 文件的拼写错误(从 fooBar/foo-bar.jsfoo-bar/foo-bar.js),所以我不确定提交本身是否是原因。我从 Travis CI 收到的错误如下:

bower                                               EACCES EACCES, mkdir '/public'

Stack trace:
Error: EACCES, mkdir '/public'
    at Error (native)

Console trace:
Error
    at StandardRenderer.error (/home/travis/build/myWorkplace/mySite/node_modules/bower/lib/renderers/StandardRenderer.js:83:37)
    at Logger.<anonymous> (/home/travis/build/myWorkplace/mySite/node_modules/bower/lib/bin/bower.js:110:26)
    at Logger.emit (events.js:107:17)
    at Logger.emit (/home/travis/build/myWorkplace/mySite/node_modules/bower/lib/node_modules/bower-logger/lib/Logger.js:29:39)
    at /home/travis/build/myWorkplace/mySite/node_modules/bower/lib/commands/index.js:48:20
    at _rejected (/home/travis/build/myWorkplace/mySite/node_modules/bower/lib/node_modules/q/q.js:844:24)
    at /home/travis/build/myWorkplace/mySite/node_modules/bower/lib/node_modules/q/q.js:870:30
    at Promise.when (/home/travis/build/myWorkplace/mySite/node_modules/bower/lib/node_modules/q/q.js:1122:31)
    at Promise.promise.promiseDispatch (/home/travis/build/myWorkplace/mySite/node_modules/bower/lib/node_modules/q/q.js:788:41)
    at /home/travis/build/myWorkplace/mySite/node_modules/bower/lib/node_modules/q/q.js:604:44
System info:
Bower version: 1.7.7
Node version: 0.12.2
OS: Linux 3.13.0-40-generic x64

不幸的是,Travis CI 是由承包商为我们设置的,所以我不知道要提供更多信息,但如果有更多有用的信息,我会很乐意找到出来了。

编辑:
查看成功 运行 的日志,看起来 mkdir 行是此构建的新内容...

编辑2: 这是我的 .travis.ymlbower.json:

.travis.yml

language: node_js
node_js:
- 0.12.2
services:
- mongodb
before_install: npm install -g grunt-cli
install: npm install
before_script: grunt && grunt --target=admin
env:
  global:
  - NODE_ENV: test
  - PORT: 5000
  - SSL: "off"
  - TOKEN_SECRET: [xxx]
  - MONGO_URI: mongodb://localhost:27017/myWorkplace-test
  - BUCKET: myWorkplacebucket
  - AWS_REGION: us-west-2
  - CDN: https://[xxx].cloudfront.net
  - POSTMARK_API_KEY: POSTMARK_API_TEST
  - MAIL_FROM_NAME: myWorkplace
  - MAIL_FROM_EMAIL: user@myWorkplace.com
  - AIRBRAKE: [xxx]
  - secure: [xxx]
  - secure: [xxx]
deploy:
  - provider: s3
    access_key_id: [xxx]
    secret_access_key:
      secure: [xxx]
    bucket: "myWorkplace-builds"
    skip_cleanup: true
    region: us-west-2
    local_dir: dist
    on:
      branch: master
  - provider: s3
    access_key_id: [xxx]
    secret_access_key:
      secure: [xxx]
    bucket: "myWorkplace-builds-dev"
    skip_cleanup: true
    region: us-west-2
    local_dir: dist
    on:
      branch: dev
  - provider: codedeploy
    access_key_id: [xxx]
    secret_access_key:
      secure: [xxx]
    revision_type: github
    region: us-west-2
    application: mySite
    deployment_group: devs
    on:
      branch: dev
  - provider: codedeploy
    access_key_id: [xxx]
    secret_access_key:
      secure: [xxx]
    revision_type: github
    region: us-west-2
    application: mySite
    deployment_group: production
    on:
      branch: master
notifications:
  slack: myWorkplace:[xxx]

bower.json

{
  "name": "myWorkplace",
  "version": "0.0.1",
  "authors": [
    "Foo User <user@myWorkplace.com>"
  ],
  "license": "MIT",
  "private": true,
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "test",
    "tests"
  ],
  "dependencies": {
    "angular": "1.3.11",
    "jquery": "2.1.2",
    "angular-route": "1.3.11",
    "angular-resource": "1.3.11",
    "angular-animate": "1.3.11",
    "angular-mocks": "1.3.11",
    "less": "2.5.1",
    "bootstrap": "3.3.2",
    "angular-bootstrap": "0.12.1",
    "moment": "2.8.3",
    "html5-boilerplate": "4.3.0",
    "lodash": "3.1.0",
    "angular-bootstrap-show-errors": "2.0.0",
    "autofill-event": "1.0.0",
    "angular-ui-router": "0.2.11",
    "ngInfiniteScroll": "1.0.0",
    "angular-file-upload": "1.1.5",
    "d3": "3.3.10",
    "iso-currency": "~0.2.1",
    "angular-moment": "0.8.2",
    "angular-filter": "0.5.1",
    "angular-busy": "~4.1.2",
    "angular-csv-import": "0.0.14",
    "angulartics": "0.17.2",
    "angular-toggle-switch": "1.0.0",
    "ng-idle": "1.0.0",
    "iso-4217-currency-codes-angular": "~1.0.1"
  },
  "resolutions": {
    "angular": "1.3.11",
    "d3": "3.5.5"
  }
}

EDIT3:我重新运行了之前成功的 Travis 构建,但由于同样的错误而失败。这使我认为对模块的某种更新使其不再有效。不过我不确定。值得注意的是,也许有些行说 graceful-fs version 3 and before will fail on newer node releases. Please update to graceful-fs@^4.0.0 as soon as possible. 我不知道如何更新它,因为 graceful-fs 不在提交到存储库的 package.json 中......

原来问题的根本原因是更新的包不再在我的环境中工作。我通过将 package.json 中的所有版本锁定为我之前知道的版本来修复它。