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

目录
相关文章
|
17天前
|
分布式计算 大数据 Apache
ClickHouse与大数据生态集成:Spark & Flink 实战
【10月更文挑战第26天】在当今这个数据爆炸的时代,能够高效地处理和分析海量数据成为了企业和组织提升竞争力的关键。作为一款高性能的列式数据库系统,ClickHouse 在大数据分析领域展现出了卓越的能力。然而,为了充分利用ClickHouse的优势,将其与现有的大数据处理框架(如Apache Spark和Apache Flink)进行集成变得尤为重要。本文将从我个人的角度出发,探讨如何通过这些技术的结合,实现对大规模数据的实时处理和分析。
52 2
ClickHouse与大数据生态集成:Spark & Flink 实战
|
6天前
|
监控 安全 测试技术
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性?
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性?
|
10天前
|
jenkins Java 持续交付
Gitee+Jenkins+SonarQube代码上线的实战操作
通过以上步骤,就可以实现基于Gitee、Jenkins和SonarQube的代码上线流程,确保代码的质量和上线过程的自动化和可控性。在实际操作中,可以根据项目的具体需求和环境进行适当的调整和优化。
|
15天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
48 3
|
1月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
【10月更文挑战第8天】本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
34 5
|
1月前
|
jenkins 持续交付 开发工具
【10月更文挑战第1天】通过jenkins选择tag完成代码上线
【10月更文挑战第1天】通过jenkins选择tag完成代码上线
|
1月前
|
jenkins Shell 持续交付
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
Jenkins持续集成GitLab项目 GitLab提交分支后触发Jenkis任务 持续集成 CI/CD 超级详细 超多图(二)
67 0
|
1月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
128 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
1月前
|
Dart Android开发
鸿蒙Flutter实战:03-鸿蒙Flutter开发中集成Webview
本文介绍了在OpenHarmony平台上集成WebView的两种方法:一是使用第三方库`flutter_inappwebview`,通过配置pubspec.lock文件实现;二是编写原生ArkTS代码,自定义PlatformView,涉及创建入口能力、注册视图工厂、处理方法调用及页面构建等步骤。
48 0
|
2月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
55 2
zabbix agent集成percona监控MySQL的插件实战案例