博客 > 术业专攻> 自动化运维> Jenkins> Jenkins实战应用–Jenkins+sonar构建代码扫描 2019年08月29日 11:25:14
文章汇总地址如右:Jenkins入门教程。
如果相中哪个,点击进去便是。希望正在读这段话的你能够在这个小系列中获得自信以及喜悦!
Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量,通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测。
通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。
在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。
此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
下载完成之后,将如上包传入服务器中。
因为上边下载的包在使用过程中还需要一些其他操作,因此这里直接将可用的包打包,存在百度云。
文件下载 | 文件名称:sonar-all | 文件大小:153M |
下载声明:本站文件大多来自于网络,仅供学习和研究使用,不得用于商业用途,如果有版权问题,请联系博主进行相关处理! | ||
下载地址:https://pan.baidu.com/s/1LvTj22Xzrmoh6T0GmyAuPA |
整个环境依赖jdk环境(官方建议使用OpenJDK 8),也要准备好maven工具在系统中,这两个的准备工作就不详细展示了。
对于主机配置的要求,官方建议是,实例需要至少2GB的RAM才能有效运行,并且1GB的可用RAM用于操作系统。磁盘方面,如果代码量足够大,那么应该给予足够大(150G)的磁盘,并且是出色读写性能的硬盘。
本次部署也是在Jenkins主机上直接进行的部署操作
关于数据库,如果选择MySQL,那么官方建议的是5.6和5.7这两个版本,这里我使用5.6版本的。
通过 curl 192.168.10.10/a | sh
进行安装,安装完成之后,创建如下数据库:
mysql> CREATE DATABASE sonar DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar'; mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar'; mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar'; mysql> FLUSH PRIVILEGES;
这里使用普通用户来管理sonar,因为后边如果使用root启动会报错,这个还真别不听,如果不信,可以自己测试一下,主要是到时候的elasticsearch组件会因为root启动而报错can not run elasticsearch as root
,所以还是乖乖的使用普通用户来部署吧。
[root@localhost ~]$useradd sonar [root@localhost ~]$passwd sonar
给刚刚创建的普通用户以sudo权限。
[root@localhost opt]$vim /etc/sudoers
在第93行添加如下内容:
sonar ALL=(ALL) ALL
顺便在这个当口,将程序的文件打开数放开一下:
[root@jenkins ~]$vim /etc/security/limits.conf 在最末尾添加: sonarqube - nofile 65536 sonarqube - nproc 2048
以下操作将在刚刚创建的普通用户sonar下进行。
[sonar@jenkins ~]$ls sonar-l10n-zh-sonar-l10n-zh-plugin-1.19.zip sonarqube-6.7.5.zip sonar-scanner-cli-3.0.3.778.zip
[sonar@jenkins ~]$unzip sonarqube-6.7.5.zip [sonar@jenkins ~]$mv sonarqube-6.7.5 sonarqube [sonar@jenkins ~]$ll sonarqube total 12 drwxr-xr-x 8 sonar sonar 136 Aug 6 10:29 bin drwxr-xr-x 2 sonar sonar 50 Aug 6 10:20 conf -rw-r--r-- 1 sonar sonar 7651 Aug 6 10:20 COPYING drwxr-xr-x 2 sonar sonar 24 Aug 6 10:20 data drwxr-xr-x 7 sonar sonar 150 Aug 6 10:29 elasticsearch drwxr-xr-x 4 sonar sonar 40 Aug 6 10:20 extensions drwxr-xr-x 9 sonar sonar 140 Aug 6 10:29 lib drwxr-xr-x 2 sonar sonar 6 Aug 6 10:20 logs drwxr-xr-x 2 sonar sonar 24 Aug 6 10:20 temp drwxr-xr-x 9 sonar sonar 4096 Aug 6 10:29 web
mysql-connector-java-5.1.40.jar
,此包在maven.aliyun.com里边搜索一下即可找到,上边的完整包里边已经包含。
下载之后传到服务器,放在对应目录下:
[sonar@jenkins ~]$mkdir sonarqube/extensions/jdbc-driver/mysql [sonar@jenkins ~]$mv mysql-connector-java-5.1.40.jar sonarqube/extensions/jdbc-driver/mysql/
/home/sonar/sonarqube/conf/sonar.properties
。[sonar@jenkins ~]$vim /home/sonar/sonarqube/conf/sonar.properties 配置如下三条: sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url= jdbc:mysql://localhost:3306/sonar ?useUnicode =true&characterEncoding =utf8&rewriteBatchedStatements =true&useConfigs=maxPerformance& useSSL=false
下面是可以配置的一些其他参数:
#sonar.jdbc.maxActive=60 #sonar.jdbc.maxIdle=5 #sonar.jdbc.minIdle=2 #sonar.jdbc.maxWait=5000 #sonar.jdbc.minEvictableIdleTimeMillis=600000 #sonar.jdbc.timeBetweenEvictionRunsMillis=30000
[sonar@jenkins ~]$unzip sonar-scanner-cli-3.0.3.778.zip [sonar@jenkins ~]$mv sonar-scanner-cli-3.0.3.778 sonar-scanner [sonar@jenkins ~]$ll sonar-scanner total 52 -rw-rw-r-- 1 sonar sonar 2585 May 12 2017 appveyor.ps1 -rw-rw-r-- 1 sonar sonar 351 May 12 2017 appveyor.yml drwxrwxr-x 4 sonar sonar 48 May 12 2017 it -rw-rw-r-- 1 sonar sonar 7635 May 12 2017 LICENSE.txt -rw-rw-r-- 1 sonar sonar 179 May 12 2017 NOTICE.txt -rw-rw-r-- 1 sonar sonar 12308 May 12 2017 pom.xml -rw-rw-r-- 1 sonar sonar 812 May 12 2017 README.md -rw-rw-r-- 1 sonar sonar 264 May 12 2017 run_integration_tests.sh drwxrwxr-x 4 sonar sonar 30 May 12 2017 src -rw-rw-r-- 1 sonar sonar 166 May 12 2017 third-party-licenses.sh -rwxr-xr-x 1 sonar sonar 475 May 12 2017 travis.sh
如果你的maven工具已经配置好了,那么可以直接运行如下命令构建:
[sonar@jenkins sonar-scanner]$mvn clean install
[sonar@jenkins sonar-scanner]$ls target/ archive-tmp generated-sources maven-archiver original-sonar-scanner-cli-3.0.3-SNAPSHOT.jar sonar-scanner-cli-3.0.3-SNAPSHOT.jar surefire-reports classes generated-test-sources maven-status sonar-scanner-3.0.3-SNAPSHOT.zip sonar-scanner-cli-3.0.3-SNAPSHOT-sources.jar test-classes
sonar-scanner-3.0.3-SNAPSHOT.zip
就是我们需要的文件了。
拿出来,重新操作一波。
[sonar@jenkins sonar-scanner]$mv target/sonar-scanner-3.0.3-SNAPSHOT.zip ~/ [sonar@jenkins sonar-scanner]$cd [sonar@jenkins ~]$unzip sonar-scanner-3.0.3-SNAPSHOT.zip [sonar@jenkins ~]$ls sonar-l10n-zh-sonar-l10n-zh-plugin-1.19.zip sonarqube-6.7.5.zip sonar-scanner-3.0.3-SNAPSHOT sonar-scanner-cli-3.0.3.778.zip sonarqube sonar-scanner sonar-scanner-3.0.3-SNAPSHOT.zip [sonar@jenkins ~]$rm -rf sonar-scanner [sonar@jenkins ~]$mv sonar-scanner-3.0.3-SNAPSHOT sonar-scanner
[sonar@jenkins ~]$vim /home/sonar/sonar-scanner/conf/sonar-scanner.properties
sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
这里切回到root用户进行添加。
[root@jenkins ~]$vim /etc/profile 在末尾添加: #set sonar-quebe and sonar_runner_home export SONAR_HOME=/home/sonar/sonarqube export SONAR_RUNNER_HOME=/home/sonar/sonar-scanner export PATH=$PATH:$SONAR_HOME/bin/linux-x86-64:$SONAR_RUNNER_HOME/bin
加载配置,注意,在加载之前,请确保主机目录与我上边的是一致的,否则可能出现环境被搞乱的风险。
[sonar@jenkins ~]$source /etc/profile
[sonar@jenkins ~]$cd sonarqube/bin/linux-x86-64/ [sonar@jenkins linux-x86-64]$ls lib sonar.sh wrapper [sonar@jenkins linux-x86-64]$./sonar.sh Usage: ./sonar.sh { console | start | stop | restart | status | dump } [sonar@jenkins linux-x86-64]$./sonar.sh start
关于启动脚本的各项参数,已经在上边展示出来了,可以尝试一下。
等待一会儿,就可以访问了。
通过192.168.10.3:9000进行访问。
点击login,用户名密码默认为admin/admin进行登入。
开始有一个教程,不过先跳过:
我的主机用的是CentOS-7。
先将启动命令加入环境中。
[root@jenkins ~]$ln -s /home/sonar/sonarqube/bin/linux-x86-64/sonar.sh /usr/bin/sonar 验证一下: [root@jenkins ~]$sonar status SonarQube is running (36982).
然后创建service管理方式。
[root@jenkins ~]$vim /etc/init.d/sonar 添加如下内容: #!/bin/bash # # rc file for SonarQube # # chkconfig: 345 96 10 # description: SonarQube system (www.sonarsource.org) # ### BEGIN INIT INFO # Provides: sonar # Required-Start: $network # Required-Stop: $network # Default-Start: 3 4 5 # Default-Stop: 0 1 2 6 # Short-Description: SonarQube system (www.sonarsource.org) # Description: SonarQube system (www.sonarsource.org) ### END INIT INFO /usr/bin/sonar $*
简单配置:
[root@jenkins ~]$chmod 755 /etc/init.d/sonar [root@jenkins ~]$chkconfig --add sonar [root@jenkins ~]$chkconfig sonar on 测试一下: [root@jenkins ~]$service sonar status SonarQube is running (36982).
这里主要先安装一个中文语言包的插件。
插件下载地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh
唯一要注意的问题就是,版本要与刚刚安装的相对应。
下载之后传入到服务器当中。
[sonar@jenkins ~]$unzip sonar-l10n-zh-sonar-l10n-zh-plugin-1.19.zip [sonar@jenkins ~]$ll sonar-l10n-zh-sonar-l10n-zh-plugin-1.19 total 8 drwxrwxr-x 4 sonar sonar 79 Nov 14 2017 compare -rw-rw-r-- 1 sonar sonar 3436 Nov 14 2017 pom.xml -rw-rw-r-- 1 sonar sonar 983 Nov 14 2017 README.md drwxrwxr-x 4 sonar sonar 30 Nov 14 2017 src
同样这里需要编译之后才能使用,当然也可以在刚才的链接当中直接下载所需的jar包。
[sonar@jenkins sonar-l10n-zh-sonar-l10n-zh-plugin-1.19]$mvn clean install 同样的,编译完成之后会多一个target的目录。 [sonar@jenkins sonar-l10n-zh-sonar-l10n-zh-plugin-1.19]$ll target/ total 40 drwxrwxr-x 3 sonar sonar 17 Nov 6 13:48 classes drwxrwxr-x 3 sonar sonar 25 Nov 6 13:48 generated-sources drwxrwxr-x 3 sonar sonar 30 Nov 6 13:48 generated-test-sources drwxrwxr-x 2 sonar sonar 28 Nov 6 13:48 maven-archiver drwxrwxr-x 3 sonar sonar 35 Nov 6 13:48 maven-status -rw-rw-r-- 1 sonar sonar 38340 Nov 6 13:48 sonar-l10n-zh-plugin-1.19-RC2-SNAPSHOT.jar drwxrwxr-x 2 sonar sonar 123 Nov 6 13:48 surefire-reports drwxrwxr-x 3 sonar sonar 17 Nov 6 13:48 test-classes
我们所需要的就是编译出来的jar包,把jar包移动到/home/sonar/sonarqube/extensions/plugins
目录下即可。
[sonar@jenkins sonar-l10n-zh-sonar-l10n-zh-plugin-1.19]$mv target/sonar-l10n-zh-plugin-1.19-RC2-SNAPSHOT.jar /home/sonar/sonarqube/extensions/plugins/
移动之后重启一下服务即可。
[sonar@jenkins ~]$/home/sonar/sonarqube/bin/linux-x86-64/sonar.sh restart
重启完成之后,再去浏览器刷新一下,发现系统已经变成中文的了。
首先在Jenkins当中下载对应的插件。
插件安装完成之后,在jenkins的”系统管理”–》“系统设置”, 就能看到SonarQube servers的配置点,截图如下:
配置之前,需要先在sonar当中添加一个连接用户。
这里创建一个用户,用户名为test,秘钥复制下来。回到刚刚Jenkins处进行配置:
注意这里的URL,应当填写部署sonar的主机ip,即便你是同样部署的Jenkins本机的,也不要写成localhost,因为在后边会用到这个配置信息。
在Jenkins的系统管理中的全局工具当中,添加sonar工具。
与此同时,不用多说的,也应将jdk的工具,maven的工具配置完善。
jdk:
maven:
创建一个maven风格的名称为test-sonar的项目。
过程不详细说了,直接看截图。
其中的sonar片段,除了定义一个名称,选中刚刚添加的jdk工具,重要的就是当中的那段配置了。
内容如下:
#项目key (随意输入,必填项) sonar.projectKey=test-sonar #项目名称和版本(必填项) sonar.language=java sonar.projectVersion=1.0 sonar.sourceEncoding =UTF-8 sonar.projectName=test-sonar #源码位置(必填项,相对于jenkins的workspace路径,例如,我此时的绝对路径为~/.jenkins/workspace/Test/test-webapp/src/main/java) sonar.sources=src/main/java #编译后的class位置(必填项,旧版本此项可不填,建议还是填入,相对路径同上) sonar.java.binaries=target/classes
然后保存项目,构建一次。
在构建界面中,可以看到一些不一样的东东。
左侧的SonarQube点击之后可以直接跳转到这个项目对应的sonar中的结果。
来到sonar界面当中,刷新一下,首先映入眼帘的,就是我们刚刚定义的一个test-sonar的项目展示。
到这里,基本上关于这个代码检测的开源工具流程就结束了,剩下的,就是深入使用,慢慢详细了解其中的各个功能,以帮助于日常工作。
© 2018 www.qingketang.net 鄂ICP备18027844号-1
武汉快勤科技有限公司 13554402156 武汉市东湖新技术开发区关山二路特一号国际企业中心6幢4层7号
扫码关注,全站教程免费播放
订单金额:
支付金额:
支付方式: