永远不要在使用Jenkins时开始

时间:2014-04-21 18:50:57

标签: node.js unix jenkins forever

所以我有一个jenkins构建,它使用以下命令永远开始。

sudo NODE_ENV=development forever start -a -l /var/nodejs/app/logs/forever.log -o /var/nodejs/app/logs/output.log -e /var/nodejs/app/logs/error.log /var/nodejs/app/app.js 

此命令会引发以下错误。

running on the development server

fs.js:427
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^
Error: ENOENT, no such file or directory 'ssl/gd_bundle.crt'
    at Object.fs.openSync (fs.js:427:18)
    at Object.fs.readFileSync (fs.js:284:15)
    at Object.<anonymous> (/var/nodejs/app/app.js:190:10)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3
error: Forever detected script exited with code: 8

当我从服务器上的命令行运行它时,我可以得到相同的错误,但是只有当我不在app.js文件的目录中时。如果我指定app.js文件的路径,为什么永远对文件所在的位置敏感。

我还发现永远不会尊重-p标志或永远的config目录。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这与Jenkins没有任何关系,因为你说从命令行得到同样的错误。

据我所知,这不是"forever [being] sensitive to where the file is located"的问题,而是你的nodejs脚本app.js对它的启动位置敏感。 Forever 中的示例使用包含目录且没有问题的路径。尝试从不正确的目录启动没有forever的脚本,您将会遇到同样的问题。

在您的脚本代码中的某个位置,您在确定ssl/gd_bundle.crt的位置时依赖于当前的工作目录。 如果没有看到你的代码来源,我只能猜测和指责。

  • 如果您ssl/gd_bundle.crt的位置与脚本的位置有关,那么如此答案所示: How do I get the path to the current script with Node.js? ,您应该使用__dirname获取脚本的目录位置,无论当前工作目录如何,都是相同的。

  • 如果您在文件系统上修复了ssl/gd_bundle.crt的位置,则应使用绝对路径,从/开始,以确保它独立于当前工作目录。

对于被忽略的-p,快速Google搜索会出现这种情况: forever -p /var/run/forever is ignored ,表明它是一个开放的错误。

<强> 编辑:
要避免修改nodejs脚本(如果它不是您的文件),您只需在执行node命令之前更改为正确的当前目录。适用于Jenkins以及命令行:

  

cd / var / nodejs / app&amp;&amp; sudo NODE_ENV =开发永远开始-a -l <​​strong>日志 /forever.log -o 日志< /strong>/output.log -e 日志 /error.log app.js

加粗已更改的部分)