首先说明一下代码检查的重要性,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的一个代码检查平台。
代码平台
上图显示的是两个项目代码质量的情况, 以eyes为例说明:
❖告警数188: pylint告警有188个
❖文件数47: 有47个文件有告警
❖中间的乌云表示代码告警数大于设置的阀值, 说明当前项目处于不健康状态
点击详细进入
这里可以看到具体项目代码质量的一个趋势图以及趋势差异表格. 点击代码趋势可以跳转到jenkins上展示的详细信息。
在这里可以点开每一个文件,进行告警修复。
我这里检查的代码分支是svn,所以只需要填写一个svn信息即可. 超过告警阀值的话会进行邮件通知。
总结
这个代码检查平台是将代码检查系统化, 让代码检查更简单. 主要用到的技术如下:
❖jenkins api 相关
❖CoPilot
❖django
❖django_q