Jenkins+SonarQube代码质量检查自动化

安装 方法一

参考
Jenkins的安装很简单,官网提供的安装方式如下

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins
  • 启动/停止/重启命令 须使用root权限
    service jenkins start/stop/restart
  • 设置自启动
    sudo chkconfig jenkins on
  • 问题解决
  1. Failed to start LSB: Jenkins Automation Server. jenkins启动失败的解决办法
    Jenkins 未加载到 java 环境的问题, candiddates 参数内追加 java 的环境变量即可;
    命令
 vi /etc/rc.d/init.d/jenkins 
/usr/local/jdk1.8.0_141/bin/java

如下图


Jenkins+SonarQube代码质量检查自动化_第1张图片
添加Java环境变量.png

安装 方法二

  1. 到Jenkins的网站下载一个war包,下载地址
    https://jenkins.io/download/
    jenkins.war下载后放置在/usr/local/src 目录下
    Windows新建一个startup.bat文件,Linux新建一个startup.sh文件,其内容如下
@echo off
set JENKINS_HOME="/root/.jenkins"
set JAVA_HOME="/usr/local/src/jdk1.8.0_141"
%JAVA_HOME%\bin\java -jar jenkins.war --httpPort=8081 --prefix=/ --controlPort=8083
  1. 官方启动方式
    java -jar jenkins.war --httpPort=8081 --prefix=/ --controlPort=8083
    这样启动方式,在关闭控制台或者ssh断开服务器链接后 jenkins也就自动关闭了。
  • 在Linux下,可以使用以下方式启动。
    nohup java -jar jenkins.war --httpPort=8081 --prefix=/ --controlPort=8083 &
    启动后 会生成一个nohup.out输出,需要的话,可以tail -f nohup.out实时查看日志
    然后访问 ip:8081
jenkins日志问题

[DNSQuestion@1549353466 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]
上面内容主要是因为DNS查询错误,返回了所有的日志数据,解决方法:
【系统管理】=》【system log】=>【日志级别】=》【Name: javax.jmdns,Level: off】

SonarQube代码质量检查

  • 参考
    连接1 连接2 连接3
  1. 软件版本:sonarqube-6.7.5,sonar-runner-dist-2.4 sonar-scanner-3.0.3.778
    sonarqube-6.7.5 下载
    链接:https://pan.baidu.com/s/1UrhPygfE7KWC_sf7Fd0wJA 提取码:6075
下载Sonar-Runner:
cd /usr/local/src
wget http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip
sonar-scanner下载扫描器地址:
wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
Scanner下载
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip
  1. 解压
    unzip sonarqube-6.7.5.zip
    unzip sonar-scanner-cli-3.3.0.1492-linux.zip
    cp -R sonarqube-6.7.5 /usr/local/sonarqube-6.7.5
    mv sonar-scanner-3.3.0.1492-linux /usr/local/sonar-scanner
  2. 配置环境变量
    vim /etc/profile
export SONAR_HOME=/usr/local/sonarqube-6.7.5
export SONAR_SCANNER_HOME=/usr/local/sonar-scanner
PATH=$PATH:$SONAR_HOME/bin:$SONAR_SCANNER_HOME/bin

source /etc/profile

  1. 新建数据库
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
  1. 添加用户组和用户
    groupadd sonar
    添加用户mysql 到用户组mysql
    useradd -g sonar sonar
    passwd sonar
    输入密码 123456
  2. 配置sonar.properties
    cd /usr/local
    vim sonarqube-6.7.5/conf/sonar.properties
    修改如下
#数据库的账号密码,刚才创建的
sonar.jdbc.username=sonar       
sonar.jdbc.password=sonar
#连接数据库
sonar.jdbc.url=jdbc:mysql://xxxx:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#驱动程序类名,其实可以不写的
#sonar.jdbc.driverClassName=com.mysql.jdbc.Driver
sonar.sorceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
#开启端口
sonar.web.port=9000
  1. 启动SonarQube注意事项
  • SonarQube 启动不能用root启动,所以新建一个用户。
  • 必须先启动elasticsearch,才能在启动sonar。
    sonar文件目录里面有elasticsearch这个目录。
启动elasticsearch
  1. 编写配置文件elasticsearch.yml
    cd /usr/local
    chown -R sonar:sonar sonarqube-6.7.5
    chmod 777 -R sonarqube-6.7.5
    vim sonarqube-6.7.5/elasticsearch/config/elasticsearch.yml
    开启端口和指定服务 去掉注释修改
network.host: 0.0.0.0
http.port: 9200
  1. 启动elasticsearch
    su sonar 切换用户
    ./sonarqube-6.7.5/elasticsearch/bin/elasticsearch -d -d代表后台运行
