sonarqube扫描Python项目代码

简介: sonarqube扫描Python项目代码

环境:win 10

sonarqube:7.9.4.35981

sonar-scanner:4.4.0.2170

java : 11.0.8

一.启动程序

打开[mark]sonar的目录->bin文件夹->windows-x86-64->StartSonar.bat[/mark]

sonarqube的默认web端口是9000,打开浏览器输入localhost:9000,输入账号密码(默认都是admin)

二.安装中文插件

Administration > Marketplace,搜索框输入Chinese,就可以找到中文插件Chinese Pack,安装后重启sonar服务器即可

95dcc176-b4fc-48d6-a19a-6239ba1c34f2.png

三. 项目分析

  1. 创建项目,输入令牌,把生成的token复制下来哦,只会显示一次,用户 > 我的账户 > 安全中可以生成新token(令牌),或者回收已创建的 token。
  2. 选择要分析的项目开发语言
  3. 选择需要在什么环境下分析
  4. 复制生成的分析命令,在项目根目录cmd,粘贴即可运行,待success后在sonar上就可以看到结果
  5. 注意:需要将sonar.login=自己创建令牌生成的token

95dcc176-b4fc-48d6-a19a-6239ba1c34f2.png

95dcc176-b4fc-48d6-a19a-6239ba1c34f2.png

6.注意事项:在分析每种语言时可以选择“质量配置”,不选则是默认该语言内置的规则,但是有些规则其实是未激活的,这样的话是分析不出对应的bug;“质量阀”是控制此次分析是成功或失败,sonar有一个内置的,也可以自定义。

7. 在这个实际分析过程中我其实遇到了几个问题,还未解决:

 7.1 分析项目是python,故意写了一个" "yield" and "return" should not be used outside functions" 的bug,使用python的内置规则,既然分析出无bug;查看(python)Sonar Way查看到该规则既然没有‘质量配置’;也没有找到哪里可以激活该规则

 7.2 针对7.1 的现象,我复制了一份(python)Sonar Way,一模一样的;再分析,这个bug又出来了。。。。

 7.3 还有另外一个规则"return" and "yield" should not be used in the same function,复制了一份(python)Sonar Way 既可以激活该规则,再分析,这个bug出来了,被统计到bug数里了

对于这几个问题,公司是使用的SonarQube 8.3版本,但是python分析器版本是一样的(2.8),我也不知道咋回事,准备再用最新的8.4版本的再试试

实验结果:

前提:sonar7.9+ SonarPython2.8    VS   sonar8.4+SonarPython2.13

1. "yield" and "retur" should not be used outside functions"这个规则在sonarqube8.4上看到内置的sonar way是激活了的,且分析同一个项目,这个bug是统计出来了的,不需要做另外的规则激活

95dcc176-b4fc-48d6-a19a-6239ba1c34f2.png

 2. "return" and "yield" should not be used in the same function这个规则在sonarqube8.4的python 内置规则看到未被激活,分析同一个项目,此bug未被检查出来

95dcc176-b4fc-48d6-a19a-6239ba1c34f2.png

3.由此我大胆得出之所以sonar7.9未检查出bug,而sonar8.4检查出,是因为每一种语言的不同规则是否被激活的原因,7.9中未被激活,所以未检查出,而8.4激活了该规则所以检查出来了(说白了就是python语言分析器版本的原因,每一个版本里面激活的规则不一样)

四. 项目分析配置文件

重新扫描只需要再次执行上面的命令。但是每次都执行这么长的命令很麻烦。还好扫描器是可以配置的。

只需要在要分析的目录下,创建一个文件sonar-project.properties。内容如下:

