記錄一次jenkins 部署vue 項目的問題及解決方法


項目一直穩定運行,部署也沒有啥毛病。有一天,構建就出現了以下的錯誤提醒:

internal/fs/utils.js:308
    throw err;
    ^

Error: EACCES: permission denied, open '/data/jenkins/workspace/ifarm_cloudpc_front_testing/node_modules/vue-demi/lib/index.cjs.js'
    at Object.openSync (fs.js:476:3)
    at Object.writeFileSync (fs.js:1467:35)
    at copy (/data/jenkins/workspace/ifarm_cloudpc_front_testing/node_modules/vue-demi/scripts/utils.js:20:6)
    at switchVersion (/data/jenkins/workspace/ifarm_cloudpc_front_testing/node_modules/vue-demi/scripts/utils.js:48:3)
    at Object.<anonymous> (/data/jenkins/workspace/ifarm_cloudpc_front_testing/node_modules/vue-demi/scripts/postinstall.js:9:3)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
  errno: -13,
  syscall: 'open',
  code: 'EACCES',
  path: '/data/jenkins/workspace/ifarm_cloudpc_front_testing/node_modules/vue-demi/lib/index.cjs.js'
}

很顯然,部署失敗了。

如何解決呢?

1. 看錯誤:

Error: EACCES: permission denied, open '/data/jenkins/workspace/ifarm_cloudpc_front_testing/node_modules/vue-demi/lib/index.cjs.js'

翻譯成白話文是:  打開 xxx路徑的文件 的時候發現,沒有權限,被拒絕掉了。

知道這個就好解決了。

 

 方法1: 當前jenkins登陸用戶 直接作為 root 身份 來運行:   我是最高權限,不管權限不權限的,都管不住我。

雖然不優雅,但是可以解決問題的方法就是好方法。

npm install --unsafe-perm=true --allow-root

就是說 npm 出於安全考慮不支持以 root 用戶運行,即使你用 root 用戶身份運行了,npm 會自動轉成一個叫 nobody 的用戶來運行,而這個用戶幾乎沒有任何權限。這樣的話如果你腳本里有一些需要權限的操作,比如寫文件(尤其是寫 /root/.node-gyp),就會崩掉了。

為了避免這種情況,要么按照 npm 的規矩來,專門建一個用於運行 npm 的高權限用戶;要么加 --unsafe-perm 參數,這樣就不會切換到 nobody 上,運行時是哪個用戶就是哪個用戶,即使是 root。

參考: https://segmentfault.com/q/1010000019365121

 

方法2: 賦予權限

chown -R /data/jenkins    // 賦予權限。本次是 / data/jekins 無權限,可根據情況賦予權限。
npm install
npm run build:test    // 測試環境的打包命令。根據項目來寫。

這樣,賦予權限后,install 就沒問題了。

而且,一次執行,后期都不用再執行賦予權限的命令都沒問題。這個比上個優雅點哈。。。。

2. 思考:

  與運維溝通,他反饋: 正常情況下  install 的時候用的就是root,所以jenkins是有root權限的。那怎么會出現上面的權限問題呢?

  經過了解: 如果 運維修改了文件的位置,或者改了權限,則需要給jenkins 的用戶重新賦予權限。

最近jenkins部署的問題遇到好幾個。還有一個是因為node 版本導致無法安裝。下次記錄




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM