【发布时间】: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 检查挂载的路径/目录是否存在?
附加信息:
- Jenkins shell 由用户 jenkins 执行
- 运行此代码时已安装分区
- 我已在 Jenkins 配置中将 Shell 可执行文件更改为 bash。值集是 /bin/bash
- jenkins 用户已添加到 visudo。 jenkins 的入口如下:
jenkins ALL=(ALL) NOPASSWD:ALL
5.挂载的分区文件系统为NTFS
更新:
- 如果我在终端中以 jenkins 用户身份运行 shell 脚本,我会得到与在构建控制台中看到的相同的输出
- 同样,在 jenkins 构建的执行 shell 部分中,如果我使用 sudo 运行
test,我会得到正确的结果。
sudo test -d "/media/muralidhar/DATA1/test/" && echo Exists || echo Does not exist
从外观上看,jenkins 用户没有读取文件夹及其内容的权限(即使文件夹有 777 权限)
- 现在我通过切换到系统用户来运行 jenkins shell 中的所有命令:
exec sudo -u systemuser /bin/bash - << 'EOF'
非常感谢任何替代解决方案。
【问题讨论】:
标签: bash shell jenkins jenkins-plugins