关于sonar可以干什么,相信大家都清楚:主要作用是静态代码检查,话不多说,接下来看如何一步一步在gradle项目中配置gitlab ci接入sonar
本文主要讲解: 1如何下载安装sonar, 2.多分支的配置, 3. ci脚本的编写, 4 需要的插件
1. 下载sonar: https://www.sonarqube.org/ , 我们要下载什么版本取决于每个sonar版本的先决条件是不一样的,即什么样的环境支持可以支持什么样的版本
根据要求里面看自己的硬件和软件环境是否符合该版本, 比如数据库,jdk版本,磁盘情况等
中文版: http://www.sonar.org.cn/category/install
2. 将下载好的sonar放到服务器上,解压后,可以在
sonarqube-7.6/conf目录下找到
2.1 sonar.properties文件就是配置文件,需要配置下数据库,web服务器的地址和端口
sonar.jdbc.url=jdbc:mysql://数据库ip:3306/数据库?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false sonar.jdbc.username=数据库名字 sonar.jdbc.password=数据库密码 sonar.sorceEncoding=UTF-8 sonar.login=admin sonar.password=admin sonar.web.host=服务器的ip sonar.web.port=服务器端口(可以设置为你想要的任何端口,只要该端口没有被其他服务占用即可,这里一般设置为9000, 我这块设置的是9001)
配置完成后,保存即可;
2.2 启动sonar服务器
在sonarqube-7.6/bin/linux-x86-64目录下存在一个sonar.sh文件
在该目录下,启动服务 sh sonar.sh start
sh sonar.sh start // 启动服务 sh sonar.sh restart // 关闭再重启 sh sonar.sh stop // 关闭服务
2.3 在浏览器输入2.1中配置的服务器ip和端口,http://服务器ip:9001/用户名和密码都是admin,若是服务没有起来,要去下面的日志文件里面看是什么原因导致
此时,可以在sonarqube-7.6/logs下面的日志有很多
主要是看access.log(项目上传sonar的相关日志), sonar.log(sonar本身的日志), web.log(web服务的日志)
大部分问题的原因可能是:数据库没连上,端口和ip写错了
下面图表示启动成功
2.4 如果要配置多分支情况,下载https://github.com/mc1arke/sonarqube-community-branch-plugin插件,存放在sonarqube-7.6/extensions/plugin 和 lib/common下重启服务器即可 (一定要看清楚版本)
3. 我们项目的部署:首先项目在在gitlab上的,然后也配置了ci相关, 那如何加入和sonar相关的配置呢?
在gitlab-ci.yml文件中 ,stages增加一个测试, 然后image是采用的哪个gradle镜像(根据自己情况写),其余照着写就成
其中变量在ci的这个地方配置即可
变量配置只需要配置
SONAR_URL 和SONAR_LOGIN 即可,因为其他配置是gitlab自带的, 其中SONAR_URL的地址是就是上面写的服务器+ip地址,SONAR_LOGIN是在sonar服务器上面配置的,我们后面在说(先记下有个配置没完成哦)
stages: - 测试 # ---------- master 分支 sonar: tags: - k8s stage: 测试 only: - master image: mirror-library-gradle:4.10-jdk8 retry: 1 variables: GRADLE_OPTS: -Dorg.gradle.daemon=false script: - gradle sonarqube -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_LOGIN -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME -Dsonar.gitlab.project_id=$CI_PROJECT_ID 其他分支 sonar: tags: - k8s stage: 测试 except: - master image: mirror-library-gradle:4.10-jdk8 retry: 1 variables: GRADLE_OPTS: -Dorg.gradle.daemon=false script: - gradle sonarqube -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_LOGIN -Dsonar.gitlab.commit_sha=$CI_COMMIT_SHA -Dsonar.gitlab.ref_name=$CI_COMMIT_REF_NAME -Dsonar.branch.name=$CI_COMMIT_REF_NAME -Dsonar.gitlab.project_id=$CI_PROJECT_ID
login的生成是在这块,可以填写一个名称(随便就好),然后点击生成,会有一个字符串,请千万记好哦,该字符串就是gitlab登陆sonar的标识,也是我们在ci里面配置的nage SOANR_LOGIN的value值;
4. 在sonar中还要配置gitlab相关的配置:
4.1插件安装
如何无法安装,可在https://github.com/gabrie-allaigre/sonar-auth-gitlab-plugin 和https://github.com/gabrie-allaigre/sonar-gitlab-plugin地方下载对应版本的插件,然后放在extensions/plugin里面,然后sh sonar.sh restart重启即可
4.2 gitlab地址,在gitlab url的地方写上git的地址,写到.com就可以了
5. 此时一切就绪,我们就可以执行gitlab ci来进行项目的静态代码分析了,可以在项目当中切换分支,,
可以看具体的扫描结果:
6. 备注: 切换到其他分支时,扫描的结果是基于master分支的,也就是说master分支有的异常不会再该分支出现;所以可能会出现空的情况,不要诧异哦(我也是踩了坑才知道的)
7. commit配置:主要包括git的地址和 其中token 是需要去gitlab上生成的(该账户需要有项目的开发权限才可以),