首先介绍一下技术:
持续集成工具:Jenkins
代码托管:svn或者Git
构建工具:Maven或者Gradle
审查工具:SonarQube
发布容器:Tomcat或者Docker
其次是系统配置信息以及一些额外要求:
(1)OS内核需要高于linux5.3,
(2)推荐运行内存为8G左右,至少需要大于4G
(3)需要分配额外的用户和用户组来运行代码审查工具
(4)若需持久化代码审查记录,需要提供一个数据库(mysql,H2,postgresql等),数据库的安装过程在此跳过
(一)下载配置Jenkins
Jenkins的安装方式有许多种,本文主要以war包方式启动,其他方式请参考https://jenkins.io/download/
将下载好的war包直接放入tomcat的webapp目录下,启动tomcat即可,tomcat的安装方法不再详述
此时查看tomcat的catalina日志,注意留意Jenkins的初始密码会在此输出。
启动完成后访问网址http://localhost:8080/jenkins,这时会进行初始化jenkins的一些配置,建议选择自动安装系统推荐的插件包。
创建用户时,需要提供jenkins的初始密码,在tomcat的启动日志中可以找到。
最后配置完成后,你应该能看到这个画面
(二)SonarQube的下载和安装
(1)首先去SonarQube的官网下载SonarQube包,目前最新版本为7.0,而我们则选择较稳定的LTS版本6.7.2
下载完成后,unzip解压,我的解压路径为/web/sonarqube-6.7.2,同时新增一个用户和用户组(SonarQube不能以ROOT用户运行):
#创建一个名为sonarqube的用户组和一个用户名为sonarqube密码为sonarqube的用户
groupadd sonarqube
useradd sonarqube -g sonarqube -p sonarqube
#为该用户分配文件夹权限
chown -R sonarqube:sonarqube /web/sonarqube-6.7.2
(2)之后,编辑sonar.properties文档,修改一些属性
vim /web/sonarqube-6.7.2/conf/sonar.properties
#设置jvm使用的内存大小,Xms最小使用内存,Xmx最大使用内存,可以根据实际情况自行设置,我目前的系统运行内存为8G
sonar.web.javaOpts=-server -Xms1G -Xmx1G -XX:+HeapDumpOnOutOfMemoryError
#配置持久化数据库的账户密码
sonar.jdbc.username=sonar
sonar.jdbc.password=Sonar6.2
#配置url,我此处使用的mysql
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#下面设定访问网址为 http://centos:9000/sonar
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.context=/sonar
(3)配置启动参数
vim /web/sonarqube-6.7.2/bin/linux-86-64(此处根据系统内存自行选择)/sonar.sh
修改RUN_AS_USER=sonarqube
即我们之前创建的用户
(4)启动sonarqube
#先切换到sonarqube用户
su sonarqube
#执行启动命令
cd /web/sonarqube-6.7.2/bin/linux-86-64/
sh sonar.sh start
附sonar启动命令:
sh sonar.sh start #启动sonar
sh sonar.sh stop #安全停止sonar
sh sonar.sh console #控制台启动sonar
#查看日志
cd ../../logs
日志分为sonar.log,es.log,web.log,若不明原因启动失败,可依次查看这几个日志。
启动后,若日志文件均无报错,即可访问http://localhost:9000/sonar,若顺利,则会出现如下界面
点击login in,输入初始账户密码admin/admin即可。
若始终无法访问,建议检查防火墙设置
(三)Jenkins集成Sonar
(1)在Jenkins中下载sonar插件,目前插件为 SonarQube Scanner for Jenkins
安装完成后,在 系统管理->系统设置中,找到SonarQube servers模块,填写服务器信息:
其中认证token需要登陆sonar后,点击Administrator->security->user,点击token按钮,输入key后再点击generate进行生成
(2)在jenkins中新建一个自由风格项目
源码管理这里不再详述,选择svn或者git都可以,不过git要记得在github上设置好webhook
触发器也不再此详述,git的话,勾选GitHub hook trigger for GITScm polling选项,则每次有push操作,都将触发构建。
构建环境,建议勾选Delete workspace before build starts选项
<1>构建,如果使用gradle进行构建,需要先在 系统管理->全局工具配置中,配置好gradle的安装位置,若系统中没有安装,建议勾选自动安装,name随意输入,maven构建同理。
gradle构建,选择invoke gradle,同时在高级选项中,输入task命令clean build -x test
maven构建,在Goals and options处输入命令clean compile package -Dmaven.test.skip=true,
<2>执行代码分析,新增一个构建步骤,选择Execute SonarQube Scanner,选择你的jdk版本,若没有,请在全局工具配置中配置好jdk位置。再选择好sonarqube scanner的版本。
之后,在Analysis properties处,输入sonar的检查参数,
#项目key (随意输入,必填项)
sonar.projectKey=2017-12-19-job
#项目名称和版本(必填项)
sonar.projectName=cuimi-job
sonar.projectVersion=1.0
#源码位置(必填项,相对于jenkins的workspace路径,例如,我此时的绝对路径为~/.jenkins/workspace/Test/test-webapp/src/main/java)
sonar.sources=test-webapp/src/main/java
#编译后的class位置(必填项,旧版本此项可不填,建议还是填入,相对路径同上)
sonar.java.binaries=test-webapp/target/classes
后面jvm的启动参数项,可以参考GC优化策略。新手略过
(3)配置容器并发布项目
这里有两种方案
<1>通过ssh将构建完成后的Artifacts 发送至目标服务器上,交由其他运维人员处理。
<2>通过tomcat的remote deploy功能远程发布项目
方案一:安装jenkins插件publish over ssh。安装完成后在"系统管理"->"系统设置"中,配置Publish over ssh的相关信息,
注意:插件默认使用22端口进行连接,请确保目标服务器22端口的畅通性。
配置完成后,点击Test Configuration,测试连接是否成功。
之后,在项目设置中,新增构建后操作,如图所示
配置完成后,直接保存修改即可。
注意,这里的source files和exec command是二选一的,即可以传文件,或者在目标服务器上执行shell脚本。但是不能同时两者都执行。
配置完成后,点击构建。构建成功后即可在sonar地址中登陆访问进行查看代码扫描情况
sonar汉化
- 下载地址https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/tag/sonar-l10n-zh-plugin-1.16
- 放在sonarqube安装路径的/extensions/plugins/下
- 重启sonar即可