Jenkins在LXC容器执行Shell命令时遇权限拒绝问题求助
问题场景
在Jenkinsfile中执行以下脚本块:
String runTest = """ #!/bin/bash if [ ${EXTRA_ENV} != "none" ]; then echo "source extra environment file" source ${WORKSPACE}/${upgradeEnvFile} //该脚本会创建tmp.txt文件 fi cat tmp.txt """ rc = sh(script: runTest, returnStatus: true)
出现报错:
Cannot contact KVM-66: java.io.FileNotFoundException: /home/coolboy/workspace/DemoJob@tmp/durable-451e7be4/jenkins-log.txt (Permission denied)
登录KVM节点执行ls命令查看权限:
total 84 drwxrwxr-x 3 coolboy coolboy 4096 Nov 15 16:37 .. -rw-rw-r-- 1 coolboy coolboy 652 Nov 15 16:37 script.sh -rwx------ 1 root coolboy 65849 Nov 15 16:37 jenkins-log.txt -rw-rw-r-- 1 coolboy coolboy 2 Nov 15 16:37 jenkins-result.txt drwxrwxr-x 2 coolboy coolboy 4096 Nov 15 16:37 .
可见jenkins-log.txt的所有者被改为root,但tmp.txt已成功创建。
已尝试无效方案
- 参考过Jenkins pipeline权限相关的问题解决方案,均未解决问题
环境信息
初始环境
- Jenkins版本:2.249.2
- KVM节点操作系统:Ubuntu20.04
- Durable task插件版本:1.35
升级后环境(问题仍存在)
- Jenkins版本:2.375.3
- Durable task插件版本:510.v324450f8dca_4
备注:相同任务配置在Ubuntu18.04节点上可正常运行
解决思路建议
- 排查
source ${WORKSPACE}/${upgradeEnvFile}脚本内容:该脚本可能存在sudo、su root等提权操作,导致后续日志文件以root身份生成。检查脚本内的权限切换逻辑,尽量避免在该脚本中使用root权限,或操作完成后切换回原用户。 - 调整Durable task日志权限策略:修改Jenkins节点的
umask值,确保生成的日志文件能被Jenkins执行用户(coolboy)访问;或在插件配置中调整日志文件的默认权限。 - 拆分权限操作:将需要root权限的操作单独拆分到
sh步骤,明确使用sudo执行,避免权限混合影响主流程日志:// 单独执行提权操作 sh(script: "sudo source ${WORKSPACE}/${upgradeEnvFile}", returnStatus: true) // 普通用户执行后续操作 sh(script: "cat tmp.txt", returnStatus: true) - 对比Ubuntu版本权限差异:检查Ubuntu20.04与18.04在
sudoers配置、PAM策略、默认umask值上的差异,修复因系统配置变化导致的权限问题。 - 调整工作目录权限:确保Jenkins执行用户对
/home/coolboy/workspace/DemoJob@tmp/目录及子文件拥有读写权限,可尝试将目录权限设置为775,避免目录权限异常导致日志文件创建失败。
内容的提问来源于stack exchange,提问作者himneh
相关产品推荐
相关产品推荐

