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

如下图


添加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. 软件版本: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

汉化参考

安装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


    SCM.png
  2. 获取jenkins登入token


    token.png
  3. 配置SonarQube server 系统管理-->系统设置

    SonarQube server

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

    maven和SonarQube Scanner

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

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


    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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容