我想使用jenkins来运行nodejs项目。一切进展顺利,但我没有看到詹金斯工作取得任何成功。
我使用npm install& amp;来启动服务器在詹金斯的npm start命令。它启动服务器,但不会给构建成功,因此,我无法启动其他依赖于节点服务器和构建成功的作业。当新的提交到达时,jenkins会检测到它,但是当原始作业正在运行时,作业不会重新启动而是保持挂起状态。
我是詹金斯的新手。任何人都可以为此提出建议吗?
答案 0 :(得分:2)
听起来js脚本的执行正在挂起你的构建,尝试使用&之后将其发送到后台:
npm install
npm start &
另请注意,从Jenkins作业运行npm start
将生成一个新进程Jenkins will kill the jobs spawned during a build,如果您希望此进程保留为守护程序,则会出现问题。
为避免您需要在命令之前提供标记:
BUILD_ID=dontKillMe npm start &
您还没有具体了解工作流程中的所有步骤,但我想您在第一次工作之后尝试执行一些构建后操作,因此发现您的流程未运行导致后续工作失败。
另外,请尝试使用forever。它将确保您的脚本持续运行,直到您停止它为止,您可以使用它启动您的应用程序:
BUILD_ID=dontKillMe forever start yourApp.js
答案 1 :(得分:0)
问题:似乎您的nodejs服务器在执行后未在jenkins上运行,您已经研究并测试了几个解决方案:
选项1-推荐:在Jenkins上运行后台进程,该进程使用BUILD_ID参数中的 dontKillMe 标志和 nuhup unix命令保持生命。< / p>
从文档中:实现此目的的便捷方法是更改Jenkins的ProcessTreeKiller正在寻找的环境变量BUILD_ID。这将使Jenkins假定您的守护进程不是由Jenkins构建生成的。
nohup 是用于忽略HUP(挂断)信号的POSIX命令。 HUP 按照惯例,信号是终端警告相关进程的方式 退出。
cd <yourApp>
BUILD_ID=dontKillMe nohup npm start &
选项2。使用node.js外部软件包,例如永远或 pm2
永久示例(本地安装):
cd <yourApp>
npm install forever
./node_modules/forever/bin/forever start -c "npm start"
pm2示例(全局安装):
npm install pm2 -g
cd <yourApp>
pm2 start scripts/start.js
测试:之后,可以使用bash脚本命令验证服务器是否正在运行:
# check process
ps -ef | grep node
# check connectivity in server port
telnet localhost <yourNodeJSPortRunning>
PS ,有时某些中断的信号会导致您的start.js
脚本出现问题并终止节点进程,请尝试避免这种情况-例如:
['SIGINT', 'SIGTERM'].forEach(function(sig) {
process.on(sig, function() {
devServer.close();
process.exit();
});
});
})
.catch(err => {
if (err && err.message) {
console.log(err.message);
}
process.exit(1);
});
删除这段代码后,它可以正常工作,只要机器处于启动状态,该过程就可以进行。