# 常见问题
# 部署命令已执行完毕,但需等很久才显示部署成功,甚至出现部署超时
将项目启动命令的输出信息重定向到指定文件中,来释放启动进程。
假设原命令为:
nohup java -jar BiuBiuBiu.jar &
可以更改为:
nohup java -jar BiuBiuBiu.jar >output 2>&1 &
更换启动命令的格式,将串联成一行的多个命令分离成单独的每一行来执行。
假设原始命令格式为:
command1 && command2 && command3
可以更改为:
command1
command2
command3
# 本地部署无误,但devops中部署失败
# 情况一:变量赋值为空,命中了devops部署失败判定规则
linux中调用命令结果给变量赋值时,若该值检测为空,那么命令返回值将会是1,否则返回值将会是0。示例如下:
[root@test ~]# test=$(ps -ef| grep nginx|grep -v grep) [root@test ~]# echo $? 1 [root@test ~]# echo $test [root@test ~]# test=$(ps -ef| grep nginx) [root@test ~]# echo $? 0 [root@test ~]# echo $test root 78668 78666 0 15:29 pts/2 00:00:00 grep --color=auto nginx
在linux服务器中执行sh脚本,不会因为使用上述方式给变量赋值为空而停止脚本,但是devops部署时会检测脚本中每一个步骤的命令返回值,当检测到返回值非0时,就会判定为部署失败。因此可以对脚本中的变量封装做一些修改,以上面进程检测为例:
# 原始脚本大致结构可能为 test=$(ps -ef|grep nginx|grep -v grep) if [ -z $test ];then echo "进程不存在" fi # 可以改成如下结构,就不会触发部署任务的非零值检测: if ! ps -ef|grep nginx|grep -v grep;then echo "进程不存在" fi
← 产品特点