You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置非流水线Maven Jenkins Job在Sonar质量门不达标时失败/告警

嗨,我来帮你搞定这个非流水线Jenkins Maven Job的Sonar质量门校验问题!针对你用的Jenkins 2.176.3版本,这里有两个靠谱的方案,能让Job在质量门不达标时直接失败或者进入告警状态:

方案一:用SonarQube Scanner插件的Post-build校验(推荐)

这个方法最省心,插件已经帮我们封装了所有逻辑,不用自己写脚本:

  • 首先确认你的Jenkins已经安装了SonarQube Scanner插件(注意插件版本要和你的SonarQube服务器兼容,Jenkins 2.176.3别装太新的插件版本,避免兼容性问题)
  • 配置步骤:
    1. 打开你的非流水线Maven Job的配置页面
    2. 往下滑到Post-build Actions区域,点击「Add post-build action」,选择「SonarQube quality gate check」
    3. 选中你之前在Jenkins全局配置里设置好的SonarQube服务器(如果还没配置,先去Jenkins首页的「Manage Jenkins」→「Configure System」里添加,填好Sonar服务器URL和权限令牌)
    4. 如果你想让Job在质量门失败时直接标记为失败,就勾选「Abort the build if the quality gate is failed」;要是只想告警(比如标记为不稳定的黄色状态),就勾选「Mark the build as unstable if the quality gate is failed」
    5. 保存配置,重新跑一次Job试试就行
方案二:用脚本调用SonarQube API手动校验

如果插件的方式不适用(比如插件版本兼容问题),可以用脚本自己调用Sonar的API来判断质量门状态:

  • 配置步骤:
    1. 在Job的「Build」区域,在mvn sonar:sonar这条命令之后,添加一个「Execute shell」(Linux)或者「Execute Windows batch command」(Windows)步骤
    2. 给你个Linux shell的示例脚本(需要Jenkins服务器上装jq工具来解析JSON):
      # 从mvn命令的输出里提取Sonar分析任务ID
      TASK_ID=$(mvn sonar:sonar | grep -o 'ceTaskId=\w*' | cut -d'=' -f2)
      # 轮询Sonar API,等分析任务完成
      while true; do
        # 用Sonar令牌访问API,获取任务状态
        STATUS=$(curl -s -u ${SONAR_TOKEN}: "http://你的Sonar服务器地址/api/ce/task?id=${TASK_ID}" | jq -r '.task.status')
        if [ "${STATUS}" == "SUCCESS" ]; then
          break
        elif [ "${STATUS}" == "FAILED" ]; then
          echo "Sonar代码分析任务失败了!"
          exit 1
        fi
        sleep 5 # 每5秒查一次
      done
      # 查询项目的质量门状态
      QUALITY_GATE_STATUS=$(curl -s -u ${SONAR_TOKEN}: "http://你的Sonar服务器地址/api/qualitygates/project_status?projectKey=你的项目Key" | jq -r '.projectStatus.status')
      if [ "${QUALITY_GATE_STATUS}" == "ERROR" ]; then
        echo "质量门未达标!"
        exit 1 # 让Job直接失败
        # 如果只想告警,把exit 1改成echo "质量门告警!",然后可以用Jenkins命令标记为不稳定:echo "##junit[buildStatus status='UNSTABLE' text='质量门未达标']"
      fi
      
    3. 注意:要在Job的「环境变量」里配置SONAR_TOKEN(SonarQube生成的权限令牌)和你的项目Key,确保Jenkins服务器能访问到SonarQube服务器
    4. Windows环境的话,可以用PowerShell脚本实现类似逻辑,用Invoke-RestMethod来调用API

小提示:优先用方案一,毕竟插件已经做了完善的错误处理和轮询逻辑,比自己写脚本靠谱多啦。记得测试的时候先故意让代码不达标,看看Job会不会按预期变成失败或不稳定状态。

内容的提问来源于stack exchange,提问作者mn3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:43:13