sonarscanner扫描指定日期至当前时间的svn版本文件的代码
- 软件测试
- 2022-08-04
- 11热度
- 0评论
本地下载源码
- 本地要先下载好源码,如下载到:
D:\CI\sourcecode\01_SIT\autoclaim
此路径我们暂且叫源码根目录
源码根目录配置文件
- 在源码根目录下,新增一个配置文件,名为"config.property",文件内容如下:
######注意:注释中可以用逗号分隔项中,逗号都应为英文状态下的逗号######
####系统配置信息####
[sysconf]
#此系统名称
system.name=autoclaim
#项目发布环境
deploy.environment=autoclaim_test
#清单目录,默认为工作目录,建议不要修改
list.path=D:\CI\sourcecode\01_SIT\autoclaim
#sonarscanner扫描的文件清单
scan.listpath=D:\CI\sourcecode\01_SIT\autoclaim
#本地代码文件路径
src.dir=D:\CI\sourcecode\01_SIT\autoclaim
#需要截掉的路径(svn上的清单前面的一段长的路径要截掉)
list.rep=/01-development/01-src/autoclaim/branche/autoclaim_TB_TEST_20171122/
####配置管理等相关信息####
[scminfo]
#软件配置管理工具
scmtype=svn
#scm登陆账户
scm.user=zhuchun
#scm登陆密码
scm.password=zhuchun
#检测日志的天数
pre.days=365
#扫描日志的起始日期(yyyy-mm-dd)
scan.days=2019-08-26
######代码部分######
#任务分支是否固定不变,True为固定不变,需要配置trunk.url。False为有变动,jenkins job需要配置turnk_url传参入口
invarianturl=True
#获取代码任务码线url(分支固定不变)
trunk.url=
源码根目录,可执行文件
- 在python包的路径下
D:\CI\install\Python27\Lib\site-packages\com\sinosoft\ci
添加名为scan.py
的文件,文件内容如下:
#coding:gbk
'''
Created on 2019年8月27日
Add by ZhuChun
'''
import ConfigParser
import os
import datetime
import time
import shutil
import code
import sys
import xml.dom.minidom as xmldom
reload (sys)
sys.setdefaultencoding('gbk')
class SconarScan(object):
'''
classdocs
'''
def __init__(self, conf):
'''
Constructor
'''
self.config=conf
conf = ConfigParser.ConfigParser()
conf.read(self.config)
if conf.has_option("sysconf","scan.listpath"):
self.listpath=conf.get("sysconf","scan.listpath")
else:
self.listpath="."
if conf.has_option("scminfo","scmtype"):
self.scmtype=conf.get("scminfo","scmtype")
else:
self.scmtype="svn"
if conf.has_option("scminfo","scm.user"):
self.scmuser=conf.get("scminfo","scm.user")
else:
print "未配置 scm.user"
os.system()
if conf.has_option("scminfo","scm.password"):
self.scmpassword=conf.get("scminfo","scm.password")
else:
print "未配置 scm.password"
os.system()
if conf.has_option("scminfo","scan.days"):
self.scandays=conf.get("scminfo","scan.days")
print self.scandays
else:
print "未配置 scan.days"
os.system()
###代码部分相关配置
if conf.has_option("sysconf","src.dir"):
self.srcdir=conf.get("sysconf","src.dir")
else:
print "未配置 src.dir"
os.system()
if conf.has_option("scminfo","invarianttrunkurl"):
self.invarianttrunkurl=conf.get("scminfo","invarianttrunkurl")
else:
self.invarianttrunkurl='True'
if self.invarianttrunkurl == 'True':
if conf.has_option("scminfo","trunk.url"):
self.trunkurl=conf.get("scminfo","trunk.url")
else:
print "未配置 trunk.url"
os.system()
else:
self.trunkurl=os.getenv('trunk_url')
if conf.has_option("sysconf","list.rep"):
self.listrep=conf.get("sysconf","list.rep")
else:
print "未配置 list.rep"
def sonarscan(self):
temp_dir=os.path.join(self.listpath,'scantemp')
scmlog=os.path.join(temp_dir,'scmlog.xml')
#清理更新文件
if os.path.exists(temp_dir):
shutil.rmtree(temp_dir)
time.sleep(1)
os.mkdir(temp_dir)
elif not os.path.exists(temp_dir):
os.mkdir(temp_dir)
if self.scmtype == 'svn':
#svnlog输出
timeFomat='%Y-%m-%dT23:59:00'
#n天前的svn日志
d=datetime.datetime.strptime(self.scandays,"%Y-%m-%d").strftime(timeFomat)
now=datetime.datetime.now().strftime(timeFomat)
os.chdir(self.srcdir)
#获取代码日志文件
os.system('svn --username '+self.scmuser+' --password '+self.scmpassword+' log --xml -v -r{'+d+'}:{'+now+'} \"'+self.trunkurl+'\" > '+scmlog)
#将文件清单写入sonar-project.properities
domobj=xmldom.parse(scmlog)
elemobj=domobj.documentElement
subelemobjs=elemobj.getElementsByTagName("path")
scanlist=""
for sub in subelemobjs:
str=sub.childNodes[0].data
scanlist=str+","+scanlist
scanlist=scanlist.replace(self.listrep,"")
scanlist="sonar.inclusions="+scanlist[:-1]
print "scanlist:"+scanlist
f=open(os.path.join(temp_dir,"sonar-project.properties"),"w")
f.write(scanlist)
f.close()
- 在源码根目录下添加
Scan.py
文件,文件内容如下:
#coding:gbk
'''
Created on 2019年8月27日
'''
import os
from com.sinosoft.ci.scan import SconarScan
#组件存放目录work_dir=""
work_dir=os.getenv('WORKSPACE')
#配置文件地址
conffile=os.path.join(work_dir,'config.property')
SconarScan=SconarScan(conffile)
SconarScan.sonarscan()
jenkins配置
-
新建一个Item;
-
在配置中,配置如下:
- 1.配置jdk
- 2.配置工作空间:
D:\CI\sourcecode\01_SIT\autoclaim
- 3.配置源码管理Subversion,本地要同步svn代码所用
- 4.在构建步骤中,新增一个
Excute Windows batch command
,内容如下:Scan.py
- 5.在上面的构建步骤下,增加一个构建步骤
Excute SonarQube Scanner
,配置如下:- Task to run:scan
- JDK:选择你项目对应的就行
- Path to project properities:${WORKSPACE}/scantemp/sonar-project.properties
- Anaylysis properities :内容如下
sonar.projectKey=autoclaim_test sonar.projectName=autoclaim_test sonar.projectVersion=1.1-SNAPSHOT sonar.language=java sonar.java.source=1.6 sonar.java.binaries=D:/CI/sourcecode/01_SIT/autoclaim/WebRoot/WEB-INF/classes sonar.java.libraries=D:/CI/sourcecode/01_SIT/autoclaim/WebRoot/WEB-INF/lib sources=src sonar.sourceEncoding=UTF-8 sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:postgresql://localhost/sonardb?currentSchema=my_schema sonar.login=cjbx-lipei sonar.password=112233
-
保存后,点击立即构建即可。