我的shell脚本如下所示:
#!/bin/bash
USER=$1
sudo rm -rf /home/$USER/system/logs/*
exit 0
在shell文件夹中检入cvs,Jenkins配置为通过“执行Shell”构建步骤在Linux机器上执行它:
bash -ex shell/clear-logs.sh myuser
但Jenkins用单引号包装整个sudo行,这导致我的日志文件没有被删除(尽管Jenkins作业成功通过):
[workspace] $ /bin/sh -xe /tmp/hudson7785398405733321556.sh
+ bash -ex shell/clear-logs.sh myuser
+ USER=myuser
+ sudo rm -rf '/home/myuser/system/logs/*'
+ exit 0
为什么Jenkins会这样做?如果我从Jenkins工作区位置调用脚本作为root用户,那么它可以正常工作。
修改
我有相同的shell脚本,在不同的cvs模块中,由Jenkins在同一个Linux服务器上执行。创建了一份新工作,无论是自由式还是复制现有工作,但没有任何区别。
答案 0 :(得分:3)
好吧,似乎通过添加“jenkins”来解决这个问题。用户访问“我的用户”#39;分组并重新启动jenkins服务。如果logs目录为空,则Jenkins控制台输出会以单引号报告路径,因为找不到文件。但是第二次运行作业有文件,没有单引号,文件被正确删除。
答案 1 :(得分:0)
调整/home/$USER/...
的权限我首先在控制台输出中获得了以下内容:
+ USER=geri
+ rm -rf '/home/geri/so-30802898/*'
rm: cannot remove ‘/home/geri/so-30802898/*’: Permission denied
Build step 'Execute shell' marked build as failure
在调整权限后,构建/删除成功。
答案 2 :(得分:-1)
Jenkins没有对你的引号做任何事情,例如将double改为single - 你看到了set -x
的输出。在你的shell中试试这个:
set -x
ls "some string with spaces"
输出类似于:
+ ls --color=auto 'some string with spaces'
bash
只是向您展示其解释和命令标记化的调试输出。