文档章节

jenkins 部署 swoole 项目

dubox
 dubox
发布于 05/30 20:30
字数 784
阅读 297
收藏 0

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

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

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

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

 

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

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

 

出现这种情况应该是 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 从而退出脚本

解决办法是 :

点击高级选项

给 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 问题解决了。。。

 

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

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

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

© 著作权归作者所有

共有 人打赏支持
dubox
粉丝 3
博文 94
码字总数 27160
作品 0
西安
程序员
私信 提问
RapPHP 支持 Swoole 的全 Web 开发框架

RapPHP 开发框架现在正式向全网进行开源,经过我们内部一定时间的开发升级,当前版本已迭代到 v2.0.6,当前框架包含完整的开发 php 项目需要的各个组件和特性,并已经过多个项目的验证。 Ra...

景颢
09/07
0
0
RapPHP 正式发布,支持 Swoole 的全 Web 开发框架

RapPHP 开发框架现在正式向全网进行开源,经过我们内部一定时间的开发升级,当前版本已迭代到 v2.0.6,当前框架包含完整的开发 php 项目需要的各个组件和特性,并已经过多个项目的验证。 Ra...

景颢
09/07
0
0
千寻/swooleWechat

swooleWechat 本项目使用swoole framework官方框架开发,在不改动原框架基础上进行优化,目前的优化主要是控制器模块支持、配置文件按环境不同划分. 本项目主要为了节省微信服务号的开发成本...

千寻
2017/05/15
0
0
RapPhp 2.0.8 发布:支持 Swoole 的全 Web 开发框架

RapPHP 开发框架现在正式向全网进行开源,经过我们内部一定时间的开发升级,当前版本已迭代到 v2.0.8,当前框架包含完整的开发 php 项目需要的各个组件和特性,并已经过多个项目的验证。 Ra...

景颢
09/11
0
0
openshift/origin学习记录(7)——集成Jenkins服务

学习资料来源于官方英文文档与《开源容器云OpenShift》一书,因为刚开始学习,不确定博客的正确性,以下内容仅供参考。 Openshift项目提供了集成Openshift插件的Jenkins容器镜像和部署模板。...

huqigang
2017/09/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用cefSharp实现网页自动注册登录的需要注册的一些事项

最近朋友有个需要自动注册登录点击的事,我帮着写了写,好久没写过这东西了,在写的过程中总结了需要注意的一些事项。 一、换IP之后要测试一下速度,我目前用的最简单的测试方法就是20-30秒加...

我退而结网
15分钟前
1
0
Go语言中使用 BoltDB数据库

boltdb 是使用Go语言编写的开源的键值对数据库,Github的地址如下: https://github.com/boltdb/bolt boltdb 存储数据时 key 和 value 都要求是字节数据,此处需要使用到 序列化和反序列化。...

Oo若离oO
16分钟前
1
0
zookeeper分布式锁

//lock 锁 定义分布式锁public interface Lock {//获取锁public void getLock();//释放锁public void unLock();} public abstract class ZookeeperAbstractLock implements Loc......

熊猫你好
23分钟前
0
0
mysql_事务隔离机制

事务隔离机制 事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在mysql中,事务支持是在引擎层实现的。mysql是一个支持多引擎的系统,但并不是所有引擎都支持事务,比如mysql...

grace_233
26分钟前
0
0
不学无数——Java中IO和NIO

JAVA中的I/O和NIO I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道。在当今这个数据大爆炸时代,I/O 问题尤其...

不学无数的程序员
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部