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,非常强的检测工具,还有很多功能待大家去完善

目录
相关文章
|
13天前
|
人工智能 自然语言处理 安全
代码静态扫描工具集成与实践
代码静态扫描工具(Static Application Security Testing, SAST)是在不运行代码的情况下,通过分析源代码或二进制代码来发现潜在安全漏洞、代码缺陷和质量问题的工具
118 4
|
27天前
|
机器学习/深度学习 编解码 计算机视觉
用于高效高光谱图像分类的多尺度上下文感知集成深度 KELM(Matlab代码实现)
用于高效高光谱图像分类的多尺度上下文感知集成深度 KELM(Matlab代码实现)
|
13天前
|
jenkins Shell 测试技术
|
22天前
|
编解码 算法 自动驾驶
【雷达通信】用于集成传感和通信的OFDM雷达传感算法(Matlab代码实现)
【雷达通信】用于集成传感和通信的OFDM雷达传感算法(Matlab代码实现)
261 125
|
2月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
|
3月前
|
安全 API 数据安全/隐私保护
低代码革命:API无代码集成如何让企业“3天上线一个生态”?
在数字化转型浪潮中,API成为释放数据价值、提升企业效率的核心。本文详解API架构设计、安全实践与跨平台集成,为CTO提供效率提升指南,涵盖微服务、安全认证、协议选择、低代码集成及未来趋势,助力企业构建敏捷、安全、高效的数字生态。
|
3月前
|
缓存 监控 安全
电商API集成入门:从零开始搭建高效接口
在数字化电商时代,API集成成为企业提升效率、实现系统互联的关键。本文从零开始,逐步讲解如何搭建高效、可靠的电商API接口,适合初学者学习。内容涵盖API基础、认证安全、请求处理、性能优化等核心步骤,并提供Python代码示例与数学公式辅助理解。通过实践,读者可掌握构建优质电商API的技巧,提升用户体验与系统性能。
134 0
|
7天前
|
机器学习/深度学习 数据采集 传感器
基于多尺度集成极限学习机回归(Matlab代码实现)
基于多尺度集成极限学习机回归(Matlab代码实现)
|
13天前
|
安全 jenkins Java
Java、Python、C++支持jenkins和SonarQube(一)
Jenkins 是一个开源的 持续集成(CI)和持续交付(CD) 工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
70 5
|
13天前
|
jenkins Java Shell
Java、Python、C++支持jenkins和SonarQube(全集)
Jenkins 是一个开源的持续集成(CI)和持续交付(CD)工具,用于自动化构建、测试和部署软件项目。它基于 Java 开发,支持跨平台运行,并拥有丰富的插件生态系统,可以灵活地扩展功能
111 1

推荐镜像

更多