CircleCI权限被拒绝打开用于Firebase部署的firebase-tools.json

问题描述

我正在使用Firebase托管我的个人网站,并希望集成CircleCI以实现更快的集成。但是,我在部署步骤中收到此错误

注意 在deploy命令之前添加sudo也会导致构建失败

/home/circleci/project/node_modules/configstore/index.js:52
          throw error;
          ^

Error: EACCES: permission denied,open '/home/circleci/.config/configstore/firebase-tools.json'
You don't have access to this file.

以下是我项目的yaml配置:

---
commands:
  restore_cache_cmd:
    description: "Restore cached npm install"
    steps:
      - restore_cache:
          key: 'dependency-cache-{{checksum "package.json"}}'
  save_cache_cmd:
    description: "Saving npm install"
    steps:
      - save_cache:
          key: 'dependency-cache-{{ checksum "package.json"}}'
          paths:
            - "./node_modules"
  update:
    description: "Installing project's dependencies"
    steps:
      - checkout
      - restore_cache_cmd
      - run: sudo npm i -g npm@latest
      - run: sudo npm i
      - save_cache_cmd
  build_deploy:
    description: "Building project"
    steps:
      - run:
          name: Build
          command: sudo npm run build
      - run:
          name: Deploy
          command: ./node_modules/.bin/firebase deploy --token=$FIREBASE_DEPLOY_TOKEN -- only hosting
executors:
  docker-executor:
    docker:
      - image: "cimg/node:12.14.1"
jobs:
  build_site:
    executor: docker-executor
    working_directory: ~/Darryls-Personal-Site
    steps:
      - update
      - build_deploy
version: 2.1
workflows:
  build_site:
    jobs:
      - build_site:
          filters:
            branches:
              only: master

我已经通过其他问题完成的步骤:

  • 使用firebase login:ci获取刷新令牌,并将其放入CircleCI项目环境中的环境变量中
  • 使用npm install --save-dev firebase-tools

解决方法

我认为问题在于您使用npm来运行所有sudo命令,除了firebase deploy命令。 您绝对应该使用当前用户而不是超级用户运行所有内容。 在official tutorials中,您会看到sudo没有任何运行,除了非常特殊的情况。

此外,您可以使用./node_modules/.bin/firebase deploy来代替npx run firebase deploy,它首先要在本地node_modules中查找,然后在全局中查找。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...