# your authentication token
sonar.login=[之前令牌生成的token]
# must be unique in a given SonarQube instance
sonar.projectKey=[项目key,也就是标识]
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=[项目名称]
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set. 
# Comma-separated paths to directories containing source files.
# 限定要分析的路径
sonar.sources=.
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
# Set the language of the source code to analyze
# 限定要分析的代码语言,比如py。
# 不设置则默认分析多种语言
sonar.language = py
关于扫描器更多的参数配置查看:Analysis Parameters。
相关文章
|
17天前
|
机器学习/深度学习 数据采集 数据可视化
Python 数据分析:从零开始构建你的数据科学项目
【10月更文挑战第9天】Python 数据分析:从零开始构建你的数据科学项目
36 2
|
4天前
|
开发者 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第22天】在Python的世界里,装饰器是一个强大的工具,它能够让我们以简洁的方式修改函数的行为,增加额外的功能而不需要重写原有代码。本文将带你了解装饰器的基本概念,并通过实例展示如何一步步构建自己的装饰器,从而让你的代码更加高效、易于维护。
|
1天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
6 3
|
6天前
|
开发框架 Python
探索Python中的装饰器:简化代码,增强功能
【10月更文挑战第20天】在编程的海洋中,简洁与强大是航行的双桨。Python的装饰器,这一高级特性,恰似海风助力,让代码更优雅、功能更强大。本文将带你领略装饰器的奥秘,从基础概念到实际应用,一步步深入其内涵与意义。
|
4天前
|
机器学习/深度学习 缓存 数据挖掘
Python性能优化:提升你的代码效率
【10月更文挑战第22天】 Python性能优化:提升你的代码效率
8 1
|
7天前
|
机器人 Shell Linux
【Azure Bot Service】部署Python ChatBot代码到App Service中
本文介绍了使用Python编写的ChatBot在部署到Azure App Service时遇到的问题及解决方案。主要问题是应用启动失败,错误信息为“Failed to find attribute 'app' in 'app'”。解决步骤包括:1) 修改`app.py`文件,添加`init_func`函数;2) 配置`config.py`,添加与Azure Bot Service认证相关的配置项;3) 设置App Service的启动命令为`python3 -m aiohttp.web -H 0.0.0.0 -P 8000 app:init_func`。
|
11天前
|
人工智能 IDE 测试技术
使用通义灵码提升Python开发效率:从熟悉代码到实现需求的全流程体验
作为一名Python开发者,我最近开始使用通义灵码作为开发辅助工具。它显著提高了我的工作效率,特别是在理解和修改复杂代码逻辑方面。通过AI编码助手,我能够在短时间内快速上手新项目,实现新需求,并进行代码优化,整体效率提升了60%以上。通义灵码不仅加快了代码生成速度,还增强了代码的健壮性和稳定性。
|
11天前
|
数据处理 开发者 Python
Python中的列表推导式:一种优雅的代码简化技巧####
【10月更文挑战第15天】 本文将深入浅出地探讨Python中列表推导式的使用,这是一种强大且简洁的语法结构,用于从现有列表生成新列表。通过具体示例和对比传统循环方法,我们将揭示列表推导式如何提高代码的可读性和执行效率,同时保持语言的简洁性。无论你是Python初学者还是有经验的开发者,掌握这一技能都将使你的编程之旅更加顺畅。 ####
16 1
|
11天前
|
JSON 搜索推荐 API
Python的web框架有哪些?小项目比较推荐哪个?
【10月更文挑战第15天】Python的web框架有哪些?小项目比较推荐哪个?
31 1
|
13天前
|
缓存 程序员 开发者
探索Python中的装饰器:一种优雅的代码增强技巧
【10月更文挑战第13天】 在本文中,我们将深入探讨Python中的装饰器,这是一种强大的工具,它允许程序员以简洁而高效的方式扩展或修改函数和类的行为。通过具体示例,我们将展示如何利用装饰器来优化代码结构,提高开发效率,并实现如日志记录、性能计时等常见功能。本文旨在为读者提供一个关于Python装饰器的全面理解,从而能够在他们的项目中灵活运用这一技术。
20 1