jenkins shell:检查挂载路径是否存在失败

时间:2017-04-19 12:26:01

标签: bash shell jenkins jenkins-plugins

我正在尝试使用jenkins build中的execute shell来检查挂载分区中的文件夹是否存在。

if [ ! -d "/media/muralidhar/DATA1/test" ]; then
 echo "$destination_directory does not exists"
fi

if [ -d "/var/www/html/" ]; then
 echo "$source_directory exists"
fi

构建的输出如下:

[shell_test] $ /bin/bash -xe /tmp/hudson8078612261658226967.sh
+ '[' '!' -d /media/muralidhar/DATA1/test/ ']'
+ echo 'folder /media/muralidhar/DATA1/test/ does not exists'
folder /media/muralidhar/DATA1/test/ does not exists
+ '[' -d /var/www/html/ ']'
+ echo 'folder /var/www/html/ exists'
folder /var/www/html/ exists
Finished: SUCCESS

虽然相同的代码在终端中有效,但jenkins shell表示该目录不存在。有趣的是,目录列表(ls)似乎适用于jenkins shell中的同一目录(仅限sudo)。

如何使用jenkins shell检查挂载的路径/目录是否存在?

其他信息:

  1. Jenkins shell由用户jenkins执行
  2. 运行此代码时挂载了分区
  3. 我在Jenkins配置中将Shell可执行文件更改为bash。值集是/ bin / bash
  4. jenkins用户被添加到visudo。詹金斯的条目如下:
  5. jenkins ALL=(ALL) NOPASSWD:ALL 5.挂载的分区文件系统是NTFS

    更新

    1. 如果我在终端中以jenkins用户身份运行shell脚本,我会得到与构建控制台中看到的相同的输出
    2. 同样,在jenkins构建的执行shell部分中,如果我使用sudo运行test,我会得到正确的结果。
    3. sudo test -d "/media/muralidhar/DATA1/test/" && echo Exists || echo Does not exist

      从外观上看,jenkins用户无权读取文件夹及其内容(即使该文件夹具有777权限)

      1. 现在我通过切换到系统用户运行jenkins shell中的所有命令:
      2. exec sudo -u systemuser /bin/bash - << 'EOF'

        非常感谢任何替代解决方案。

1 个答案:

答案 0 :(得分:0)

确保Jenkins用户对已安装目录具有读取权限。