jenkins持续集成从0入门到实战【八】集成sonarqube代码检测

简介: SonarQube是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检 测。

image.png

官网https://www.sonarqube.org/

安装Sonar

  1. 安装Docker环境

    # 安装docker,docker 要求操作系统必须为64位,且centos内核版本为3.1及以上
    $ uname -r
    3.10.0-1062.el7.x86_6
    
    # 保证yum包是最新,使用root执行,更新到最新
    $ yum update
    # 列出可安装的docker包
    $ yum list docker-ce --showduplicates | sort -r
    
        # 1.指定版本安装
        $ yum list docker-ce.x86_64  --showduplicates | sort -r
        # 2.安装最新版
        $ yum install docker-ce -y
        
    # 查看当前版本
    $ docker version
    # 不能连接到`Docker daemon`异常
      装完后使用docker命令后会提示异常
      Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
    
    # 需要重启下docker
    $ service docker restart
    # 配置开机启动
    $ systemctl enable docker
  2. 配置docker源,不配置下载较慢

    • 找到/etc/docker目录下的daemon.json文件进行编辑,输入如下内容

      {
      "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
      }
    • 如果没有该文件,可自行创建,也可以直接使用如下命令

      tee /etc/docker/daemon.json <<-'EOF'
      {
      "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
      }
      EOF
    • 重启docker
  3. 安装Postgres(SonarQube7.9以上版本已不再支持mysql)

    $ docker pull postgres
    # 根据镜像创建容器,并命名mypostgres
    $ docker run --name mypostgres -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 postgres
    # 进入容器
    $ docker exec -it mypostgres psql -U postgres -d postgres
    # 创建数据库,注意只需要执行语句create database sonar;
    postgres=# create database sonar;
    
    # 设置sonar用户名和密码 sonar postgres
    postgres=# create user sonar;
    postgres=# alter user sonar with password 'postgres';
    
    # 给sonar授权
    postgres=# alter role sonar createdb;
    postgres=# alter role sonar superuser;
    postgres=# alter role sonar createrole;
    
    # 更改sonar数据库拥有者(这一步是必须的,否则会sonarqube会连接失败)
    postgres=# alter database sonar owner to sonar;
    # 查看数据库
    postgres=# \l
    
    # 查看用户
    postgres=# \du
    exit
    
    # 重启数据库
    $ systemctl start postgresql-11
  4. 安装SonarQube

    • 点击下载sonar压缩包,下载Community版本

      # 请求root权限
      $ su -
      # 创建目录并下载sonar压缩包
      $ mkdir -p /opt/sonar
      $ cd /opt/sonar
      $ wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.9.0.43852.zip
  5. 解压sonar,并设置权限

    # 安装zip命令
    $ yum install unzip
    # 解压
    $ unzip sonarqube-8.9.0.43852.zip
    # 创建sonar用户,必须sonar用于启动,否则报错
    $ mv sonarqube-8.9.0.43852 sonarqube
    $ useradd sonar
    # 更改sonar目录及文件权限
    $ chown -R sonar. /opt/sonar
  6. 更改sonar配置文件

    $ su sonar
    $ vim /opt/sonar/sonarqube/conf/sonar.properties
    
    内容如下:
    sonar.jdbc.username=sonar
    sonar.jdbc.password=postgres
    
    sonar.jdbc.url=jdbc:postgresql://47.92.230.43:5432/sonar

    注意:sonar默认监听9000端口,如果9000端口被占用,需要更改。

  7. 下载JDK11

    链接: https://pan.baidu.com/s/1LbqYzeC0xO1My9hS8rTHtw
    提取码: 7hbw
    
    $ tar -zxvf jdk-11_linux-x64_bin.tar.gz
    $ cd jdk-11/bin
    $ pwd
    /opt/sonar/jdk-11/bin
    # 拿到上述jdk11的路径,配置到sonar中
    
    # 修改sonarqube/conf/wrapper.conf中的java配置
    vim /opt/sonar/sonarqube/conf/wrapper.conf
    将
    wrapper.java.command=java
    改为
    wrapper.java.command=/opt/sonar/jdk-11/bin/java
    
    # 修改环境变量,添加ES_HOME
    vim /etc/profile
    export ES_JAVA_HOME=/opt/sonar/jdk-11
    source /etc/profile
  8. 启动sonar

    $ cd /opt/sonar/sonarqube
    $ su sonar ./bin/linux-x86-64/sonar.sh start 启动
    $ su sonar ./bin/linux-x86-64/sonar.sh status 查看状态
    $ su sonar ./bin/linux-x86-64/sonar.sh stop 停止
    $ tail -f logs/sonar.logs 查看日志
    
    
    # 启动后报错
    warning: no-jdk distributions that do not bundle a JDK are deprecated and will be removed in a future release
    Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
    ERROR: [2] bootstrap checks failed. You must address the points described in the following [2] lines before starting Elasticsearch.
    bootstrap check failure [1] of [2]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
    bootstrap check failure [2] of [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    ERROR: Elasticsearch did not exit normally - check the logs at /opt/sonar/sonarqube/logs/sonarqube.log
    2021.05.17 16:33:07 WARN  app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 78
    2021.05.17 16:33:07 INFO  app[][o.s.a.SchedulerImpl] Process[es] is stopped
    2021.05.17 16:33:07 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped
    
    1. 编辑如下文件,加入如下内容
    $ vim /etc/security/limits.conf
    * soft nofile 65536
    * hard nofile 65536
    
    2. 编辑如下文件,加入如下内容
    vim /etc/sysctl.conf
    vm.max_map_count=655360
    
    3. 执行如下命令,并退出当前用户重新登录
    sysctl -p
    
    # 启动后继续报错 [es]: 143
    2021.05.17 16:47:16 INFO  app[][o.s.a.SchedulerImpl] Process[web] is stopped
    2021.05.17 16:47:16 WARN  app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 143
    2021.05.17 16:47:16 INFO  app[][o.s.a.SchedulerImpl] Process[es] is stopped
    2021.05.17 16:47:16 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped
    
    # 查看下web.log日志,发现9000端口被占用
    $ tail -222f /opt/sonar/sonarqube/logs/web.log
    # 查看端口占用程序
    $ netstat  -anp  |grep  9000
    tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      9343/php-fpm: maste
    
    # kill掉这该死的进程后再次启动
    $ kill -9 9343

    image.png

    image.png

  9. 浏览器访问

    访问器防火墙开放9000的端口,阿里云服务器则在安全组配置即可

    $ firewall-cmd --zone=public --add-port=9000/tcp --permanent
    $ firewall-cmd --reload

    启动过程有点漫长,机器差的5分钟后访问该地址:http://192.168.2.195:9000/

    image.png

  10. 创建sonar账号

    默认账户:admin/admin

    image.png

    这里我改成admin123,token要记下来后面要使用

  11. 汉化

    搜索插件Chinese Pack,安装后会提示重启服务!

    image.png
    image.png

  12. 获取token(后续会使用到)

    image.png

    f3a3e01c0eb286b110152a32f6766ddea4a66d72

jenkins集成sonar

  1. 安装SonarQube Scanner插件

    image.png

  2. 添加SonarQube凭证

    image.png

    image.png

  3. Jenkins进行SonarQube配置

    系统管理->系统配置->SonarQube servers

    image.png

    系统管理->全局工具配置->SonarQube Scanner

    image.png

  4. SonaQube关闭审查结果上传到SCM功能

    image.png

实现代码审查

  1. 在项目添加SonaQube代码审查配置文件

    • 在Java代码中src/main/resources目录下新增sonar-project.properties文件
      image.png
    • sonar-project.properties内容如下

      # must be unique in a given SonarQube instance
      sonar.projectKey=it235-sonar
      sonar.projectName=it235-sonar
      sonar.projectVersion=1.0
      
      # modules
      #sonar.modules=order,goods
      
      sonar.sources=src/main/java
      sonar.tests=src/test/java
      sonar.version=1.0
      sonar.language=java
      
      sonar.java.binaries=target/classes
      sonar.exclusions=**/test/**,**/target/**
      
      sonar.java.source=1.8
      sonar.java.target=1.8
      sonar.sourceEncoding=UTF-8
    • 在jenkins的job中配置sonar执行器

      image.png

      配置好后,推送到远程仓库,构建打包,查看控制台日志是否有如下输出
      image.png

  2. 到SonarQube的UI界面查看审查结果

    image.png

    目前没有发现异常信息和Bug

  3. 改造代码,让其充满Bug后再次构建查看sonar报告

    image.png

    再次构建后查看sonar报告结果

    image.png

    image.png

总结

到这里,我们把sonarqube给集成到了jenkins,非常强的检测工具,还有很多功能待大家去完善

目录
相关文章
|
9天前
|
人工智能 自然语言处理 API
快速集成GPT-4o:下一代多模态AI实战指南
快速集成GPT-4o:下一代多模态AI实战指南
188 101
|
4月前
|
缓存 监控 安全
通义大模型与现有企业系统集成实战《CRM案例分析与安全最佳实践》
本文档详细介绍了基于通义大模型的CRM系统集成架构设计与优化实践。涵盖混合部署架构演进(新增向量缓存、双通道同步)、性能基准测试对比、客户意图分析模块、商机预测系统等核心功能实现。同时,深入探讨了安全防护体系、三级缓存架构、请求批处理优化及故障处理机制,并展示了实时客户画像生成和动态提示词工程。通过实施,显著提升客服响应速度(425%)、商机识别准确率(37%)及客户满意度(15%)。最后,规划了技术演进路线图,从单点集成迈向自主优化阶段,推动业务效率与价值持续增长。
154 7
|
13天前
|
安全 JavaScript 前端开发
安全漏洞检测集成及实践:SAST/DAST工具集成指南
通过合理集成和配置SAST/DAST工具,可以显著提升应用程序的安全性,并在开发早期发现和修复漏洞,降低安全风险和维护成本
72 4
|
2月前
|
人工智能 自然语言处理 分布式计算
AI 驱动传统 Java 应用集成的关键技术与实战应用指南
本文探讨了如何将AI技术与传统Java应用集成,助力企业实现数字化转型。内容涵盖DJL、Deeplearning4j等主流AI框架选择,技术融合方案,模型部署策略,以及智能客服、财务审核、设备诊断等实战应用案例,全面解析Java系统如何通过AI实现智能化升级与效率提升。
205 0
|
5月前
|
人工智能 安全 Shell
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
328 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
5月前
|
JSON JavaScript API
MCP 实战:用配置与真实代码玩转 GitHub 集成
MCP 实战:用配置与真实代码玩转 GitHub 集成
1212 4
|
12月前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
11月前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
319 0
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
964 6
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
854 4

推荐镜像

更多