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

目录
相关文章
|
11天前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
34 3
|
11天前
|
jenkins Java 持续交付
【一键搞定!】Jenkins 自动发布 Java 代码的神奇之旅 —— 从零到英雄的持续集成/部署实战秘籍!
【8月更文挑战第9天】随着软件开发自动化的发展,持续集成(CI)与持续部署(CD)已成为现代流程的核心。Jenkins 作为一款灵活且功能丰富的开源 CI/CD 工具,在业界应用广泛。以一家电商公司的 Java 后端服务为例,通过搭建 Jenkins 自动化发布流程,包括创建 Jenkins 项目、配置 Git 仓库、设置构建触发器以及编写构建脚本等步骤,可以实现代码的快速可靠部署。
34 2
|
6天前
|
jenkins 持续交付 开发工具
自动化开发之旅:Docker携手Jenkins,与Git和Tomcat共舞持续集成
【8月更文挑战第13天】在软件开发中,持续集成(CI)通过自动化构建、测试与部署提升效率与稳定性。Docker、Jenkins、Git和Tomcat构成CI的黄金组合:`git push`触发Jenkins作业,利用Docker确保环境一致性,最终将应用部署至Tomcat。首先配置Git Webhooks以触发Jenkins;接着在Jenkins中创建作业并使用Docker插件模拟真实环境;通过Maven构建项目;最后部署至Tomcat。这套流程减少人为错误,提高开发效率,展示了技术的力量与流程的革新。
17 0
|
27天前
|
开发者 Windows
三类代码协同模式问题之判断项目的协同规模决定采用集成分支问题如何解决
三类代码协同模式问题之判断项目的协同规模决定采用集成分支问题如何解决
|
1月前
|
安全 容灾 jenkins
Java面试题:什么是Jenkins以及它在持续集成中的作用?Jenkins有哪些缺点呢?
Java面试题:什么是Jenkins以及它在持续集成中的作用?Jenkins有哪些缺点呢?
34 0
|
23天前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
122 6
|
1月前
|
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. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
144 4
|
1月前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
113 1
|
2月前
|
消息中间件 Java Kafka
springboot集成kafka
springboot集成kafka
94 2
|
1月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成

热门文章

最新文章