前言
首先说明一下代码检查的重要性,python是一门静态语言,有很多检查工具(pylint、flake8等)都可以很好的检查代码. 平时我们大多数都是以插件的形式集成到编辑器(如Sublime、Visual Studio Code等). 比如我们有如下代码:
# -*- encoding: utf-8 -*-
import datetime
def get_now():
date = datetime.datetime.now()
return date
随着不同的人改动,可能会变成这样:
# -*- encoding: utf-8 -*-
import datetime
from datetime import datetime
def get_now():
date = datetime.datetime.now()
return date
能看出有什么问题吗, 让我们使用pylint
执行一下看看:
C: 11, 0: Trailing newlines (trailing-newlines)
C: 1, 0: Missing module docstring (missing-docstring)
C: 8, 0: Missing function docstring (missing-docstring)
E: 9,11: Class 'datetime' has no 'datetime' member (no-member)
显示错误:类datetime没有datetime属性
,这是一个在实际代码发现的问题, 由于后来的人增加的from datetime import datetime
覆盖了import datetime
. 这些错误很隐蔽, 直接很难发现.
pylint代码检查
下面介绍一下pylint
检查代码的两种方式:
命令行
- 手动安装检查需要的库
-
pylint
+ 模块名或包名 进行检查 - 从控制台看检查结果
jenkins
jenkins插件Violations
支持pylint、jslint等结果的显示.
- 创建jenkins job
- 配置job:
- 设置Subversion
- 设置Credentials(svn登陆账号密码)
- 编写构建脚本
- 设置Report Violations
- 设置一些邮件通知相关
- 构建,查看代码检查结果
由于我使用的代码仓库是svn
,git
的话也类似.
如果有很多项目需要进行代码检查, 就可以看到上面两种方式的局限性了:
- 新增一个项目进行检查步骤多,容易出错
- 没有一个直观的视图了解多个项目健康状况
- …
基于上面种种不便, 为了将代码检查系统化, 下面检查基于jenkins+pylint的一个代码检查平台.
代码平台
首页
image.png
上图显示的是两个项目代码质量的情况, 以
eyes
为例说明:
- 告警数188: pylint告警有188个
- 文件数47: 有47个文件有告警
- 中间的乌云表示代码告警数大于设置的阀值, 说明当前项目处于不健康状态
详细
点击详细
进入
image.png
这里可以看到具体项目代码质量的一个趋势图以及趋势差异表格. 点击代码趋势
可以跳转到jenkins
上展示的详细信息.
代码告警详细
image.png
在这里可以点开每一个文件,进行告警修复.
新增一个待检查的项目
image.png
我这里检查的代码分支是svn,所以只需要填写一个svn信息即可. 超过告警阀值的话会进行邮件通知.
总结
这个代码检查平台是将代码检查系统化, 让代码检查更简单. 主要用到的技术如下:
- jenkins api 相关
- CoPilot
- django
- django_q