Jenkins在bash shell脚本中添加单引号

时间:2015-06-12 12:18:39

标签: linux bash shell jenkins

我的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服务器上执行。创建了一份新工作,无论是自由式还是复制现有工作,但没有任何区别。

3 个答案:

答案 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只是向您展示其解释和命令标记化的调试输出。