【问题标题】:jenkins shell: check for mounted path existence failsjenkins shell:检查安装路径是否存在失败
【发布时间】:2017-04-19 12:26:01
【问题描述】:

我正在尝试使用 jenkins 构建中的执行 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。 jenkins 的入口如下:

jenkins ALL=(ALL) NOPASSWD:ALL 5.挂载的分区文件系统为NTFS

更新:

  1. 如果我在终端中以 jenkins 用户身份运行 shell 脚本,我会得到与在构建控制台中看到的相同的输出
  2. 同样,在 jenkins 构建的执行 shell 部分中,如果我使用 sudo 运行 test,我会得到正确的结果。

sudo test -d "/media/muralidhar/DATA1/test/" && echo Exists || echo Does not exist

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

  1. 现在我通过切换到系统用户来运行 jenkins shell 中的所有命令:

exec sudo -u systemuser /bin/bash - << 'EOF'

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

【问题讨论】:

    标签: bash shell jenkins jenkins-plugins


    【解决方案1】:

    确保 Jenkins 用户对挂载目录具有读取权限。

    【讨论】:

    • 我要检查的文件夹和它的父文件夹都有 777 权限
    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2014-11-16
    • 2017-07-09
    • 2017-08-25
    • 2018-08-31
    • 2020-05-08
    相关资源
    最近更新 更多