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

相关文章
|
4月前
|
jenkins Java 持续交付
【项目集成工具】Jenkins
【项目集成工具】Jenkins
|
4月前
|
分布式计算 测试技术 Spark
通过Langchain实现大模型完成测试用例生成的代码(可集成到各种测试平台)
通过Langchain实现大模型完成测试用例生成的代码(可集成到各种测试平台)
666 0
|
4月前
|
SQL Java 流计算
Flink CDC在代码里面集成cdc的时候,是不是也要用上面这个胖包flink-sql-connector-mysql-cdc,不要去用瘦包flink-connector-mysql-cdc? com.ververica flink-sql-connector-mysql-cdc 2.4.0
Flink CDC在代码里面集成cdc的时候,是不是也要用上面这个胖包flink-sql-connector-mysql-cdc,不要去用瘦包flink-connector-mysql-cdc? com.ververica flink-sql-connector-mysql-cdc 2.4.0
51 1
|
1月前
|
jenkins Java 持续交付
Docker搭建持续集成平台Jenkins最简教程
Jenkins 是一个广泛使用的开源持续集成工具,它能够自动化构建、测试和部署软件项目。在本文中,我们将使用 Docker 搭建一个基于 Jenkins 的持续集成平台。
116 2
|
1月前
|
JavaScript Go 项目管理
云效常见问题之使用gitlab仓库将代码合并评审环节集成到云效如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
97 1
|
1月前
|
jenkins Java 持续交付
Docker Swarm总结+Jenkins安装配置与集成(5/5)
Docker Swarm总结+Jenkins安装配置与集成(5/5)
54 0
|
1月前
|
jenkins Java 持续交付
Docker Swarm总结+Jenkins安装配置与集成snarqube和目标服务器(4/5)
Docker Swarm总结+Jenkins安装配置与集成snarqube和目标服务器(4/5)
44 0
|
4月前
|
Oracle Java 关系型数据库
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
28 0
|
4月前
|
jenkins Java 持续交付
Jenkins使用入门笔记
Jenkins使用入门笔记
74 0