使用docker安装jenkins。在jenkins上新建了一个maven项目,连接Gitee配置完成。同时在这个项目中配置Post build task
配上一段shell脚本。maven能打包成功,但是Post build task执行的shell脚本执行失败,/tmp/jenkins454199558142677876.sh: line 6: ps: command not found 产生这个错误。但是
ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' 这个命令在服务器控制台能正常执行。
#!/bin/bash
# 这里可替换为你的 war 或 jar 包路径
APP_NAME=zzh-aliyun-reptile-admin/target/zzh-aliyun-reptile-admin-0.0.1-SNAPSHOT.jar
# 检查程序是否在运行
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
date > //root/log/zzh-aliyun-reptile-admin-start.log
if [ -z "${pid}" ]; then
# 如果程序不存在直接启动程序,根据个人需求是否需要指定端口号
nohup java -jar -Dspring.profiles.active=release $APP_NAME >> //root/log/zzh-aliyun-reptile-admin-start.log 2>&1 &
else
# 如果已经执行,将程序停止
echo '程序目前启动中,正在关闭程序...' >> //root/log/zzh-aliyun-reptile-admin-start.log
kill -9 $pid
echo '已关闭运行中的程序~' >> //root/log/zzh-aliyun-reptile-admin-start.log
# 停止之后启动程序,根据个人需求是否需要指定端口号
nohup java -jar -Dspring.profiles.active=release $APP_NAME >> //root/log/zzh-aliyun-reptile-admin-start.log 2>&1 &
fi
尝试过几种方式:1,shell脚本中改成#!/bin/bash -ilex
加上source /etc/profile
2.在jenkins的系统管理->系统配置下配置全局属性环境变量,jenkins构建的时候出现新的问题:
我想要jenkins能构建成功,Post build task中的shell脚本执行成功,能正常运行jar包
你的docker里面没有ps这个命令,安装一下就好了。
如果是 Ubuntu系的直接在docker里 执行这个命令试试
apt-get update && apt-get install procps
可能是由于在Jenkins中执行的shell脚本所在的环境中缺少ps命令导致的。可以试试在shell脚本中添加ps命令所在的路径,比如在脚本开头添加如下代码:
PATH=$PATH:/usr/bin
或者试试在Jenkins中配置环境变量。
另外第二个错误是因为 log 文件夹不存在,需要先创建文件夹。
还有一点就是需要更改脚本中的文件路径为绝对路径。
仅供参考,望采纳,谢谢。
最终执行命令,是在宿主机还是在docker?别搞混了
你用的哪个docker镜像,官方的镜像是有的
怀疑你写的shell脚本是不是有逻辑错误,这个可以检查一下,再者就是Jenkins的版本兼容问题,可以上社区逛一圈。
我怀疑jenkins运行的环境有问题,你看看jenkins中是不是配置了多个环境导致。
这个可以简单的验证,你直接进入到docker中,运行下你的shell有没有问题就 可以知道。
针对最后一个问题,可以使用下面的方案
https://www.likecs.com/show-306389394.html
看看这个实例解题思路:
jenkins找不到命令一般有两种解决方式(前提是jenkins所在用户组有该命令的执行权限):
1、增加环境变量:在待执行的shell脚本前,执行export命令:export PATH = xxx:$PATH(xxx为找不到命令的所在目录)
2、脚本中直接使用命令的绝对路径:/usr/local/bin/py.test xxxx
使用第2种方法尝试解决
在linux中使用命令which pytest,找到pytest命令的路径 (我找到的路径为/root/anaconda2/bin/pytest)
在jenkins命令中更改为 /root/anaconda2/bin/pytest /home/ling/test_do.py