目录
环境信息
问题背景
问题描述
解决方案
Jenkins 2.258
git 1.8.3.1
Spring Boot 2.0.8.RELEASE
使用Jenkins拉取git分支来构建应用,并自动部署:使用ssh将文件传输到指定服务器,并调用服务器上的shell脚本tfb-app-service.sh来启动应用。
应用成功的启动了,可是在启动脚本tfb-app-service.sh里写的记录ip信息不生效:
p05_dev 15076 1 99 10:32 ? 00:00:14 java -javaagent:/home/p05_dev/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=tfb-batch-app-192 -jar -Xms512m -Xmx1024m /home/p05_dev/tfb-batch-app/tfb-batch-app-6.0.1-SNAPSHOT.jar
如果直接执行启动脚本tfb-app-service.sh,那么记录ip信息的功能是生效的:
p05_dev 15309 1 99 10:40 pts/1 00:00:03 java -javaagent:/home/p05_dev/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=tfb-batch-app-190 -jar -Xms512m -Xmx1024m /home/p05_dev/tfb-batch-app/tfb-batch-app-6.0.1-SNAPSHOT.jar
tfb-app-service.sh的部分内容,获取ip并取最后的数字。如果取不到ip,则用默认值192
#获取当前服务器IP地址,拼接服务名
agent_name(){
iface="$(route -n | grep ^0.0.0.0 | awk '{print $8}')"
ip="$(ifconfig $iface | grep "inet 172" | awk '{ print $2}')"
if [ -z $ip ]; then
ip="xxx.xxx.xxx.192"
echo ${JAR_NAME/%-6.0.1-SNAPSHOT.jar/}-${ip##*.}
else
echo ${JAR_NAME/%-6.0.1-SNAPSHOT.jar/}-${ip##*.}
fi
}
查看Jenkins的控制台输出,在调用shell脚本的过程中,有提示信息:
sh tfb-app-service.sh restart] ... SSH: EXEC: connected tfb-app-service.sh: line 35: route: command not found tfb-app-service.sh: line 36: ifconfig: command not found
按照提示说明,找不到route命令和ifconfig命令,通过whereis命令找到这两个命令都在/usr/sbin下面,那么就是在执行shell脚本的时候,没有引用到/usr/sbin这个路径。
[nexus@localhost .jenkins]$ whereis route
route: /usr/sbin/route /usr/share/man/man8/route.8.gz
[nexus@localhost .jenkins]$ whereis ifconfig
ifconfig: /usr/sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
用xshell登录,查看PATH环境变量,是包含的/usr/sbin。
那么直接在Jenkins的job的配置里,在执行shell脚本前,加上两句话:
source .bash_profile
source /etc/profile
cd /home/p05_dev
source .bash_profile
source /etc/profile
sh tfb-app-service.sh restart
如此,问题解决。
注:
另一种方案:在tfb-app-service.sh脚本里,route和ifconfig写全路径:
/usr/sbin/route和/usr/sbin/ifconfig
关于如何批量修改已存在的job任务,参考另一篇博文:
批量修改Jenkins的job任务配置,JenkinsClient、JenkinsServer_lzhfdxhxm的博客-CSDN博客