jenkins 部署 swoole 项目

原标题:ERROR: Exception when publishing, exception message [Exec timed out or was interrupted after 120,000

————————————————————————————————————————————

最近 ,用 swoole 搞了个服务端项目,以前都是 php-fpm 项目,

这次不同的是要有自己的启动脚本了。。。

 

然后也想用 jenkins 实现自动部署,于是问题来了,当 jenkins 执行完所有命令后并没有终止,而是:

201101_On8f_2399303.png

 一直转圈  其实已经执行完了。

 

出现这种情况应该是 jenkins 无法判断命令是否执行完成,于是各方搜索,有说是命令最后要通过 

exit 0 表示成功,exit 1 表示失败

经测试 无效。。。

 

后来找到了这个解释:

Since you are executing a script from a non-TTY environment; The Jenkins is not able to get the exit properly, out of your script.(https://stackoverflow.com/questions/11290540/jenkins-text-finder-unable-to-success-my-build/22011893#22011893

大概是:你在一个non-TTY环境执行脚本,导致 jenkins 不能正确的得到你的脚本的 exit 从而退出脚本

解决办法是 :

202227_u2y4_2399303.png

点击高级选项

202321_Y9cq_2399303.png

给 pty 打上勾;

果然问题解决。。。

 

但是,为什么会出现这个问题还没搞清楚,因为之前的 php-fpm 项目都不需要勾这个,两者之间的主要区别就是:

之前是:service php-fpm restart

我的是:sh start.sh ;  sh stop.sh

难道是系统 service 有什么不同?

 

-----------------------第二天更新------------------------

使用了 pty 又有一个新问题,我的主进程使用swoole_process::daemon 实现了守护进程,当 jenkins 的 pty 退出后 依然在运行,可是主进程启动的两个子进程死掉了。。。

后来把子进程也做成守护进程 还是不行,

后来发现swoole 的daemon 会重新 fork当前进程,网上有说重新 fork 就和当前会话脱离关系了,会话结束时就不会结束进程(但是守护进程本来不就是干这个事儿的么 ?),

于是我猜测问题可能在于 我的swoole_process::daemon调用在主进程的最后 即启动子进程之后,这样子进程就是 fork 之前的主进程启动的和会话没有脱离关系(但是网上有这样的说法:“因为shell只认识它自己fork出来的子进程,并不知道"子又生孙"的事情,也就不会给孙子进程发送SIGHUP信号了;” )?

又于是 我把swoole_process::daemon放到了最开始 果然问题解决!!

后面还有个小问题 :有一定概率服务起不起来,应该是主进程 fork 之后,pty 没有等到它执行完成?于是在最后加 sleep 1 问题解决了。。。

170503_eyIc_2399303.png

 

现在问题是解决了,但是里面的原理比没有十分清楚,

父进程、子进程、tty、pty、守护进程 它们之间的关系或协作关系还有待进一步研究,

按网上的说法  ssh 登录服务器应该也属于 pty ,但是我 ssh 等服务器启动我的服务 再退出也是没有问题的,不知道 jenkins 的 pty 有什么不同? 或者 jenkins 勾选和不勾选 pty 有什么不同?

转载于:https://my.oschina.net/u/2399303/blog/1821437

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值