jenkins中shell是按照shell的顺序依次执行的,每次拿到一个shell的返回值才会进行下一项,如果通过appium命令行启动必然进入不了其他shell继续执行测试。由于jenkins本身会杀死衍生出来的进程,所以通过nohup启动appium也会被杀掉。
通过如下方法解决
在jenkins的第一个Execute shell中填写
#!/bin/bash
ps -aef |grep appium
rm -rf appium.log
touch appium.log
appium_log_content=`cat appium.log`
while [ ${#appium_log_content} -le 666 ]; do
appium_log_content=`cat appium.log`
bash startAppium.sh
echo "appium still not started!"
sleep 2
done
ps -ef |grep appium
cat appium.log
sleep 2
在项目的根目录增加startAppium.sh
脚本,脚本内容如下:
nohup node /Applications/Appium.app/Contents/Resources/app/node_modules/appium/build/lib/main.js >>appium.log 2>&1 &
中间执行测试用例,结尾处安全退出。增加Execute shell:
ps aux |grep appium |grep -v grep |awk '{print $2}' |xargs kill -9