使用JDK 11 Docker镜像运行SonarQube阶段遇执行停滞问题求助
解决Jenkins SonarQube阶段Docker代理下Shell进程无法启动的问题
问题定位
你的Jenkins Sonar阶段构建停滞,报错process apparently never started,核心原因是Docker代理配置的-itd参数与Jenkins持久化任务机制冲突:
-it会分配交互式终端,但Jenkins需要非交互式的前台进程连接;-d让容器后台运行,导致Jenkins无法捕获进程输出和状态,误以为进程未启动。
解决方案
1. 移除Docker args中的-itd参数
这是最直接的修复方式,修改后的代理配置如下:
stage('Sonar') { environment { SCANNER_HOME= tool 'sonarscanner' } agent { docker { label 'sonar' image "artifact.me.com/docker/jdk/jdk-11:latest" args "-v ${SCANNER_HOME}:/var/sonarScanner --privileged=true" } } steps { withSonarQubeEnv('SonarQube') { withVault([configuration: configuration, vaultSecrets: secrets]) { sh "/var/sonarScanner/bin/sonar-scanner -D ..." } } } }
2. 确保Sonar Scanner有执行权限
挂载的Sonar Scanner目录可能在容器内丢失可执行权限,可在执行扫描命令前添加权限修复:
sh "chmod +x /var/sonarScanner/bin/sonar-scanner && /var/sonarScanner/bin/sonar-scanner -D ..."
3. 指定容器工作目录匹配Jenkins Workspace
若容器默认工作目录与Jenkins workspace不一致,可能导致路径问题,可通过-w参数指定:
agent { docker { label 'sonar' image "artifact.me.com/docker/jdk/jdk-11:latest" args "-v ${SCANNER_HOME}:/var/sonarScanner --privileged=true -w ${WORKSPACE}" } }
4. 启用诊断日志排查深层问题
临时添加JVM参数到Jenkins启动配置,重启后可查看更详细的进程启动日志:
-Dorg.jenkinsci.plugins.durabletask.BourneShellScript.LAUNCH_DIAGNOSTICS=true
内容的提问来源于stack exchange,提问作者Elian
相关产品推荐
相关产品推荐

