使用 Jenkins 时永远无法启动
Posted
技术标签:
【中文标题】使用 Jenkins 时永远无法启动【英文标题】:Forever not starting when using Jenkins 【发布时间】:2014-06-05 21:30:24 【问题描述】:所以我有一个 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 标志或永远配置目录。有什么想法吗?
【问题讨论】:
【参考方案1】:这与 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
被忽略,快速谷歌搜索出现:forever -p /var/run/forever is ignored,这表明它是一个开放的错误。
编辑: 为避免修改 nodejs 脚本(如果它不是您的文件),您只需在执行 node 命令之前更改到正确的当前目录即可。在 Jenkins 和命令行中工作:
cd /var/nodejs/app && sudo NODE_ENV=development forever start -a -l logs/forever.log -o logs /output.log -e logs/error.log app.js
(粗体更改的部分)
【讨论】:
在不修改 nodejs 脚本的情况下添加了解决方法 效果很好。也许你可以永远修复它? github.com/nodejitsu/forever/issues/521 我很乐意...但我对nodejs一无所知,除了它是“在服务器上执行的javascript”。很高兴解决方法对您有所帮助。以上是关于使用 Jenkins 时永远无法启动的主要内容,如果未能解决你的问题,请参考以下文章
Jenkins 无法在 macOS 10.12 (Sierra) 上启动
在 Jenkins Docker 代理中使用测试容器:容器无法启动,NoRouteToHostException
Discord.js 无法永远在服务器上使用 process.env 启动机器人,但它可以通过 Visual Studio 在我的本地驱动器上正常工作