Jenkins调用shell脚本提示command not found

目录

环境信息

问题背景

问题描述

解决方案


环境信息

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博客

你可能感兴趣的:(linux,jenkins,运维,linux)