Jenkins之SSH发布插件脚本编写的大坑

Table of Contents

使用Jenkins自动构建环境已经有段时间了,其中一个大坑足足绊脚了一个多月。

事情是这样的,目前在做的项目是个电商网站,用的是node.js,Jenkins服务器已设置和node.js服务器的ssh免密码登录,并且已经建立了自动构建的Jenkins工程,通过ssh插件远程执行node.js服务器上的shell脚本来完成发布,部分配置如下图,

 

脚本的主要动作有三个:

    1  停止相关node.js进程

    2  部署node工程

    3  重启停止的node进程

 

然而问题来了,此脚本在node.js服务器上shell控制台运行完全正常,相关node.js进程可以正常stop和start,但是Jenkins上运行构建后,最后一步的node.js的启动失败,netstat -nltp 查看对应端口根本未打开。

 

尝试1:设置Jenkins内置变量BUILD_ID=dontkillme,运行依然失败

尝试2:上图中“exec command”设置为bash启动,也就是bash /home/www-data/TEST_MAS_jenkins/mas_jenkins_deploy.sh,运行后依然无法启动node.js进程

 

就这样一直僵了一个多月,一直找不到办法。

 

有一天突然跟架构师商量此事,无意间在脚本中加入了一行,仅仅一行,就搞定了。

原来Jenkins远程调用node.js服务器脚本的时候,环境变量出问题了,脚本中启动node.js的命令可能需要其他库的路径,但是通过Jenkins调用却未获得。

解决办法:在脚本中加入一行source /etc/profile即可同步环境变量

 

至此,测试环境真正实现自动化构建和部署。