• Jenkins之四-----基于Jenkins代码扫描及SonarQube使用


    实战一:安装部署Sonarqube和使用

    Sonarqube介绍

    官网下载地址:https://www.sonarqube.org/downloads/

    SonarQube是一个用于代码质量管理的开放平台,通过插件机制,SonarQube可以集成不同的测试工具,代码分析工具,以及持续集成工具,例如Hudson/Jenkins等。

    sonarqube的七个维度检测代码质量:

    • 复杂度分布:代码复杂度过高将难以理解
    • 重复代码:程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方
    • 单元测试统计:统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
    • 代码规则检查:检查代码是否符合规 范
    • 注释率:若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
    • 潜在的 Bug :检测潜在的 bug
    • 结构与设计:找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度

    1、安装部署sonarqube

    sonar依赖于java环境,而且java版本必须是1.8版本或更高,否则sonar启动失败,6.7. X版本的sonar需要调用elasticsearch而且默认需要使用普通用户。

    7.9.x版本不再支持MySQL:https://docs.sonarqube.org/latest/setup/upgrade-notes/

    1、在官网上下载sonarrqube包,并将sonarqube的server安装包传到指定的/usr/local/src目录下

    [root@jenkins-slave src]# ls
    sonarqube-6.7.7.zip
    [root@jenkins-slave src]# unzip sonarqube-6.7.7.zip  # 将sonarqube-server包进行解压
    [root@jenkins-slave src]# ln -sv /usr/local/src/sonarqube-6.7.7 /usr/local/sonarqube # 最sonarqube server创建一个软链接
    [root@jenkins-slave ~]# useradd -s /bin/bash sonarqube  # 创建一个sonarqube用户
    [root@jenkins-slave yum.repos.d]# chown sonarqube.sonarqube /usr/local/src/sonarqube-6.7.7 /usr/local/sonarqube -R  #将两个目录文件的权限都改为sonarqube用户属组和属主

    2、修改系统和内核参数

    [root@jenkins-slave src]# vim /etc/sysctl.conf  # 修改系统内核参数
    vm.max_map_count = 262144
    fs.file-max = 65536
    
    [root@jenkins-slave src]# sysctl -p  # 将内核参数生效
    
    [root@jenkins-slave src]# vim /etc/security/limits.conf  # 修改限制文件链接大小
    sonarqube - nofile 65536
    sonarqube - nproc  2048
    
    [root@jenkins-slave src]# useradd -s /bin/bash sonarqube # 创建一个sonarqube用户
    [root@jenkins-slave src]# reboot  # 重启系统,使配置的参数生效
    

    3、重启linux系统之后,然后切换至sonarqube用户查看参数是否生效

    [sonarqube@jenkins-slave ~]$ ulimit -n
    65536
    
    [sonarqube@jenkins-slave ~]$ sysctl -a | grep fs.file-max
    fs.file-max = 65536
    
    [sonarqube@jenkins-slave ~]$ sysctl -a | grep vm.max_map_count
    vm.max_map_count = 262144
    

    2、安装并配置mysql-server-5.6版本数据库

    数据库要使用5.6版本,不支持5.5的版本

    参考文档:https://docs.sonarqube.org/6.7/Requirements.html

    配置mysql-server-5.6版本数据库仓库文档:https://dev.mysql.com/doc/refman/5.6/en/linux-installation-yum-repo.html

    1、配置mysql-5.6版本的仓库

    # cat  /etc/yum.repos.d/mysql.repo
    [mysql56-community]
    name=MySQL 5.6 Community Server
    baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

    2、安装mysql-server数据库,创建数据库,并对数据库授权

    [root@jenkins-slave ~]# yum install mysql-server  -y  #安装数据库
    [root@jenkins-slave ~]# systemctl start mysqld # 启动mysql数据库
    [root@jenkins-slave yum.repos.d]# mysql  # 对数据库授权
    Welcome to the MariaDB monitor. Commands end with ; or g.
    Your MariaDB connection id is 8
    Server version: 10.3.10-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> create database sonar default character set utf8 collate utf8_general_ci; # 创建sonar数据库
    Query OK, 1 row affected (0.001 sec)
    
    MariaDB [(none)]> grant all privileges on sonar.* to 'sonar'@'192.168.7.%' identified by '123456';  #对sonar数据库授权
    Query OK, 0 rows affected (0.001 sec)
    

    3、在另一台主机上安装mysql客户端,进行测试mariadb数据库是否可以连接

    [root@jenkins ~]# mysql -p123456 -usonar -h192.168.7.103  # 远程连接数据库
    Welcome to the MariaDB monitor.  Commands end with ; or g.
    Your MariaDB connection id is 9
    Server version: 10.3.10-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    MariaDB [(none)]> show databases;  #查看此时的数据库信息,里边有mariadb数据库新建的sonar数据库
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | sonar              |
    +--------------------+
    2 rows in set (0.001 sec)
    

    3、安装JDK包

     官方下载JDK地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

    JAVA依赖的环境:JDK-8版本就可以了。

    1、下载JDK包,使用8版本的即可,并将下载的包解压,创建软链接

    [root@tomcat-web1 src]# tar xvf jdk-8u212-linux-x64.tar.gz 
    [root@tomcat-web1 src]# ln -sv /usr/local/src/jdk1.8.0_212/   /usr/local/jdk
    ‘/usr/local/jdk’ -> ‘/usr/local/src/jdk1.8.0_212/’
    

    2、设置JDK环境变量,并生效

    [root@tomcat-web1 src]# vim /etc/profile # 配置环境变量
    export HISTTIMEFORMAT="%F %T `whoami`"
    export export LANG="en_US.utf-8"
    export JAVA_HOME=/usr/local/jdk
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export PATH=$PATH:$JAVA_HOME/bin
    
    [root@tomcat-web1 src]# . /etc/profile # 生效环境变量
    

    3、对JDK的可执行程序创建软链接

    [root@tomcat-web1 src]# ln -sv /usr/local/jdk/bin/java  /usr/bin/
    ‘/usr/bin/java’ -> ‘/usr/local/jdk/bin/java’

    4、查看此时解压后的JDK版本

    [root@tomcat-web1 src]# java -version
    java version "1.8.0_212"
    Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
    Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)

    4、修改sonarqube配置文件

    1、从root管理员账号切换至sonarqube账号,修改sonarqube的配置文件。

    [root@jenkins-slave ~]# su - sonarqube  # 切换到sonarqube用户
    [sonarqube@jenkins-slave src]$ vim /usr/local/src/sonarqube-6.7.7/conf/sonar.properties   # 修改sonarqube配置文件
    sonar.jdbc.username=sonar
    sonar.jdbc.password=123456
    sonar.jdbc.url=jdbc:mysql://192.168.7.103:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerforman  # 192.168.7.103是本机的IP地址
    ce&useSSL=false
    sonar.web.host=0.0.0.0  # 默认允许访问的web主机IP地址
    sonar.web.port=9000  #默认监听此端口
    

    2、启动sonarqube服务,需要最少4G的内存才能运行起来

    [sonarqube@jenkins-slave sonarqube-6.7.7]$ cd /usr/local/src/sonarqube-6.7.7  #切换到此目录下
    [sonarqube@jenkins-slave sonarqube-6.7.7]$ ./bin/linux-x86-64/sonar.sh start # 启动sonarqube服务
    Starting SonarQube...
    Started SonarQube.
    

    3、再打开一个窗口查看此时sonarqube运行状态

    [sonarqube@jenkins-slave src]$ pwd
    /usr/local/src
    [sonarqube@jenkins-slave src]$ tail -f sonarqube-6.7.7/logs/*.log

    此时监听的默认9000端口已经打开,如果此主机安装php,sonarqube将无法启动。

    4、开始登陆sonarqube,默认的账号是admin 密码是admin,登陆网址是192.168.7.103:9000

    5、登陆的第一件事,当然就是安装chinese中文插件,安装完中文包之后,需要重启sonarqube,此时sonarqube的部署已经完成!!!

    6、重启sonarqube

    [sonarqube@jenkins-slave sonarqube-6.7.7]$ pwd
    /usr/local/src/sonarqube-6.7.7
    [sonarqube@jenkins-slave sonarqube-6.7.7]$ bin/linux-x86-64/sonar.sh  restart #重启sonarqube
    Stopping SonarQube...
    Waiting for SonarQube to exit...
    Stopped SonarQube.
    Starting SonarQube...
    Started SonarQube.

    5、在jenkins主机上安装部署扫描器:sonar-scanner

    sonar-scanner介绍

    sonarqube通过调用扫描器 sonar scanner 进行代码质量分析,即扫描器的具体工作就是扫描代码:

    1、在网站上下载sonar-scanner包,将此包放到jenkins服务器的/usr/local/src目录下,解压并创建软链接。

    下载地址:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/

    官方文档:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

    [root@jenkins src]# pwd
    /usr/local/src
    
    [root@jenkins src]# unzip sonar-scanner-cli-4.0.0.1744-linux.zip  # 解压文件
    [root@jenkins src]# ln -sv /usr/local/src/sonar-scanner-4.0.0.1744-linux/ /usr/local/sonnar-scanner  #创建软链接
    ‘/usr/local/sonnar-scanner’ -> ‘/usr/local/src/sonar-scanner-4.0.0.1744-linux/’
    

    2、修改sonar-scanner配置文件

    [root@jenkins sonar-scanner-4.0.0.1744-linux]# pwd
    /usr/local/src/sonar-scanner-4.0.0.1744-linux
    [root@jenkins sonar-scanner-4.0.0.1744-linux]# vim conf/sonar-scanner.properties 
    sonar.host.url=http://192.168.7.103:9000  #监听sonarqube地址
    sonar.sourceEncoding=UTF-8  #使用UTF-8字符集
    

    3、此时切换到sonnar-scanner可执行程序目录下,此时的sonnar-scanner可执行程序需要在代码检测的目录下进行测试。

    [root@jenkins bin]# cd /usr/local/sonnar-scanner/bin  #切换到可执行目录下
    [root@jenkins bin]# ls
    sonar-scanner-debug  sonar-scanner   # 其中sonar-scanner执行脚本需要在检测代码的目录下进行执行
    

    6、准备测试代码

    1、准备sonar-examples-master测试代码,将测试代码进行解压,最主要的是/usr/local/src/sonar-examples-master/projects/languages/php/php-sonar-runner目录下的配置文件sonar-project.properties、以及src目录下的源代码。 

    [root@jenkins src]# unzip sonar-examples-master.zip  #解压测试代码
    [root@jenkins php-sonar-runner]# pwd
    /usr/local/src/sonar-examples-master/projects/languages/php/php-sonar-runner
    [root@jenkins php-sonar-runner]# ls
    README.md  sonar-project.properties  src  validation.txt #其中sonar-project.properties就是配置源代码的文件,src是源代码的目录                       
    [root@jenkins php-sonar-runner-simple]# cat sonar-project.properties 
    # Required metadata
    sonar.projectKey=org.sonarqube:php-simple-sq-scanner  #自定义项目key,可以自己定义
    sonar.projectName=Java :: Simple Project Not Compiled :: SonarQube Scanner  #自定义项目的名称,可以自己定义
    sonar.projectVersion=1.0  #源代码版本
    
    # Comma-separated paths to directories with sources (required)
    sonar.sources=src  #源代码的目录
    
    # Language
    sonar.language=php #代码语言类型
    
    # Encoding of the source files 
    sonar.sourceEncoding=UTF-8 #默认的UTF-8字符类型

    2、手动在当前项目代码目录执行扫描,以下是扫描过程的提示信息,扫描的配置文件sonar-project.propertie在每个项目都要有

    注意:扫描必须是在代码目录下进行扫描,否则无法成功。

    [root@jenkins php-sonar-runner]# /usr/local/sonnar-scanner/bin/sonar-scanner
    

    执行成功结果如下,显示成功才行。

    3、此时登陆sonarqube网址,可以看到扫描代码的信息已经在此网页上显示192.168.7.103:9000

     实战二:Jenkins执行代码扫描

    1、在Jenkins安装sonarqube-scanner插件

    在系统管理---->插件管理,安装sonarqube-scanner插件

    2、添加sonarqube URL:Jenkins--->系统管理----->系统设置---->SonarQube servers

    3、在Jenkins添加扫描工具:Jenkins---->系统管理---->全局工具配置

    指定扫描工具的绝对路径:

    2、使用扫描工具对Jenkins脚本进行扫描

    第一种方式:选择创建的项目或者自己重新创建项目,然后在构建里边“增加构建步骤",将扫描配置放到前面

    扫描配置:

    sonar.projectKey=job1-master
    sonar.projectName=job1-master
    sonar.projectVersion=1.0
    sonar.sources=./
    sonar.language=php
    sonar.sourceEncoding=UTF-8
    

    Jenkins上执行的脚本

    cd /var/lib/jenkins/workspace/linux-jobs
    tar cf code.tar.gz index.html
    scp code.tar.gz  www@192.168.7.104:/data/tomcat/tomcat_appdir/ 
    ssh www@192.168.7.104  "/apps/tomcat/bin/shutdown.sh && rm -rf /data/tomcat/tomcat_webdir/myapp/*  && cd /data/tomcat/tomcat_appdir/ && tar xf code.tar.gz -C /data/tomcat/tomcat_webdir/myapp/"
    ssh www@192.168.7.104  "/apps/tomcat/bin/startup.sh"

     3、在Jenkins立即构建

    4、查看Jenkins扫描代码到sonarqube服务的信息,此时实验成功!

     第二种方式:

     1、将测试代码的配置代码文件和源码目录传达gitlab上

    #git clone http://192.168.7.100/linux_gitlab/web1.git #先在gitlab克隆一个项目目录及代码,用来在项目目录下上传代码
    [root@jenkins web1]# cd /usr/local/src/sonar-examples-master/projects/languages/php/php-sonar-runner/ # 切换到测试的代码目录下
    [root@jenkins php-sonar-runner]# cp -r src web1 # 源代码目录复制到web1项目下
    [root@jenkins php-sonar-runner]# cp sonar-project.properties  web1  # 配置代码文件复制到web1目录下
    
    [root@jenkins php-sonar-runner]# cat sonar-project.properties   #查看代码配置文件信息
    # Required metadata
    sonar.projectKey=linux-php
    sonar.projectName=linux-php
    sonar.projectVersion=1.0
    
    # Comma-separated paths to directories with sources (required)
    sonar.sources=src
    
    # Language
    sonar.language=php
    
    # Encoding of the source files
    sonar.sourceEncoding=UTF-8
    
    [root@jenkins web1]# git config --global user.email 97212253@qq.com"  #进行登陆验证
    [root@jenkins web1]# git config --global user.email jenkins  #登陆gitlab验证
    [root@jenkins web1]# git add ./*  # 添加代码及扫描配置文件
    [root@jenkins web1]# git commit -m "v2" #提交
    [root@jenkins web1]# git push  #上传代码和扫描配置文件

    查看上传到gitlab的代码及配置文件

    2、指定代码路径和凭证

    3、执行shell脚本,切换到克隆下来的代码路径,然后对其代码进行扫描

     4、立即构建

     5、在sonarqube控制台可以看到代码扫描的结果,第二种方法试验成功!

     

      

      

  • 相关阅读:
    牛客网Java刷题知识点之方法覆盖(方法重写)和方法重载的区别
    牛客网Java刷题知识点之自动拆装箱
    安装Phoenix时./sqlline.py执行报错File "./sqlline.py", line 27, in <module> import argparse ImportError: No module named argparse解决办法(图文详解)
    Apache-kylin-2.0.0-bin-hbase1x.tar.gz的下载与安装(图文详解)
    Apache Kylin的架构特性
    Apache Kylin Cube 的存储
    Apache Kylin Cube 的构建过程
    Apache Kylin的核心概念
    中央网络安全和信息化领导小组办公室
    中国智慧城市建设投资联盟
  • 原文地址:https://www.cnblogs.com/struggle-1216/p/12439355.html
Copyright © 2020-2023  润新知