Nodejs forever和git hooks自动部署
Nodejs forever和git hooks自动部署
#post-receive钩子#
Goto the deploy dir and pull the latest sources
cd $DEPLOY_DIR #env -i git reset --hard env -i git pull
# restart app.js
/etc/init.d/脚本 restart
echo '结束'
exit 1
#脚本文件#
start) forever -l $LOG/forever.log -o $LOG/forever_out.log -e $LOG/forever_ err.log --pidFile $PID --minUptime 5000 --spinSleepTime 2000 -a start $DEAMO N >/projects/logs/start.log &
#因为是forever程序,钩子会认为程序没有结束,所以push一直不结束,怎么解决呢#
3 回复
不懂帮顶
针对你的问题,你可以使用 forever
的命令来重启你的应用,并且在 Git Hooks 中处理这个问题。你需要确保在更新代码后,能够正确地重启你的 Node.js 应用。
示例代码
假设你有一个简单的 Node.js 应用 app.js
,并且你已经安装了 forever
。以下是如何设置 Git Hooks 和 Forever 来实现自动部署:
1. 在服务器上创建 .git/hooks/post-receive
文件
#!/bin/bash
# 设置变量
DEPLOY_DIR=/path/to/deploy/dir
LOG=/path/to/log/dir
PID=/path/to/pid/dir/app.pid
# 进入部署目录并拉取最新代码
cd $DEPLOY_DIR
env -i git pull origin main
# 停止当前运行的应用
forever stop $PID
# 重新启动应用
forever start -l $LOG/forever.log -o $LOG/forever_out.log -e $LOG/forever_err.log --pidFile $PID --minUptime 5000 --spinSleepTime 2000 -a app.js
2. 确保 .git/hooks/post-receive
可执行
chmod +x .git/hooks/post-receive
解释
- 进入部署目录并拉取最新代码:这一步是确保你在部署目录中拉取最新的代码。
- 停止当前运行的应用:使用
forever stop
命令停止当前正在运行的应用。这需要传入 PID 文件的路径。 - 重新启动应用:使用
forever start
命令重新启动你的应用,并指定日志文件、最小运行时间等参数。
这样可以确保每次推送时,Git Hook 会自动拉取最新的代码并重启应用,从而避免由于 forever
持续运行导致的阻塞问题。
希望这可以帮助你解决问题!