解决问题一:sonar用户内存过低

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
elasticsearch启动时遇到的错误
问题翻译过来就是:elasticsearch用户拥有的内存权限太小,至少需要262144;

  • 解决方式一:
    切换到root用户
    执行命令:
    sysctl -w vm.max_map_count=262144
    查看结果:
    sysctl -a|grep vm.max_map_count
    显示:
    vm.max_map_count = 262144
    上述方法修改之后,如果重启虚拟机将失效
  • 解决方式二:
    在 /etc/sysctl.conf文件最后添加一行
    vm.max_map_count=262144
    即可永久修改
    elasticsearch安装后启动时候,遇到此问题
解决问题三:由于内存不足原因引起的elasticsearch自动退出

max file descriptors [65535] for elasticsearch process is too low
问题翻译过来就是:elasticsearch用户拥有的可创建文件描述的权限太低,至少需要65536;

  • 解决办法:
    切换到root用户修改
    vim /etc/security/limits.conf
    在最后面追加下面内容
*** hard nofile 65536
*** soft nofile 65536
解决问题三:由于内存不足原因引起的elasticsearch自动退出

/usr/local/sonarqube-6.7.5/elasticsearch/config
vi jvm.options
修改

-Xms1g
-Xmx1g
启动sonar(用sonar用户启动)

su sonar
cd /usr/local/sonarqube-6.7.5/bin/linux-x86-64/
./sonar.sh start

  • 其他命令 sonar日志、启动,关闭、重启、状态,dump
    ./sonar.sh console | start | stop | restart | status | dump
    可设置参数max_allowed_packet控制代码检查量
    访问:http://129.211.24.177:9000
汉化sonar

汉化参考

  • 访问页面,搜索chinese插件,提示安装重启启动即可
    http://129.211.24.177:9000/admin/marketplace?search=chinese
    Jenkins+SonarQube代码质量检查自动化_第2张图片
    安装汉化插件.png

安装sonar-scanner扫描(方式一)

  1. 解压文件(上面已解压,并配置环境变量)
    sonar-scanner -v
INFO: Scanner configuration file: /usr/local/sonar-scanner/conf/sonar-scanner.properties
INFO: Project root configuration file: /usr/local/sonar-project/xy99/sonar-project.properties
INFO: SonarQube Scanner 3.3.0.1492
INFO: Java 1.8.0_121 Oracle Corporation (64-bit)
INFO: Linux 3.10.0-514.26.2.el7.x86_64 amd64

cd /usr/local/sonar-scanner

  1. 编辑文件
    vim conf/sonar-scanner.properties
sonar.sourceEncoding=UTF-8
sonar.host.url=http://129.211.24.177:9000
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://129.211.24.177:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar.login=admin
sonar.password=admin
  1. 创建一个sonar-project.properties
    vim sonar-project.properties
sonar.projectKey=xy99
sonar.projectName=xy99
sonar.projectVersion=4.0.0  
# Set modules IDs  
sonar.modules=core,core-db
# Modules inherit properties set at parent level  
sonar.sources=src/main/java  
#sonar.tests=src/test/java  
sonar.java.binaries=target/classes
sonar.language=java  
sonar.login=admin
sonar.password=admin
#编码格式
#sonar.sourceEncoding=UTF-8
  1. 开始扫描
    cd /usr/local/sonar-scanner/bin
    ./sonar-scanner

问题一

ERROR: You must define the following mandatory properties for 'Unknown': sonar.projectKey, sonar.sources
ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.

要在项目文件下执行,如我的项目放在/usr/local/sonar-project目录下则
cd /usr/local/sonar-project/xy99
sonar-scanner 配置了环境变量

Jenkins配置Sonar

参考

  1. 登录Sonar
    http://129.211.24.177:9000
    开启scm


    Jenkins+SonarQube代码质量检查自动化_第3张图片
    SCM.png
  2. 获取jenkins登入token


    Jenkins+SonarQube代码质量检查自动化_第4张图片
    token.png
  3. 配置SonarQube server 系统管理-->系统设置

    Jenkins+SonarQube代码质量检查自动化_第5张图片
    SonarQube server

  4. 配置maven和SonarQube Scanner 系统管理-->全局工具配置

    Jenkins+SonarQube代码质量检查自动化_第6张图片
    maven和SonarQube Scanner

  5. 安装 Sonar 插件
    系统管理--->管理插件。找到插件SonarQube Scanner进行安装。

  6. Execute SonarQube Scanner加入到jenkins项目中


    Jenkins+SonarQube代码质量检查自动化_第7张图片
    Execute SonarQube Scanner
  • 配置如下
sonar.projectKey=xy99
sonar.projectName=xy99
sonar.projectVersion=4.0.0  
# Set modules IDs  
sonar.modules=core,core-db
# Modules inherit properties set at parent level  
sonar.sources=src/main/java  
#sonar.tests=src/test/java  
sonar.java.binaries=target/classes
sonar.language=java  
sonar.login=admin
sonar.password=admin

你可能感兴趣的:(Jenkins+SonarQube代码质量检查自动化)