zoukankan      html  css  js  c++  java
  • Jenkins SonarQube 部署

    SonarQube 与 Jenkins 简介

    SonarQub e 是一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题。同时,它提供了丰富的插件,支持多种语言的检测, 如 J ava、Python、Groovy、C、C++等几十种编程语言的检测。它主要的核心价值体现在如下几个方面:

    SonarQube7.8 以上必须使用 java11, 不支持mysql

    1. 检查代码是否遵循编程标准:如命名规范,编写的规范等。
    2. 检查设计存在的潜在缺陷:SonarQube 通过插件 Findbugs、Checkstyle 等工具检测代码存在的缺陷。
    3. 检测代码的重复代码量:SonarQube 可 以展示项目中存在大量复制粘贴的代码。
    4. 检测代码中注释的程度:源码注释过多或者太少都不好,影响程序的可读可理解性。
    5. 检测代码中包、类之间的关系:分析类之间的关系是否合理,复杂度情况。

    SonarQube 平台是由 4 个部分组成:

    1. SonarQube Server
    2. SonarQube Database
    3. SonarQube Plugins
    4. SonarQube Scanner

    SonarQube 与 SonarQube-Scanner 的安装与配置

    SonarQube

    在 SonarQube 网,我们可以下载最新的 Sonar 安装包,本节以 Linux 系统为例,搭建 SonarQube 平台,解压到任意目录,如:unzip sonarqube5.6.zip。

    SonarQube 自带了一个 H2 的数据库,当然为了获得更好的性能我们可以指定一个外部的数据库,在这里我们使用 MySQL 数据库。 先在 Mysql 数据库中建立一 个 Sonar 数据库,主要用于存放分析结果的数据,如 图 1 :

    下载:

    https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip

     创建sonar  MySQL 数据库

    create database sonar 
    grant all PRIVILEGES on sonar.* to sonar@'%' identified by '123456';
    flush privileges;

    进入解压的 SonarQueb 目录,在系统路径里面配好 path,配置如下:

    #sonar profile
    export      SONAR_HOME=/data/sonarqube-7.8
    export      PATH=${SONAR_HOME}/bin:${PATH}

    创建用户:

    groupadd sonar
    useradd -g sonar -s /sbin/nologin sonar
    # 设置权限
    chown sonar:sonar -R /data/sonarqube-7.8

    修改配置文件 /data/sonarqube-7.8/conf/sonar.properties,如下:

    主要修改3个参数

    sonar.jdbc.username
    sonar.jdbc.password
    sonar.jdbc.url

    ...
    # User credentials.
    # Permissions to create tables, indices and triggers must be granted to JDBC user.
    # The schema must be created first.
    #sonar.jdbc.username=
    #sonar.jdbc.password=
    sonar.jdbc.username=sonar
    sonar.jdbc.password=123456
    #----- Embedded Database (default)
    # H2 embedded database server listening port, defaults to 9092
    #sonar.embeddedDatabase.port=9092
    #----- DEPRECATED
    #----- MySQL >=5.6 && <8.0
    # Support of MySQL is dropped in Data Center Editions and deprecated in all other editions
    # Only InnoDB storage engine is supported (not myISAM).
    # Only the bundled driver is supported. It can not be changed.
    #sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
    sonar.jdbc.url=jdbc:mysql://172.16.230.84:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
    ...

    启动:

    # 切换到sonar用户
    # su -s /bin/bash - sonar
    $ cd /data/sonarqube-7.8/bin/linux-x86-64
    $ ./sonar.sh console

    其中有输出一个报错

    system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

    解决办法

     1. 修改sonar配置 /data/sonarqube-7,8/conf/sonar.properties

    # Same as previous property, but allows to not repeat all other settings like -Xmx
    #sonar.search.javaAdditionalOpts=
    sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false  

    2.修改 /data/sonarqube-7.8/conf/wrapper.conf

    #********************************************************************
    # Wrapper Java
    #********************************************************************
    wrapper.java.additional.1=-Dsonar.wrapped=true -Dbootstrap.system_call_filter=false
    wrapper.java.additional.2=-Djava.awt.headless=true

    3. 修改 /data/sonarqube-7.8/elasticsearch/config/elasticsearch.yml

    # ----------------------------------- Memory -----------------------------------
    #
    # Lock the memory on startup:
    #
    bootstrap.memory_lock: false
    bootstrap.system_call_filter: false

    再次启动

    $ cd /data/sonarqube-7.8/bin/linux-x86-64
    $ ./sonar.sh console

    如果没有问题的话,关闭console方式启动,使用Ctrl+c
    使用后台启动

    $ cd /data/sonarqube--7.8/bin/linux-x86-64
    $ ./sonar.sh start

    点击登录

     

     目前只要默认是8.4.1的中文插件, 需要到github 找对应的版本 

    # 拷贝到插件目录
    cp sonar-l10n-zh-plugin-1.28.jar /data/sonarqube-7.8/extensions/plugins
    #重启sonar
    ./sonar.sh restart

    Jenkins 与 SonarQube 集成插件的安装与配置

    Jenkins 是一个支持自动化框架的服务器,我们这里不做详细介绍。Jenkins 提供了相关的插件,使得 SonarQube 可以很容易地集成。登陆 jenkins,点击”系统管理”,如图 4。

    图 4. Jenkins 系统管理

    Jenkins 系统管理

    点击管理插件。

    Jenkins 管理插件

    Jenkins 管理插件

    在可选插件中搜索”SonarQube”并安装它,如图 5。

    图 5. Jenkins 安装 SonarQube 

    插件配置,登录 sonarqube 服务器

    http://172.16.230.84:9000   点击右侧账号图标-->我的账号-->安全

    输入 jenkins,点击生成。

     

     注意:这个输入框的字符串,可以随意。这里表示给jenkins使用的!切记要保存好!

     

    创建jenkins token

    点击 jenkins -->凭据 --> 系统 --> 全局凭据--> 添加凭据

    输入在sonarqube中生成的token

    配置 SonarQube Server

    进入 Jenkins 系统管理 – 系统设置,配置 SonarQube Server 信息

    由于 SonarQube 在本机运行,直接就是 http://localhost:9000

     进入 Jenkins 系统管理 - Global Tool Configuration,配置 SonarQube Scanner

    1. 下载安装

    wget   https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.4.0.2170.zip
    
    unzip  sonar-scanner-cli-4.4.0.2170.zip
    
    mv  sonar-scanner-cli-4.4.0.2170   /data/

    输入安装路径

    四、项目配置

    java

    使用构建后步骤进行代码分析需要使用 Maven 对代码进行编译,所以需要有 Maven 的配置文件,例如 pom.xml。

    为新建的 Jenkins 项目配置构建后操作步骤,在构建后步骤配置窗口中需要填入 Maven 的构建配置 xml 文件

    配置构建后操作步骤

    复制代码
    sonar.projectKey=$JOB_NAME
    sonar.projectName=$JOB_NAME
    sonar.language=java
    sonar.login=admin
    sonar.password=admin
    sonar.java.binaries=$WORKSPACE/smr-platform-service/smr-biz/target/classes
    复制代码

     注意:sonar.java.binaries 表示java的源码路径

    参数解释:

    Task to run 输入框中输入 scan,即分析代码;

    Path to project properties:可选择的输入框,可以指定一个 sonar-project.properties 文件,如果不指定则使用项目默认的 properties 文件;

    Analysis properties:输入一些配置参数传递给 SonarQube,这里的参数优先级高于 sonar-project.properties 文件里面的参数,所以可以在这里来配置所有的参数以替代 sonar-project.properties 文件

    注:SonarQube Scanner配置可以直接在项目根目录中创建一个文件sonar-project.properties,然后使用Path to project properties中指定属性文件,或者直接在Analysis Properties中配置

    Additional arguments:可以输入一些附加的参数,示例中的-X指进入 SonarQube Scanner 的 Debug 模式,输出更多的日志信息

    查看分析结果

    登录到SonarQube,查看结果

    python

    sonar.projectKey=$JOB_NAME
    sonar.projectName=$JOB_NAME
    sonar.language=python
    sonar.login=admin
    sonar.password=admin

    vue

    复制代码
    #projectKey项目的唯一标识,不能重复
    sonar.projectKey=$JOB_NAME
    sonar.projectName=$JOB_NAME
    sonar.projectVersion=1.0
    sonar.sourceEncoding=UTF-8
    sonar.modules=javascript-module
    sonar.login=admin
    sonar.password=admin
    
    # JavaScript module
    javascript-module.sonar.projectName=JavaScript Module
    javascript-module.sonar.language=js
    javascript-module.sonar.sources=.
    javascript-module.sonar.projectBaseDir=src
    复制代码

     报错处理办法: /data/sonarqube-7.8/temp/ 权限问题, chown -R  sonar.sonar   /data/sonarqube-7.8/temp/ *

    参考资源 

    https://www.ibm.com/developerworks/cn/devops/1612_qusm_jenkins/index.html

    https://www.cnblogs.com/xiao987334176/p/12011623.html

  • 相关阅读:
    异常总结
    反射
    面试题
    继承多态接口
    JAVA面向对象变成学习!
    学生管理系统---三层架构
    Secondary NameNode
    Hadoop之HDFS
    大数据相关概念二
    大数据相关概念
  • 原文地址:https://www.cnblogs.com/fengjian2016/p/13343364.html
Copyright © 2011-2022 走看看