尧图精选

给Sonar-Scanner加装阿里的P3C编码规则

🕒 发布时间:2026/9/1 6:18:00 📁 来源:尧图网络
1. 下载插件以下是插件的 jar 包直链链接这个插件发布于 2023 年 9 月与 9.9 LTS 同期理论上兼容 9.9.8。但因为是社区第三方插件安装后务必查看容器日志确认无加载异常2. 安装插件到容器下载好 jar 包之后使用 docker 命令将它安装到自己的容器当中首先启动自己的 Docker Desktop把 jar 文件放在自己需要安装该插件的 sonar-scanner 项目路径下执行下列命令dockercpD:\B-WorkSpace\sonar-pmd-plugin-1.0.0.jarsonarqube:/opt/sonarqube/extensions/plugins/ docker restart sonarqube运行上述命令之后看返回是否有successfully copied。之后再运行docker logs sonarqube 21|Select-StringDeploy查看插件对应的部署日志当日志中出现Deploy PMD的时候就代表插件加载成功了。如果加载失败会在这附近出现Plugin is not compatible或ClassNotFoundException。3. 在控制台激活对应规则由于 SonarQube 默认是未激活状态接下来前往控制页面账号使用默认的admin找到「代码规则」搜索是否存在 p3c 规则。由于 SonarQube 的质量规则是默认的、只读配置所以要修改规则接入 p3c 之前还需要创建自己的自定义规则找到「质量配置」点击右上角的「创建」接下来选择语言为 Java继承 Sonar Way 的默认规则起名随意接下来点击「项目」将 product 项目添加进来。然后回到「代码规则」页面搜索 p3c点击「批量修改」选择「激活」接下来点击「应用到当前配置」当中。4. 针对容器的操作由于我们之前只是初步跑通了一遍容器要想容器能够持久地、稳定地跑在 Docker 环境中还需要在 Docker 当中添加对应的数据卷。4.1 停止容器保护数据不损坏docker stop sonarqube4.2 创建命名数据卷docker volume create sonarqube_data4.3 补建 extensions 卷logs 不持久化自动重建忽略docker volume create sonarqube_extensions本卷用于存储插件的 jar 包。4.4 从旧容器把数据拷到宿主机docker cp 能读已停止的容器先创建备份目录New-Item-ItemType Directory-Force-Path D:\B-WorkSpace\sonar-bak dockercpsonarqube:/opt/sonarqube/dataD:\B-WorkSpace\sonar-bak\datadockercpsonarqube:/opt/sonarqube/extensions D:\B-WorkSpace\sonar-bak\extensions4.5 删除旧容器dockerrmsonarqube4.6 用卷创建新容器docker create--name sonarqube-p 9000:9000 -v sonarqube_data:/opt/sonarqube/data-v sonarqube_extensions:/opt/sonarqube/extensions --restartunless-stopped sonarqube:lts-community参数含义/opt/sonarqube容器的安装目录/xxxx安装目录下的 xxx 目录--restartunless-stopped崩溃自动重启指令sonarqube:lts-community容器对应的镜像名称想要查找对应的镜像名称前往官网https://hub.docker.com/_/sonarqube这里是方便对照的表格标签含义lts-community长期支持版 社区版免费community最新社区版免费lts长期支持版 开发者版收费latest最新版本不推荐版本会变developer / enterprise商业版收费4.7 把数据拷入新容器dockercpD:\B-WorkSpace\sonar-bak\data\.sonarqube:/opt/sonarqube/data/dockercpD:\B-WorkSpace\sonar-bak\extensions\.sonarqube:/opt/sonarqube/extensions/这里推荐使用绝对路径防止出现找不到数据的问题4.8 重新启动如果启动后容器反复重启通常是数据卷的文件归属owner不对导致的。SonarQube 容器默认以1000:1000用户运行而新创建的数据卷默认归属 root权限不匹配就会触发崩溃重启。可以按下面的步骤修复# 1. 停止反复重启的容器docker stop sonarqube# 2. # 修复 data 卷以 root 身份运行docker run--rm--user 0-v sonarqube_data:/opt/sonarqube/data--entrypoint chown sonarqube:lts-community-R 1000:1000/opt/sonarqube/data# 3. 修复 extensions 卷以 root 身份运行docker run--rm--user 0-v sonarqube_extensions:/opt/sonarqube/extensions--entrypoint chown sonarqube:lts-community-R 1000:1000/opt/sonarqube/extensions# 4. 启动dockerstartsonarqube# 5. 看日志等 SonarQube is updocker logs-f sonarqube说明--entrypoint chown表示临时用chown作为容器入口-R 1000:1000递归地把卷内所有文件的归属改为 SonarQube 运行用户改完再正常启动即可。dockerstartsonarqube5. 验证数据卷是否生效之后如果出现问题可以先用下面的指令验证数据卷确实在工作。5.1 查看数据卷列表docker volumels应该看到sonarqube_data。5.2 查看容器挂载信息docker inspect sonarqube--format{{json .Mounts}}应该看到Typevolume, Sourcesonarqube_data的挂载点。部分含义docker inspectDocker 自带的查看容器/镜像详细元数据的命令输出 JSON 格式的完整配置信息sonarqube要查看的容器名也可以写容器 ID 的前几位比如docker inspect a1b2c3--format ...用 Go 模板语法只提取特定字段而不是把整个 JSON 堆给你类似 SQL 的SELECT 字段 FROM{{json .Mounts}}Go 模板语法Mounts是容器配置里的「挂载点数组」字段json是把该字段格式化成 JSON 输出
上一篇/下一篇内容由系统自动关联 返回资讯列表 →