Jenkins Pipeline执行:sonarqube任务失败,无法创建Sonar缓存临时文件
解决Jenkins Pipeline中Gradle :sonarqube任务的NoSuchFileException问题
问题分析
执行:sonarqube任务时触发org.gradle.api.tasks.TaskExecutionException,根源是java.nio.file.NoSuchFileException——无法在~/.sonar/cache/_tmp创建临时文件,核心原因通常是目录缺失、权限不足或路径解析异常。
解决方案
1. 修复缓存目录权限与存在性
Jenkins执行任务的用户(一般为jenkins)可能无目标目录的读写权限,甚至目录本身不存在:
- Linux/macOS环境执行以下命令:
mkdir -p ~/.sonar/cache/_tmp chown -R jenkins:jenkins ~/.sonar chmod -R 755 ~/.sonar/cache/_tmp - Windows环境:在Jenkins服务运行的用户上下文里手动创建
C:\Users\[Jenkins用户]\.sonar\cache\_tmp目录,或通过文件管理器给该目录添加读写权限。
2. 显式指定Sonar临时目录
绕开默认的用户家目录路径,将临时文件指定到Jenkins可完全控制的工作空间内:
- 在
build.gradle中添加配置:sonarqube { properties { property "sonar.temp.directory", "${project.buildDir}/sonar-tmp" } } - 或在Jenkins Pipeline的Gradle命令中传入参数:
gradle :sonarqube -Dsonar.temp.directory=${WORKSPACE}/sonar-tmp
3. 清理损坏的Sonar缓存
旧缓存可能存在路径异常或损坏,直接清理后让任务重新初始化目录:
rm -rf ~/.sonar/cache
重新执行:sonarqube任务,Sonar会自动重建完整的缓存目录结构。
4. 验证Jenkins代理的用户上下文
如果使用Jenkins Slave节点,需确认Slave上执行任务的用户拥有目录权限,且家目录环境变量正常:
在Pipeline中添加验证步骤:
sh 'echo $HOME' sh 'whoami'
检查输出的用户家目录是否正确,且对应用户有该目录的读写权限。
内容的提问来源于stack exchange,提问作者cojocariv
相关产品推荐
相关产品推荐

